diff --git a/.all-contributorsrc b/.all-contributorsrc index 6ba4565ed..b3d36a461 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -8,6 +8,15 @@ "repoType": "github", "commitConvention": "none", "contributors": [ + { + "login": "ms:nelson", + "name": "Nelson Pereira", + "avatar_url": "https://media.licdn.com/dms/image/v2/C5603AQGWN7nsODstqA/profile-displayphoto-shrink_800_800/profile-displayphoto-shrink_800_800/0/1516244319322?e=1747872000&v=beta&t=lfNCm-3-1YJhteCW640sF8nfeUOtCc3YfnbKVpHu8Ko#", + "profile": "https://www.linkedin.com/in/nelsonmpereira/", + "contributions": [ + "leader" + ] + }, { "login": "flanakin", "name": "Michael Flanakin", @@ -46,6 +55,35 @@ "promotion" ] }, + { + "login": "tshah2808", + "name": "Tanuja Shah", + "avatar_url": "https://avatars.githubusercontent.com/u/67380293?v=4", + "profile": "https://github.com/tshah2808", + "contributions": [ + "leader" + ] + }, + { + "login": "ms:fernandovas", + "name": "Fernando Vasconcellos", + "avatar_url": "https://media.licdn.com/dms/image/v2/C4D03AQGOHJHlq3nhpQ/profile-displayphoto-shrink_800_800/profile-displayphoto-shrink_800_800/0/1571181473582?e=1747872000&v=beta&t=Lyp-ij1u_tJT_GRSb7pa8syMMKH9bY6DExCLjhIyJME#", + "profile": "https://www.linkedin.com/in/fernando-vasconcellos-ba398b191/", + "contributions": [ + "leader", + "doc", + "promotion" + ] + }, + { + "login": "DirkBrinkmann", + "name": "Dirk Brinkmann", + "avatar_url": "https://avatars.githubusercontent.com/u/19854016?v=4", + "profile": "https://github.com/DirkBrinkmann", + "contributions": [ + "leader" + ] + }, { "login": "MSBrett", "name": "Brett Wilson", @@ -287,7 +325,8 @@ "profile": "https://github.com/DUeffing", "contributions": [ "ideas", - "bug" + "bug", + "doc" ] }, { @@ -534,7 +573,8 @@ "avatar_url": "https://avatars.githubusercontent.com/u/28718362?v=4", "profile": "https://github.com/thecloudman", "contributions": [ - "bug" + "bug", + "code" ] }, { @@ -657,6 +697,52 @@ "contributions": [ "code" ] + }, + { + "login": "nsftwr", + "name": "Rudolfs Naumenko", + "avatar_url": "https://avatars.githubusercontent.com/u/14138020?v=4", + "profile": "https://github.com/nsftwr", + "contributions": [ + "code" + ] + }, + { + "login": "philipstreet", + "name": "Philip Street", + "avatar_url": "https://avatars.githubusercontent.com/u/10855315?v=4", + "profile": "https://github.com/philipstreet", + "contributions": [ + "bug", + "review" + ] + }, + { + "login": "japyjaap", + "name": "JSwinkels", + "avatar_url": "https://avatars.githubusercontent.com/u/6353034?v=4", + "profile": "https://github.com/japyjaap", + "contributions": [ + "bug" + ] + }, + { + "login": "am-jl", + "name": "Jared", + "avatar_url": "https://avatars.githubusercontent.com/u/173379073?v=4", + "profile": "https://github.com/am-jl", + "contributions": [ + "review" + ] + }, + { + "login": "picccard", + "name": "Eskil Uhlving Larsen", + "avatar_url": "https://avatars.githubusercontent.com/u/7443949?v=4", + "profile": "http://blog.eula.no", + "contributions": [ + "doc" + ] } ], "commitType": "docs", diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index d5203a941..38eedc630 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -11,15 +11,87 @@ # In each subsection folders are ordered first by depth, then alphabetically. # This should make it easy to add new rules without breaking existing ones. -# Global rule: -* @microsoft/finops-toolkit +# Global rule +#* @microsoft/finops-toolkit +* @flanakin @arthurclares -# DevOps folders: -.build @aromano2 -.github @aromano2 +# DevOps folders +#.build @TODO +#.github @TODO +#docs-wiki @TODO +#src/scripts @TODO -# PowerShell: -src/powershell @aromano2 +# General +#docs/help.md @TODO +#docs/README.md @TODO +#docs-mslearn/toolkit/help @TODO +#docs-mslearn/toolkit/*.md @TODO +#docs-wiki @TODO + +# FTK governing board +docs-mslearn/toolkit/roadmap.md @microsoft/finops-toolkit-board +docs-wiki/Advisory-council.md @microsoft/finops-toolkit-board +docs-wiki/Governing-board.md @microsoft/finops-toolkit-board +docs-wiki/Release-process.md @microsoft/finops-toolkit-board + +# FTK advisory council +.github/CODEOWNERS @microsoft/finops-toolkit-council +docs-wiki/Coding-guidelines.md @microsoft/finops-toolkit-council +docs-wiki/Dev-process.md @microsoft/finops-toolkit-council +docs-wiki/Support-escalations.md @microsoft/finops-toolkit-board + +# Alerts +docs/alerts.md @ro100e @arthurclares @flanakin +docs-mslearn/toolkit/alerts @ro100e @arthurclares @flanakin +src/templates/finops-alerts @ro100e + +# Bicep +#docs/bicep.md @TODO +#docs-mslearn/toolkit/bicep-registry @TODO +#src/bicep-registry @TODO + +# Guide +docs/guide.md @flanakin +docs-mslearn/best-practices @arthurclares @flanakin +docs-mslearn/framework @arthurclares @flanakin @kevindlr +docs-mslearn/focus @flanakin + +# Fabric +docs-mslearn/fabric @flanakin # Hubs -src/templates/finops-hub @msbrett +docs/hubs.md @msbrett @flanakin @arthurclares +docs-mslearn/toolkit/hubs @msbrett @flanakin @arthurclares +src/templates/finops-hub @msbrett @flanakin @arthurclares + +# Open data +docs/open-data.md @flanakin +docs-mslearn/toolkit/open-data.md @flanakin +src/open-data @flanakin + +# Optimization Engine +docs/optimization-engine.md @helderpinto @arthurclares @flanakin +docs-mslearn/toolkit/optimization-engine @helderpinto @arthurclares @flanakin +src/optimization-engine @helderpinto + +# Power BI +#docs/power-bi.md @TODO +#docs-mslearn/toolkit/power-bi @TODO +#src/power-bi @TODO +src/power-bi/*/Governance* @nteyan + +# PowerShell +#docs/powershell.md @TODO +#src/powershell @TODO +#docs-mslearn/toolkit/powershell @TODO +#src/powershell @TODO + +# Web +src/web @ivanmtta @jamelachahbar @flanakin + +# Workbooks +docs/workbooks.md @arthurclares @nteyan @flanakin +docs-mslearn/toolkit/workbooks @arthurclares @nteyan @flanakin +src/templates/finops-workbooks @arthurclares @nteyan +src/workbooks/governance @nteyan +src/workbooks/optimization @arthurclares diff --git a/.github/workflows/opendata-ci.yml b/.github/workflows/opendata-ci.yml index b45eed415..f1f4afa80 100644 --- a/.github/workflows/opendata-ci.yml +++ b/.github/workflows/opendata-ci.yml @@ -10,6 +10,7 @@ permissions: contents: write pull-requests: write statuses: write + id-token: write jobs: build: runs-on: ubuntu-latest @@ -22,6 +23,8 @@ jobs: ref: ${{ github.event.pull_request.head.ref }} - name: Set environment variable "commit-message" run: echo "commit-message=$(git log -1 --pretty=format:'%s')" >> $GITHUB_ENV + - name: Set environment variable "build_url" + run: echo "build_url=${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" >> $GITHUB_ENV - name: Set environment variable "commit-author" run: echo "commit-author=$(git log -1 --pretty=format:'%an')" >> $GITHUB_ENV - name: Set environment variable "is-auto-commit" @@ -40,6 +43,18 @@ jobs: git push } - name: Test Open Data + id: test shell: pwsh run: | src/scripts/Build-OpenData.ps1 -Test + - uses: actions/github-script@v7 + if: failure() + with: + github-token: ${{secrets.GITHUB_TOKEN}} + script: | + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: '⚠️ Open Data CI task failed: ${{ env.build_url }}' + }) diff --git a/README.md b/README.md index 000e866cc..e1956c9b9 100644 --- a/README.md +++ b/README.md @@ -25,97 +25,108 @@ There are many ways to participate. From reporting bugs and requesting features + + + + + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + + + - - - - + + - - + + + + + + +
Nelson Pereira
Nelson Pereira

🌟
Michael Flanakin
Michael Flanakin

🌟 💻 👀 📖 🧑‍🏫 📣
Arthur Clares
Arthur Clares

🌟 💻 👀 📖 🧑‍🏫 📣
Sonia Cuff
Sonia Cuff

🌟 📣
Tanuja Shah
Tanuja Shah

🌟
Fernando Vasconcellos
Fernando Vasconcellos

🌟 📖 📣
Dirk Brinkmann
Dirk Brinkmann

🌟
Brett Wilson
Brett Wilson

💻 👀 📖
Hélder Pinto
Hélder Pinto

💻 👀 📖 🐛
Nicolas Teyan
Nicolas Teyan

💻 📖
Bill Anderson
Bill Anderson

📖
Robel
Robel

💻 📖
Sacha Narinx
Sacha Narinx

💻 👀 📖
Anthony Romano
Anthony Romano

💻 👀 📖
grantxyzou
grantxyzou

🎨
lmoscinski
lmoscinski

🎨
Roland Krummenacher
Roland Krummenacher

💻 👀 🐛
Divyadeep Dayal
Divyadeep Dayal

💻
jamelachahbar
jamelachahbar

💻
Orthodoxos Kipouridis
Orthodoxos Kipouridis

💻 📖
Ben Shy
Ben Shy

💻 👀
Kevin De La Rosa
Kevin De La Rosa

📖
bwatts64
bwatts64

💻 👀
Dany Hoter
Dany Hoter

💻 👀
Joseph John
Joseph John

📖 👀
ripadrao
ripadrao

📖
Pedro Sousa
Pedro Sousa

📖
Sourav Bera
Sourav Bera

📖
J.R. Phillips
J.R. Phillips

💻
Saad Mahmood
Saad Mahmood

💻
simonarbel
simonarbel

🐛
Daniel Ueffing
Daniel Ueffing

🤔 🐛
Daniel Ueffing
Daniel Ueffing

🤔 🐛 📖
Seif Bassem
Seif Bassem

💻
Arjen Huitema
Arjen Huitema

💻
Yuan Zhang
Yuan Zhang

💻
ymehdimsft
ymehdimsft

💻
srilatha inavolu
srilatha inavolu

💻 👀
soumyananda
soumyananda

💻 👀
Chris Bowman
Chris Bowman

🐛 👀
Trey Morgan
Trey Morgan

💻
Travis Silvers
Travis Silvers

👀
Travis Silvers
Travis Silvers

👀
vijayaj4
vijayaj4

💻
pskulkarni
pskulkarni

💻
Ankur Sharma
Ankur Sharma

👀
SREENADHA REDDY VANKIREDDY
SREENADHA REDDY VANKIREDDY

👀
Mubarak Tanseer
Mubarak Tanseer

🐛
maggar
maggar

🤔
lkshck
lkshck

🐛
Slavik N
Slavik N

👀
Adam Andersson
Adam Andersson

🐛
Irena Jurica
Irena Jurica

👀
renanalmeidjr
renanalmeidjr

🐛
elvismangarae
elvismangarae

🐛
erincon01
erincon01

👀 💬
NavidKhan8
NavidKhan8

🐛
Maik van der Gaag
Maik van der Gaag

🐛
Rodney
Rodney

👀
Graham
Graham

🐛 💻
psilantropy
psilantropy

🐛
Graham
Graham

🐛
psilantropy
psilantropy

🐛
Marc Samendinger
Marc Samendinger

📖
Patric K.
Patric K.

💻 🐛
Misba Yousuf
Misba Yousuf

📖
Will Murphy
Will Murphy

🐛
Matt Davis
Matt Davis

🐛
Junya Yamaguchi
Junya Yamaguchi

💻
Claudia Zambella
Claudia Zambella

🛡️
Brian Wyka
Brian Wyka

📖 👀 🐛
ivanboscolo
ivanboscolo

🐛
buxel
buxel

💬
John Lundell
John Lundell

🐛 💬
Ivan Mota
Ivan Mota

💻
Rudolfs Naumenko
Rudolfs Naumenko

💻
Philip Street
Philip Street

🐛 👀
JSwinkels
JSwinkels

🐛
Jared
Jared

👀
Eskil Uhlving Larsen
Eskil Uhlving Larsen

📖
diff --git a/docs-mslearn/TOC.yml b/docs-mslearn/TOC.yml index 53cfd6331..6ff067814 100644 --- a/docs-mslearn/TOC.yml +++ b/docs-mslearn/TOC.yml @@ -180,6 +180,12 @@ href: toolkit/workbooks/optimization.md - name: Customize workbooks href: toolkit/workbooks/customize-workbooks.md + - name: FinOps alerts + items: + - name: Overview + href: toolkit/alerts/finops-alerts-overview.md + - name: Configure alerts + href: toolkit/alerts/configure-finops-alerts.md - name: Optimization engine items: - name: Overview diff --git a/docs-mslearn/best-practices/compute.md b/docs-mslearn/best-practices/compute.md index eb4d05a32..739237ad4 100644 --- a/docs-mslearn/best-practices/compute.md +++ b/docs-mslearn/best-practices/compute.md @@ -1,13 +1,13 @@ --- title: FinOps best practices for compute description: This article provides FinOps best practices for compute services, including cost optimization, efficiency improvements, and insights into Azure resources. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources -ms.reviewer: micflan +ms.reviewer: arclares #customer intent: As a FinOps user, I want to understand what FinOps best practices I should use with compute services. --- @@ -256,7 +256,7 @@ resources Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.BestPractices/featureName/Compute) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.BestPractices/featureName/Compute) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/best-practices/databases.md b/docs-mslearn/best-practices/databases.md index fa2fec705..01178024e 100644 --- a/docs-mslearn/best-practices/databases.md +++ b/docs-mslearn/best-practices/databases.md @@ -1,9 +1,9 @@ --- title: FinOps best practices for Databases description: This article outlines a collection of proven FinOps practices for database services. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -189,7 +189,7 @@ resources Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.BestPractices/featureName/Databases) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.BestPractices/featureName/Databases) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/best-practices/general.md b/docs-mslearn/best-practices/general.md index 9bf58655b..7b1572e80 100644 --- a/docs-mslearn/best-practices/general.md +++ b/docs-mslearn/best-practices/general.md @@ -1,9 +1,9 @@ --- title: FinOps best practices for general resource management description: This article outlines proven FinOps practices for Microsoft Cloud services, focusing on cost optimization, efficiency improvements, and resource insights. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -62,7 +62,7 @@ advisorresources Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.BestPractices/featureName/General) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.BestPractices/featureName/General) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/best-practices/library.md b/docs-mslearn/best-practices/library.md index 83ccc02c1..2c7fa5eba 100644 --- a/docs-mslearn/best-practices/library.md +++ b/docs-mslearn/best-practices/library.md @@ -1,9 +1,9 @@ --- title: FinOps best practices library description: Discover essential FinOps best practices to optimize cost efficiency and governance for your Azure resources. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -32,7 +32,7 @@ The FinOps best practices library is a collection of essential proven practices Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.BestPractices/featureName/Overview) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.BestPractices/featureName/Overview) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/best-practices/networking.md b/docs-mslearn/best-practices/networking.md index b32730f04..b3a27acfa 100644 --- a/docs-mslearn/best-practices/networking.md +++ b/docs-mslearn/best-practices/networking.md @@ -1,9 +1,9 @@ --- title: FinOps best practices for Networking description: This article outlines proven FinOps practices for networking services, focusing on cost optimization, efficiency improvements, and resource insights. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -422,7 +422,7 @@ resources Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.BestPractices/featureName/Networking) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.BestPractices/featureName/Networking) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/best-practices/storage.md b/docs-mslearn/best-practices/storage.md index d9aa61579..f70c84b08 100644 --- a/docs-mslearn/best-practices/storage.md +++ b/docs-mslearn/best-practices/storage.md @@ -1,9 +1,9 @@ --- title: FinOps best practices for Storage description: This article outlines proven FinOps practices for storage services, focusing on cost optimization, efficiency improvements, and resource insights. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -188,7 +188,7 @@ resources Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.BestPractices/featureName/Storage) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.BestPractices/featureName/Storage) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/best-practices/web.md b/docs-mslearn/best-practices/web.md index b80a057aa..ec4eecbc5 100644 --- a/docs-mslearn/best-practices/web.md +++ b/docs-mslearn/best-practices/web.md @@ -1,9 +1,9 @@ --- title: FinOps best practices for Web description: This article outlines a collection of proven FinOps practices for web services, focusing on cost optimization, efficiency improvements, and resource insights. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -88,7 +88,7 @@ resources Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.BestPractices/featureName/Web) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.BestPractices/featureName/Web) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/conduct-iteration.md b/docs-mslearn/conduct-iteration.md index b677c4bd1..246f8cccb 100644 --- a/docs-mslearn/conduct-iteration.md +++ b/docs-mslearn/conduct-iteration.md @@ -1,9 +1,9 @@ --- title: Tutorial - Conduct an iteration description: This tutorial helps you learn how to take an iterative approach to FinOps adoption. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: tutorial ms.service: finops ms.subservice: finops-learning-resources @@ -130,7 +130,7 @@ After you close out on the iteration, remember that this tutorial can help guide Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.General/featureName/ConductAnIteration) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.General/featureName/ConductAnIteration) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/fabric/create-fabric-workspace-finops.md b/docs-mslearn/fabric/create-fabric-workspace-finops.md index 39d234460..a8b798686 100644 --- a/docs-mslearn/fabric/create-fabric-workspace-finops.md +++ b/docs-mslearn/fabric/create-fabric-workspace-finops.md @@ -1,9 +1,9 @@ --- title: Create a Fabric workspace for FinOps description: This article guides you through creating and configuring a Microsoft Fabric workspace for FinOps. When completed, you can use Power BI to build reports. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: how-to ms.service: finops ms.subservice: finops-workspaces @@ -84,7 +84,7 @@ Ensure that your export completed and that the file is available before moving t >[!IMPORTANT] > Cost Management exports utilize managed identity. To create an export, you must be an Owner of the storage account or have access to grant permissions to the storage account. To see all required permissions, see [Prerequisites](/azure/cost-management-billing/costs/tutorial-improved-exports#prerequisites). -If you want to automate export creation, consider using the [New-FinOpsCostExport command](https://microsoft.github.io/finops-toolkit/powershell/cost/New-FinOpsCostExport) in the FinOps toolkit PowerShell module. +If you want to automate export creation, consider using the [New-FinOpsCostExport command](../toolkit/powershell/cost/New-FinOpsCostExport.md) in the FinOps toolkit PowerShell module. If you deployed [FinOps hubs](../toolkit/hubs/finops-hubs-overview.md), you can skip this step and use the processed data in hub storage. @@ -261,7 +261,7 @@ After the data is ingested into Fabric and tables are ready, you can move on to Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Workspaces/featureName/Documentation.Create) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Workspaces/featureName/Documentation.Create) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/focus/conformance-full-report.md b/docs-mslearn/focus/conformance-full-report.md index 998abd9f0..cd86b561a 100644 --- a/docs-mslearn/focus/conformance-full-report.md +++ b/docs-mslearn/focus/conformance-full-report.md @@ -1,9 +1,9 @@ --- title: FOCUS conformance report description: Comprehensive analysis of the Microsoft Cost Management FOCUS dataset's adherence to FOCUS requirements. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-learning-resources @@ -780,7 +780,7 @@ The rest of this document lists the FOCUS requirements grouped by attribute and Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.FOCUS/featureName/Conformance.Report) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.FOCUS/featureName/Conformance.Report) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/focus/conformance-summary.md b/docs-mslearn/focus/conformance-summary.md index cc191d88d..6cd389233 100644 --- a/docs-mslearn/focus/conformance-summary.md +++ b/docs-mslearn/focus/conformance-summary.md @@ -1,9 +1,9 @@ --- title: FOCUS conformance summary description: Summary of FOCUS conformance gaps in the Microsoft Cost Management FOCUS dataset with applicable workarounds. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-learning-resources @@ -72,7 +72,7 @@ The remaining conformance gaps are summarized in the following sections. For det Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.FOCUS/featureName/Conformance.Summary) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.FOCUS/featureName/Conformance.Summary) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/focus/convert.md b/docs-mslearn/focus/convert.md index bb7e09f67..2b4c84bd3 100644 --- a/docs-mslearn/focus/convert.md +++ b/docs-mslearn/focus/convert.md @@ -1,9 +1,9 @@ --- title: Convert cost and usage data to FOCUS description: This document provides guidance for converting existing Cost Management datasets to the FinOps Open Cost and Usage Specification (FOCUS). -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -91,7 +91,7 @@ If you have feedback about FOCUS, [create an issue in the FOCUS repository](http Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.FOCUS/featureName/Convert) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.FOCUS/featureName/Convert) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/focus/mapping.md b/docs-mslearn/focus/mapping.md index a3997ede5..579a10ed7 100644 --- a/docs-mslearn/focus/mapping.md +++ b/docs-mslearn/focus/mapping.md @@ -1,9 +1,9 @@ --- title: Update reports to use FOCUS columns description: Learn how to update existing reports from Cost Management actual or amortized datasets to use FOCUS columns. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -115,7 +115,7 @@ If you have feedback about FOCUS, [create an issue in the FOCUS repository](http Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.FOCUS/featureName/Mapping) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.FOCUS/featureName/Mapping) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/focus/metadata.md b/docs-mslearn/focus/metadata.md index 1020d8597..3991dd539 100644 --- a/docs-mslearn/focus/metadata.md +++ b/docs-mslearn/focus/metadata.md @@ -1,9 +1,9 @@ --- title: FOCUS metadata description: This article provides general information about the FOCUS dataset including the data generator, schema version, and columns included in the dataset. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-learning-resources @@ -256,7 +256,7 @@ If you have feedback about FOCUS, [create an issue in the FOCUS repository](http Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.FOCUS/featureName/Metadata) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.FOCUS/featureName/Metadata) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/focus/validate.md b/docs-mslearn/focus/validate.md index 1d957cf57..618f7b4b9 100644 --- a/docs-mslearn/focus/validate.md +++ b/docs-mslearn/focus/validate.md @@ -1,9 +1,9 @@ --- title: Validate FOCUS data description: This article provides reference information that explains how to compare FOCUS data with existing Cost Management datasets. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-learning-resources @@ -102,7 +102,7 @@ If you have feedback about FOCUS, [create an issue in the FOCUS repository](http Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.FOCUS/featureName/Validate) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.FOCUS/featureName/Validate) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/focus/what-is-focus.md b/docs-mslearn/focus/what-is-focus.md index 58193ae40..19e5ee36d 100644 --- a/docs-mslearn/focus/what-is-focus.md +++ b/docs-mslearn/focus/what-is-focus.md @@ -1,9 +1,9 @@ --- title: What is FOCUS? description: Learn about FOCUS, a cloud-agnostic billing data specification that helps optimize cost and usage across cloud, SaaS, and on-premises providers. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: overview ms.service: finops ms.subservice: finops-learning-resources @@ -136,6 +136,8 @@ If you're interested in a more thorough walkthrough of all the FOCUS columns, ch - [Charge types and pricing models](https://techcommunity.microsoft.com/blog/FinOpsBlog/learning-focus-charge-types-and-pricing-models/4357997) - [Date columns](https://techcommunity.microsoft.com/blog/finopsblog/learning-focus-date-columns/4366382) - [Resource columns](https://techcommunity.microsoft.com/blog/finopsblog/learning-focus-resource-columns/4372954) +- [Service columns](https://techcommunity.microsoft.com/blog/finopsblog/learning-focus-service-columns/4388703) +- [SKU columns](https://techcommunity.microsoft.com/blog/finopsblog/learning-focus-skus/4398881) New blog posts are released periodically, so watch the [FinOps blog](https://aka.ms/finops/blog) for updates every couple of weeks. @@ -189,7 +191,7 @@ You can also find related videos on the FinOps Foundation YouTube channel: Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.FOCUS/featureName/Overview) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.FOCUS/featureName/Overview) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/capabilities.md b/docs-mslearn/framework/capabilities.md index 561e2484e..933cf6047 100644 --- a/docs-mslearn/framework/capabilities.md +++ b/docs-mslearn/framework/capabilities.md @@ -1,9 +1,9 @@ --- title: FinOps capabilities description: Learn about what the fundamental building blocks of the FinOps Framework that enable you to maximize business value through the cloud. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: conceptual ms.service: finops ms.subservice: finops-learning-resources @@ -72,7 +72,7 @@ The **Manage the FinOps practice** domain is focused on establishing a clear and Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/finops-framework.md b/docs-mslearn/framework/finops-framework.md index 3e59e9de0..c84b08160 100644 --- a/docs-mslearn/framework/finops-framework.md +++ b/docs-mslearn/framework/finops-framework.md @@ -1,9 +1,9 @@ --- title: FinOps Framework overview description: 'Learn about what the FinOps Framework is and how you can use it to accelerate your cost management and optimization goals.' -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -151,7 +151,7 @@ FinOps Foundation offers many resources to help you learn and implement FinOps. Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Overview) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Overview) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/manage/assessment.md b/docs-mslearn/framework/manage/assessment.md index 529df9c49..d16727e0f 100644 --- a/docs-mslearn/framework/manage/assessment.md +++ b/docs-mslearn/framework/manage/assessment.md @@ -2,9 +2,9 @@ title: FinOps assessment description: This article helps you understand the FinOps assessment capability within the FinOps Framework and how to implement that in the Microsoft Cloud. ms.topic: concept-article -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.service: finops ms.subservice: finops-learning-resources ms.reviewer: micflan @@ -66,7 +66,7 @@ This capability is a part of the FinOps Framework by the FinOps Foundation, a no Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Manage.Assessment) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Manage.Assessment) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/manage/education.md b/docs-mslearn/framework/manage/education.md index 01eaab401..3689751bf 100644 --- a/docs-mslearn/framework/manage/education.md +++ b/docs-mslearn/framework/manage/education.md @@ -1,9 +1,9 @@ --- title: FinOps education and enablement description: This article helps you understand the FinOps education and enablement capability within the FinOps Framework and how to implement that in the Microsoft Cloud. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -73,7 +73,7 @@ At this point, you have a central repository for training content and targeted i ## Learn more at the FinOps Foundation -This capability is a part of the FinOps Framework by the FinOps Foundation, a non-profit organization dedicated to advancing cloud cost management and optimization. For more information about FinOps, including useful playbooks, training and certification programs, and more, see the [FinOps education and enablement capability](https://www.finops.org/framework/capabilities/education-enablement/) article in the FinOps Framework documentation. +This capability is a part of the FinOps Framework by the FinOps Foundation, a non-profit organization dedicated to advancing cloud cost management and optimization. For more information about FinOps, including useful playbooks, training and certification programs, and more, see the [FinOps education and enablement capability](https://www.finops.org/framework/capabilities/finops-education-enablement/) article in the FinOps Framework documentation. You can also find related videos on the FinOps Foundation YouTube channel: @@ -86,7 +86,7 @@ You can also find related videos on the FinOps Foundation YouTube channel: Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Manage.Education) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Manage.Education) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/manage/governance.md b/docs-mslearn/framework/manage/governance.md index c3a014133..88212a766 100644 --- a/docs-mslearn/framework/manage/governance.md +++ b/docs-mslearn/framework/manage/governance.md @@ -1,9 +1,9 @@ --- title: Cloud policy and governance description: This article helps you understand the cloud policy and governance capability within the FinOps Framework and how to implement that in the Microsoft Cloud. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -80,7 +80,7 @@ You can also find related videos on the FinOps Foundation YouTube channel: Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Manage.Governance) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Manage.Governance) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. @@ -104,7 +104,7 @@ Related products: Related solutions: -- [Governance workbook](https://microsoft.github.io/finops-toolkit/workbooks/governance) +- [Governance workbook](../../toolkit/workbooks/governance.md) Other resources: diff --git a/docs-mslearn/framework/manage/intersecting-disciplines.md b/docs-mslearn/framework/manage/intersecting-disciplines.md index a59e81873..28e5a13f8 100644 --- a/docs-mslearn/framework/manage/intersecting-disciplines.md +++ b/docs-mslearn/framework/manage/intersecting-disciplines.md @@ -1,9 +1,9 @@ --- title: FinOps and intersecting frameworks -description: This article helps you understand the FinOps and intersecting frameworks capability within the FinOps Framework and how to implement that in the Microsoft Cloud. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +description: This article helps you understand the FinOps and intersecting frameworks capability in the FinOps Framework and how to implement that in the Microsoft Cloud. +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -30,10 +30,23 @@ Identify what frameworks and methodologies are used within your organization. Le Implementation of this capability is highly dependent on how your organization adopted each of the following frameworks and methodologies and what tools you use for each. See the following articles for details: -- [IT Asset Management (ITAM)](https://www.finops.org/framework/capabilities/finops-itam/) by FinOps Foundation -- IT Service Management + + +- IT Financial Management + - [What is financial management?](https://www.microsoft.com/dynamics-365/topics/finance/what-is-financial-management) +- IT Asset Management (ITAM) + - [Asset management in Dynamics 365](/dynamics365/supply-chain/asset-management/) + - [Asset management pattern for Power Apps](/power-apps/guidance/patterns/asset-management-pattern) +- Software Asset Management (SAM) + - [Software Asset Management implementation guide](https://www.microsoft.com/download/details.aspx?id=31382) +- IT Service Management (ITSM) - [Azure Monitor integration](/azure/azure-monitor/alerts/itsmc-overview) - [Azure DevOps and ServiceNow](/azure/devops/pipelines/release/approvals/servicenow) +- IT Security + - [Microsoft Security](https://www.microsoft.com/security) + - [Microsoft security and risk management blog](https://www.microsoft.com/insidetrack/blog/security)
@@ -42,7 +55,7 @@ Implementation of this capability is highly dependent on how your organization a Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Manage.Disciplines) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Manage.Disciplines) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. @@ -53,14 +66,12 @@ If you're looking for something specific, vote for an existing or create a new i ## Learn more at the FinOps Foundation -This capability is a part of the FinOps Framework by the FinOps Foundation, a non-profit organization dedicated to advancing cloud cost management and optimization. For more information about FinOps, including useful playbooks, training and certification programs, and more, see the [FinOps and intersecting frameworks capability](https://www.finops.org/framework/capabilities/finops-intersection/) article in the FinOps Framework documentation. +This capability is a part of the FinOps Framework by the FinOps Foundation, a non-profit organization dedicated to advancing cloud cost management and optimization. For more information about FinOps, including useful playbooks, training and certification programs, and more, see the [FinOps and intersecting frameworks capability](https://www.finops.org/framework/capabilities/intersecting-disciplines/) article in the FinOps Framework documentation. You can also find related videos on the FinOps Foundation YouTube channel: > [!VIDEO https://www.youtube.com/embed/t3pKnbtatBA?list=PLUSCToibAswnAZASwN31liSpOf0vb6rXM] - -
## Related content diff --git a/docs-mslearn/framework/manage/invoicing-chargeback.md b/docs-mslearn/framework/manage/invoicing-chargeback.md index fac70ca0b..b45959aee 100644 --- a/docs-mslearn/framework/manage/invoicing-chargeback.md +++ b/docs-mslearn/framework/manage/invoicing-chargeback.md @@ -1,9 +1,9 @@ --- title: Invoicing and chargeback description: This article helps you understand the invoicing and chargeback capability in the FinOps Framework and how to implement that in the Microsoft Cloud. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.service: finops ms.subservice: finops-learning-resources ms.reviewer: micflan @@ -75,7 +75,7 @@ You can also find related videos on the FinOps Foundation YouTube channel: Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Manage.Invoicing) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Manage.Invoicing) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/manage/manage-finops.md b/docs-mslearn/framework/manage/manage-finops.md index 139d462c3..a483b5be1 100644 --- a/docs-mslearn/framework/manage/manage-finops.md +++ b/docs-mslearn/framework/manage/manage-finops.md @@ -1,9 +1,9 @@ --- title: Manage the FinOps practice description: Learn about the FinOps capabilities that help you establish your FinOps practice and drive organizational accountability. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: conceptual ms.service: finops ms.subservice: finops-learning-resources @@ -106,7 +106,7 @@ To learn more, see [Intersecting frameworks](./intersecting-disciplines.md). Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Manage) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Manage) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/manage/onboarding.md b/docs-mslearn/framework/manage/onboarding.md index a172c2801..5d39a62ac 100644 --- a/docs-mslearn/framework/manage/onboarding.md +++ b/docs-mslearn/framework/manage/onboarding.md @@ -1,9 +1,9 @@ --- title: Onboarding workloads description: This article helps you understand the onboarding workloads capability within the FinOps Framework and how to implement that in the Microsoft Cloud. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -87,7 +87,7 @@ You can also find related videos on the FinOps Foundation YouTube channel: Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Manage.Onboarding) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Manage.Onboarding) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/manage/operations.md b/docs-mslearn/framework/manage/operations.md index 868666c27..2a36b4a1d 100644 --- a/docs-mslearn/framework/manage/operations.md +++ b/docs-mslearn/framework/manage/operations.md @@ -1,9 +1,9 @@ --- title: FinOps practice operations description: This article helps you understand the FinOps practice operations capability within the FinOps Framework and how to implement that in the Microsoft Cloud. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -53,7 +53,7 @@ Most organizations find it's important to establish a FinOps team as they near $ - Document the FinOps strategy, including staffing and funding requirements and how the team will support others. - Leverage the [FinOps assessment capability](./assessment.md) to build a complete plan. - Utilize [FinOps Foundation resources](https://www.finops.org/resources) to build your pitch, strategy, and more. - - Use the [FinOps community](https://www.finops.org/community/getting-started/) to share their knowledge and experience. They've been where you are. + - Use the [FinOps community](https://www.finops.org/community/) to share their knowledge and experience. They've been where you are. - Dual-track your FinOps efforts: Drive lightweight FinOps initiatives with large returns while you cultivate your community. Nothing is better proof than data. - Promote and celebrate your wins with early adopters. - Integrate with existing data sources, teams, and processes to minimize startup time. @@ -68,7 +68,7 @@ At this point, you have a regular cadence of meetings with a steering committee - Leverage the [FinOps assessment capability](./assessment.md) to build a flesh out a complete plan, incorporating knowledge sharing, automated metrics and processes, and organizational adoption. - Utilize [FinOps Foundation resources](https://www.finops.org/resources) to build your pitch, strategy, and more. - - Use the [FinOps community](https://www.finops.org/community/getting-started/) to share their knowledge and experience. They've been where you are. + - Use the [FinOps community](https://www.finops.org/community/) to share their knowledge and experience. They've been where you are. - Review the Cloud Adoption Framework guidance for tips on how to [drive organizational alignment](/azure/cloud-adoption-framework/organize) on a larger scale. You might find opportunities to align with other governance initiatives. - Define and document your operating model and evolve your strategy as a collaborative community. - Brainstorm metrics and tactics that can demonstrate value and inspire different stakeholders through effective communication. @@ -93,7 +93,7 @@ This capability is part of the FinOps Framework by the FinOps Foundation, a non- Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Manage.Operations) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Manage.Operations) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/manage/tools-services.md b/docs-mslearn/framework/manage/tools-services.md index d2b3e6a85..0604ae691 100644 --- a/docs-mslearn/framework/manage/tools-services.md +++ b/docs-mslearn/framework/manage/tools-services.md @@ -1,9 +1,9 @@ --- title: FinOps tools and services description: This article helps you understand the FinOps tools and services capability within the FinOps Framework and how to implement that in the Microsoft Cloud. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -95,7 +95,7 @@ You can also find related videos on the FinOps Foundation YouTube channel: Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Manage.ToolsAndServices) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Manage.ToolsAndServices) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/optimize/architecting.md b/docs-mslearn/framework/optimize/architecting.md index b0b2cc37e..c03a68a0b 100644 --- a/docs-mslearn/framework/optimize/architecting.md +++ b/docs-mslearn/framework/optimize/architecting.md @@ -1,9 +1,9 @@ --- title: Architecting for cloud description: This article helps you understand the architecting for cloud capability within the FinOps Framework and how to implement that in the Microsoft Cloud. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -80,7 +80,7 @@ You can also find related videos on the FinOps Foundation YouTube channel: Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Optimize.Architecting) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Optimize.Architecting) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/optimize/licensing.md b/docs-mslearn/framework/optimize/licensing.md index 82ff7e951..ebde47a98 100644 --- a/docs-mslearn/framework/optimize/licensing.md +++ b/docs-mslearn/framework/optimize/licensing.md @@ -1,9 +1,9 @@ --- title: Licensing and SaaS description: This article helps you understand the licensing and SaaS capability within the FinOps Framework and how to implement that in the Microsoft Cloud. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -65,7 +65,7 @@ You can also find related videos on the FinOps Foundation YouTube channel: Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Optimize.Licensing) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Optimize.Licensing) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/optimize/optimize-cloud-usage-cost.md b/docs-mslearn/framework/optimize/optimize-cloud-usage-cost.md index 3851dc02c..0aea9e4c4 100644 --- a/docs-mslearn/framework/optimize/optimize-cloud-usage-cost.md +++ b/docs-mslearn/framework/optimize/optimize-cloud-usage-cost.md @@ -1,9 +1,9 @@ --- title: Optimize cloud usage and cost description: Learn about the FinOps capabilities that help you identify and implement the right mix of pricing models, services, and resources needed to meet business demands. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: conceptual ms.service: finops ms.subservice: finops-learning-resources @@ -66,7 +66,7 @@ To learn more, see [Cloud sustainability](./sustainability.md). Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Optimize) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Optimize) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/optimize/rates.md b/docs-mslearn/framework/optimize/rates.md index 7430d4e83..aff740d20 100644 --- a/docs-mslearn/framework/optimize/rates.md +++ b/docs-mslearn/framework/optimize/rates.md @@ -1,9 +1,9 @@ --- title: Rate optimization description: This article helps you understand the rate optimization capability within the FinOps Framework and how to implement that in the Microsoft Cloud. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -89,7 +89,7 @@ You can also find related videos on the FinOps Foundation YouTube channel: Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Optimize.Rates) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Optimize.Rates) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/optimize/sustainability.md b/docs-mslearn/framework/optimize/sustainability.md index 50ca2fe89..fae1f0191 100644 --- a/docs-mslearn/framework/optimize/sustainability.md +++ b/docs-mslearn/framework/optimize/sustainability.md @@ -1,9 +1,9 @@ --- title: Cloud sustainability description: This article helps you understand the cloud sustainability capability within the FinOps Framework and how to implement that in the Microsoft Cloud. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -59,7 +59,7 @@ You can also find related videos on the FinOps Foundation YouTube channel: Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Optimize.Sustainability) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Optimize.Sustainability) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/optimize/workloads.md b/docs-mslearn/framework/optimize/workloads.md index 6a2e78e35..c3a641548 100644 --- a/docs-mslearn/framework/optimize/workloads.md +++ b/docs-mslearn/framework/optimize/workloads.md @@ -1,9 +1,9 @@ --- title: Workload optimization description: This article helps you understand the Workload optimization capability within the FinOps Framework and how to implement that in the Microsoft Cloud. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -104,7 +104,7 @@ You can also find related videos on the FinOps Foundation YouTube channel: Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Optimize.Workloads) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Optimize.Workloads) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/quantify/benchmarking.md b/docs-mslearn/framework/quantify/benchmarking.md index 3587383a0..1d4c0ec94 100644 --- a/docs-mslearn/framework/quantify/benchmarking.md +++ b/docs-mslearn/framework/quantify/benchmarking.md @@ -1,9 +1,9 @@ --- title: FinOps benchmarking description: This article helps you understand the benchmarking capability within the FinOps Framework and how to implement that in the Microsoft Cloud. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -68,7 +68,7 @@ This capability is a part of the FinOps Framework by the FinOps Foundation, a no Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Quantify.Benchmarking) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Quantify.Benchmarking) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/quantify/budgeting.md b/docs-mslearn/framework/quantify/budgeting.md index a8641fc37..482bfe9d2 100644 --- a/docs-mslearn/framework/quantify/budgeting.md +++ b/docs-mslearn/framework/quantify/budgeting.md @@ -1,9 +1,9 @@ --- title: Budgeting description: This article helps you understand the budgeting capability within the FinOps Framework and how to implement that in the Microsoft Cloud. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -75,7 +75,7 @@ You can also find related videos on the FinOps Foundation YouTube channel: Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Quantify.Budgeting) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Quantify.Budgeting) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/quantify/forecasting.md b/docs-mslearn/framework/quantify/forecasting.md index cd866c023..fa7f3ce73 100644 --- a/docs-mslearn/framework/quantify/forecasting.md +++ b/docs-mslearn/framework/quantify/forecasting.md @@ -1,9 +1,9 @@ --- title: Forecasting description: This article helps you understand the forecasting capability within the FinOps Framework and how to implement that in the Microsoft Cloud. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -124,7 +124,7 @@ You can also find related videos on the FinOps Foundation YouTube channel: Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Quantify.Forecasting) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Quantify.Forecasting) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/quantify/planning.md b/docs-mslearn/framework/quantify/planning.md index 96ae7da4b..54464ea12 100644 --- a/docs-mslearn/framework/quantify/planning.md +++ b/docs-mslearn/framework/quantify/planning.md @@ -1,9 +1,9 @@ --- title: Planning and estimating description: This article helps you understand the planning and estimating capability within the FinOps Framework and how to implement that in the Microsoft Cloud. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -88,7 +88,7 @@ This capability is a part of the FinOps Framework by the FinOps Foundation, a no Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Quantify.Planning) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Quantify.Planning) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/quantify/quantify-business-value.md b/docs-mslearn/framework/quantify/quantify-business-value.md index b158f9b48..5e933dac6 100644 --- a/docs-mslearn/framework/quantify/quantify-business-value.md +++ b/docs-mslearn/framework/quantify/quantify-business-value.md @@ -1,9 +1,9 @@ --- title: Quantify business value description: Learn about the FinOps capabilities that help you measure product and cloud performance and map to organizational KPIs so you can make data-driven decisions with increased accuracy and velocity. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: conceptual ms.service: finops ms.subservice: finops-learning-resources @@ -64,7 +64,7 @@ To learn more, see [Unit economics](./unit-economics.md). Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Quantify) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Quantify) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/quantify/unit-economics.md b/docs-mslearn/framework/quantify/unit-economics.md index 8e736bd04..757b14453 100644 --- a/docs-mslearn/framework/quantify/unit-economics.md +++ b/docs-mslearn/framework/quantify/unit-economics.md @@ -1,9 +1,9 @@ --- title: Unit economics description: This article helps you understand the unit economics capability within the FinOps Framework and how to implement that in the Microsoft Cloud. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -78,7 +78,7 @@ You can also find related videos on the FinOps Foundation YouTube channel: Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Quantify.UnitEconomics) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Quantify.UnitEconomics) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/understand/allocation.md b/docs-mslearn/framework/understand/allocation.md index 15f1d7602..b3fedf3dd 100644 --- a/docs-mslearn/framework/understand/allocation.md +++ b/docs-mslearn/framework/understand/allocation.md @@ -1,9 +1,9 @@ --- title: Allocation description: This article helps you understand the Allocation capability within the FinOps Framework and how to implement that in the Microsoft Cloud. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -141,7 +141,7 @@ You can also find related videos on the FinOps Foundation YouTube channel: Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Understand.Allocation) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Understand.Allocation) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/understand/anomalies.md b/docs-mslearn/framework/understand/anomalies.md index 9ba116778..9ce5cd0f7 100644 --- a/docs-mslearn/framework/understand/anomalies.md +++ b/docs-mslearn/framework/understand/anomalies.md @@ -1,9 +1,9 @@ --- title: Anomaly management description: This article helps you understand the anomaly management capability within the FinOps Framework and how to implement that in the Microsoft Cloud. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -83,7 +83,7 @@ You can also find related videos on the FinOps Foundation YouTube channel: Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Understand.Anomalies) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Understand.Anomalies) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/understand/ingestion.md b/docs-mslearn/framework/understand/ingestion.md index bf7ed43f4..12724e8e8 100644 --- a/docs-mslearn/framework/understand/ingestion.md +++ b/docs-mslearn/framework/understand/ingestion.md @@ -1,9 +1,9 @@ --- title: Data ingestion and normalization description: This article helps you understand the data ingestion capability within the FinOps Framework and how to implement that in the Microsoft Cloud. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -124,7 +124,7 @@ You can also find related videos on the FinOps Foundation YouTube channel: Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Understand.Ingestion) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Understand.Ingestion) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/understand/reporting.md b/docs-mslearn/framework/understand/reporting.md index 481653434..16cd10c4d 100644 --- a/docs-mslearn/framework/understand/reporting.md +++ b/docs-mslearn/framework/understand/reporting.md @@ -1,9 +1,9 @@ --- title: Reporting and analytics description: This article helps you understand the reporting and analytics capability within the FinOps Framework and how to implement that in the Microsoft Cloud. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -145,7 +145,7 @@ You can also find related videos on the FinOps Foundation YouTube channel: Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Understand.Reporting) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Understand.Reporting) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/framework/understand/understand-cloud-usage-cost.md b/docs-mslearn/framework/understand/understand-cloud-usage-cost.md index 3e7dc4c8c..7c3e65964 100644 --- a/docs-mslearn/framework/understand/understand-cloud-usage-cost.md +++ b/docs-mslearn/framework/understand/understand-cloud-usage-cost.md @@ -1,9 +1,9 @@ --- title: Understand cloud usage and cost description: Learn about the FinOps capabilities that help you collect, normalize, analyze, and monitor cost, usage, and carbon across the organization. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: conceptual ms.service: finops ms.subservice: finops-learning-resources @@ -56,7 +56,7 @@ To learn more, see [Anomaly management](./anomalies.md). Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.Framework/featureName/Capabilities.Understand) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.Framework/featureName/Capabilities.Understand) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/implementing-finops-guide.md b/docs-mslearn/implementing-finops-guide.md index a3596a453..04c082a3a 100644 --- a/docs-mslearn/implementing-finops-guide.md +++ b/docs-mslearn/implementing-finops-guide.md @@ -1,9 +1,9 @@ --- title: Implementing FinOps guide description: Learn how FinOps can help you maintain business efficiency, empower new endeavors, and accelerate business growth through the cloud. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -64,7 +64,7 @@ Learn more with these videos and training resources: Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.General/featureName/Overview) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.General/featureName/Overview) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/overview.md b/docs-mslearn/overview.md index 8d6d4f419..d7faef94e 100644 --- a/docs-mslearn/overview.md +++ b/docs-mslearn/overview.md @@ -1,9 +1,9 @@ --- title: What is FinOps? description: FinOps combines financial management principles with engineering and operations to provide organizations with a better understanding of their cloud spending. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: overview ms.service: finops ms.subservice: finops-learning-resources @@ -55,7 +55,7 @@ The FinOps Foundation, a non-profit organization focused on FinOps, offers a gre Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Guide.General/featureName/Overview) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Guide.General/featureName/Overview) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/alerts/configure-finops-alerts.md b/docs-mslearn/toolkit/alerts/configure-finops-alerts.md new file mode 100644 index 000000000..fc4beecb6 --- /dev/null +++ b/docs-mslearn/toolkit/alerts/configure-finops-alerts.md @@ -0,0 +1,96 @@ +--- +title: Configure FinOps alerts +description: Learn how to configure and customize FinOps alerts to perform notifications and actions based on your organizational needs. +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 +ms.topic: concept-article +ms.service: finops +ms.subservice: finops-toolkit +ms.reviewer: robelmamecha +#customer intent: As a FinOps practitioner, I want to deploy FinOps alerts to detect idle resources. +--- + + +# Configure FinOps alerts + +FinOps alerts is an automated and proactive cost optimization tool built on Azure Logic Apps. It continuously scans your Azure environment for idle resources and sends notifications to help you take timely action. This solution empowers FinOps practitioners to better manage cloud spending while minimizing waste in the environment. + +
+ +## Overview + +To configure FinOps alerts, follow these steps: + +1. **Deploy FinOps alerts** + + > [!div class="nextstepaction"] + > [Deploy to Azure](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fmicrosoft.github.io%2Ffinops-toolkit%2Fdeploy%2Ffinops-alerts-latest.json/createUIDefinitionUri/https%3A%2F%2Fmicrosoft.github.io%2Ffinops-toolkit%2Fdeploy%2Ffinops-alerts-latest.ui.json) + > + > [!div class="nextstepaction"] + > [Deploy to Azure Gov](https://portal.azure.us/#create/Microsoft.Template/uri/https%3A%2F%2Fmicrosoft.github.io%2Ffinops-toolkit%2Fdeploy%2Ffinops-alerts-latest.json/createUIDefinitionUri/https%3A%2F%2Fmicrosoft.github.io%2Ffinops-toolkit%2Fdeploy%2Ffinops-alerts-latest.ui.json) + > + > [!div class="nextstepaction"] + > [Deploy to Azure China](https://portal.azure.cn/#create/Microsoft.Template/uri/https%3A%2F%2Fmicrosoft.github.io%2Ffinops-toolkit%2Fdeploy%2Ffinops-alerts-latest.json/createUIDefinitionUri/https%3A%2F%2Fmicrosoft.github.io%2Ffinops-toolkit%2Fdeploy%2Ffinops-alerts-latest.ui.json) + +2. **Authorize API connection** + + > [!NOTE] + > After deployment, the Logic app will show a failed run this is due to the API connection, this is a temporary state until authorization is complete. + + 1. Select the **API connection** resource, then select **Edit API Connection** in the General tab to authorize the connection. Once you enable connection select **Save**. + + :::image type="content" source="./media/configure-finops-alerts/authorize-api-connection.png" alt-text="Screenshot of the edit form for API connections." lightbox="./media/configure-finops-alerts/authorize-api-connection.png" ::: + +3. **Assigning reader permission** + + 1. The Logic App’s system-assigned identity must have the **Reader** role on the targeted subscriptions. This role enables it to query resource utilization data. Follow [these steps](/azure/role-based-access-control/role-assignments-portal-managed-identity#system-assigned-managed-identity) to assign the reader role. + + 1. For environments that span multiple subscriptions, consider assigning the Reader role at the management group level to streamline permissions management and ensure comprehensive monitoring. + +4. **Configuring the Logic App** + + 1. Within the Logic App designer adjust the recurrence setting (defaulting to 1 week) based on your monitoring needs. + + 2. Configure details such as the email subject, alert recipients, and filter which subscription IDs should be included or excluded. This level of customization allows you to tailor the monitoring to your specific cloud environment and cost optimization strategy. + + 3. If needed, further modify the Logic App’s workflow such as conditions, thresholds, and notification channels to align with your organization’s requirements. + +5. **Testing and validation** + + 1. After completing the setup, run the Logic App to ensure it correctly identifies idle resources and triggers the appropriate notifications. + + 2. Analyze test results to adjust thresholds or alert parameters as necessary. + +
+ +## Give feedback + +Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. + +> [!div class="nextstepaction"] +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20alerts%3F/cvaQuestion/How%20valuable%20are%20FinOps%20alerts%3F/surveyId/FTK0.9/bladeName/Alerts/featureName/Overview) + +If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. + +> [!div class="nextstepaction"] +> [Vote on or suggest ideas](https://github.com/microsoft/finops-toolkit/issues?q=is%3Aissue%20is%3Aopen%20label%3A%22Tool%3A%20FinOps%20alerts%22%20sort%3Areactions-%2B1-desc) + +
+ +## Related content + +Related FinOps capabilities: + +- [Reporting and analytics](../../framework/understand/reporting.md) +- [Workload optimization](../../framework/optimize/workloads.md) + +Related products: + +- [Azure Logic Apps](/azure/logic-apps/) + +Related solutions: + +- [FinOps workbooks](../workbooks/finops-workbooks-overview.md) + +
diff --git a/docs-mslearn/toolkit/alerts/finops-alerts-overview.md b/docs-mslearn/toolkit/alerts/finops-alerts-overview.md new file mode 100644 index 000000000..830e07f32 --- /dev/null +++ b/docs-mslearn/toolkit/alerts/finops-alerts-overview.md @@ -0,0 +1,70 @@ +--- +title: FinOps alerts overview +description: FinOps alerts accelerate cost optimization efforts with scheduled notifications that continuously monitor your cloud environment. +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 +ms.topic: concept-article +ms.service: finops +ms.subservice: finops-toolkit +ms.reviewer: robelmamecha +#customer intent: As a FinOps practitioner, I need to learn about FinOps alerts. +--- + + +# FinOps alerts + +FinOps alerts automate the identification of cost optimization opportunities using Azure Logic Apps for notifications and custom actions. It continuously scans your Azure environment for idle resources and sends notifications to help you take timely action. This solution empowers FinOps practitioners to better manage cloud spending while minimizing waste in the environment. + +## How it works + +FinOps alerts uses Azure Logic Apps to automate detection of waste across selected subscriptions: + +- **Automated resource monitoring**
FinOps alerts run on a configurable schedule to assess resource activity. It inspects various resource properties to identify idle resources that might be leading to unnecessary costs. + +- **Automated notifications**
When idle resources are detected, the Logic App triggers notifications—via email or other integrated channels to designated administrators, ensuring that the right stakeholders are alerted promptly to review and to take action. + +- **Flexibility**
Users can tailor key parameters, including the recurrence interval, alert recipients, and the specific subscriptions to monitor. This makes the tool adaptable to a wide range of cloud environments. + +## Benefits + +FinOps alerts helps you preemptively address inefficient spending by automating the detection of idle resources, ensuring that cloud costs remain under control. FinOps alerts are designed to operate seamlessly across single and multi-subscription environments. + +## Why FinOps alerts? + +If you use [FinOps workbooks](../workbooks/finops-workbooks-overview.md) to identify idle or underutilized resources, engineers must continually review flagged items. FinOps alerts automate this process, ensuring that when resources are identified as potentially inefficient and stakeholders receive timely notifications without having to manually monitor a workbook. FinOps alerts free up valuable time for busy teams and helps catch cost-saving opportunities as they arise. + +## Required permissions + +Deploying FinOps alerts requires access to create logic apps, assign access, and read resource metadata. You can use the [Owner](/azure/role-based-access-control/built-in-roles#owner) role or, for least-privileged access, use [Contributor](/azure/role-based-access-control/built-in-roles#contributor) and [Role Based Access Control Administrator](/azure/role-based-access-control/built-in-roles#role-based-access-control-administrator) roles. + +## Give feedback + +Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. + +> [!div class="nextstepaction"] +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20alerts%3F/cvaQuestion/How%20valuable%20are%20FinOps%20alerts%3F/surveyId/FTK0.9/bladeName/Alerts/featureName/Overview) + +If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. + +> [!div class="nextstepaction"] +> [Vote on or suggest ideas](https://github.com/microsoft/finops-toolkit/issues?q=is%3Aissue%20is%3Aopen%20label%3A%22Tool%3A%20FinOps%20alerts%22%20sort%3Areactions-%2B1-desc) + +
+ +## Related content + +Related FinOps capabilities: + +- [Reporting and analytics](../../framework/understand/reporting.md) +- [Workload optimization](../../framework/optimize/workloads.md) + +Related products: + +- [Azure Logic Apps](/azure/logic-apps/) + +Related solutions: + +- [FinOps workbooks](../workbooks/finops-workbooks-overview.md) + +
diff --git a/docs-mslearn/toolkit/alerts/media/configure-finops-alerts/authorize-api-connection.png b/docs-mslearn/toolkit/alerts/media/configure-finops-alerts/authorize-api-connection.png new file mode 100644 index 000000000..4d13e5459 Binary files /dev/null and b/docs-mslearn/toolkit/alerts/media/configure-finops-alerts/authorize-api-connection.png differ diff --git a/docs-mslearn/toolkit/bicep-registry/modules.md b/docs-mslearn/toolkit/bicep-registry/modules.md index c11cfdef1..7f6f1d76b 100644 --- a/docs-mslearn/toolkit/bicep-registry/modules.md +++ b/docs-mslearn/toolkit/bicep-registry/modules.md @@ -1,9 +1,9 @@ --- title: Bicep Registry modules for FinOps description: This article summarizes the Bicep modules available from the FinOps toolkit and provides guidance on how to reference them in your templates. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-toolkit @@ -52,7 +52,7 @@ The FinOps toolkit maintains the following Bicep Registry modules: Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20deploy%20Cost%20Management%20scheduled%20actions%20with%20the%20FinOps%20toolkit%20bicep%20modules%3F/cvaQuestion/How%20valuable%20are%20the%20Cost%20Management%20scheduled%20actions%20bicep%20modules%3F/surveyId/FTK0.8/bladeName/BicepRegistry/featureName/Overview) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20deploy%20Cost%20Management%20scheduled%20actions%20with%20the%20FinOps%20toolkit%20bicep%20modules%3F/cvaQuestion/How%20valuable%20are%20the%20Cost%20Management%20scheduled%20actions%20bicep%20modules%3F/surveyId/FTK0.9/bladeName/BicepRegistry/featureName/Overview) If you're looking for a specific module or template, vote for an existing or create a new idea. Share your ideas with others. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/bicep-registry/scheduled-actions.md b/docs-mslearn/toolkit/bicep-registry/scheduled-actions.md index f710b83b2..305b7f6e2 100644 --- a/docs-mslearn/toolkit/bicep-registry/scheduled-actions.md +++ b/docs-mslearn/toolkit/bicep-registry/scheduled-actions.md @@ -1,9 +1,9 @@ --- title: Cost Management scheduled action bicep modules description: This article describes the Cost Management scheduled actions Bicep Registry modules that help you send an email on a schedule or when an anomaly is detected. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-toolkit @@ -160,7 +160,7 @@ module anomalyAlert 'br/public:cost/subscription-scheduled-action:1.0.2' = { Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20deploy%20Cost%20Management%20scheduled%20actions%20with%20the%20FinOps%20toolkit%20bicep%20modules%3F/cvaQuestion/How%20valuable%20are%20the%20Cost%20Management%20scheduled%20actions%20bicep%20modules%3F/surveyId/FTK0.8/bladeName/BicepRegistry/featureName/CostManagement.ScheduledActions) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20deploy%20Cost%20Management%20scheduled%20actions%20with%20the%20FinOps%20toolkit%20bicep%20modules%3F/cvaQuestion/How%20valuable%20are%20the%20Cost%20Management%20scheduled%20actions%20bicep%20modules%3F/surveyId/FTK0.9/bladeName/BicepRegistry/featureName/CostManagement.ScheduledActions) If you're looking for a specific module or template, vote for an existing or create a new idea. Share your ideas with others. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/changelog.md b/docs-mslearn/toolkit/changelog.md index 04b3a21a9..d1c5c6923 100644 --- a/docs-mslearn/toolkit/changelog.md +++ b/docs-mslearn/toolkit/changelog.md @@ -1,9 +1,9 @@ --- title: FinOps toolkit changelog description: Review the latest features and enhancements in the FinOps toolkit, including updates to FinOps hubs, Power BI reports, and more. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit @@ -30,11 +30,176 @@ The following section lists features and enhancements that are currently in deve
-
+## v0.9 + +_Released April 2, 2025_ + +### [FinOps hubs](hubs/finops-hubs-overview.md) v0.9 + +- **Added** + - Added support for MCA reservation recommendation exports. + - Added support for multiple reservation recommendation exports to support shared and single recommendations for all services and lookback periods. + - Managed exports now create price, reservation detail, reservation transaction, and VM reservation recommendation exports. + - Address new data quality issues with ingested data: + - Change `BillingAccountId` to be lowercase in both the cost and price datasets. + - Change `CommitmentDiscountId` to be lowercase in the cost dataset. + - Handle `x_BillingProfileId` case-sensitivity for the cost/price join (without changing data). + - Set `ContractedCost` to `EffectiveCost` when `ContractedCost` is 0 or empty and both unit prices match to avoid rounding errors when calculating cost. + - Set `ContractedCost` to `EffectiveCost` when `ContractedCost` and `ContractedUnitPrice` are both 0 or empty. + - Set `ListCost` to `ContractedCost` when `ListCost` is 0 or empty and both unit prices match to avoid rounding errors when calculating cost. + - Set `ListCost` to `ContractedCost` when `ListCost` and `ListUnitPrice` are both 0 or empty. + - Documented the roles that will be assigned as part of the deployment in the [template details](./hubs/template.md). +- **Changed** + - Changed the deployment template to only deploy Key Vault when configured as a remote hub. + - This will not remove existing Key Vault instances. Please delete them manually if not using this instance as a remote (secondary) hub. + - Added a new Data ingestion > Data quality section into the Data Explorer dashboard with a summary of missing and incorrect costs. +- **Fixed** + - Added resource-specific tags to the stop all triggers deployment script ([#1330](https://github.com/microsoft/finops-toolkit/issues/1330)). + - Updated the deployment script to set the settings.json scopes property to an array ([#1237](https://github.com/microsoft/finops-toolkit/issues/1237)). + - Fixed an issue where the Data Explorer cluster could not update when re-deployed ([#1350](https://github.com/microsoft/finops-toolkit/issues/1350)). + - Removed spaces from the MCA reservation recommendations export column names ([#1317](https://github.com/microsoft/finops-toolkit/issues/1317)). + - Changed how reservations are summarized to ensure the latest version of each recommendation is displayed. ([#1408](https://github.com/microsoft/finops-toolkit/issues/1408)). + - Improved how recommendation dates are calculated ([#1388](https://github.com/microsoft/finops-toolkit/issues/1388)). + - Fixed an issue where reservation recommendations were being duplicated for the Canada Central region. + - Fixed an issue where Recommendations.x_IngestionTime is not being populated in Data Explorer. +- **Removed** + - Removed the Managed Identity Contributor permission assigned to managed identities used during the deployment ([#1248](https://github.com/microsoft/finops-toolkit/issues/1248)). + - The deployment cannot remove role assignments. You can safely remove role assignments from the managed identities to limit access. + - Please do not delete the managed identities. Deleting managed identities can result in errors during upgrades. + - Removed the trusted external tenants setting due to an error causing redeployments to fail. Please enable this after deploying FinOps hubs the first time. + +### [Power BI reports](power-bi/reports.md) v0.9 + +**General** + +- **Added** + - Added support for promoted tags with spaces in the tag key. +- **Changed** + - Updated the savings columns to exclude rows where costs are missing or incorrect. + - Disabled the **Deprecated: Perform Extra Query Optimizations** parameter by default ([#1380](https://github.com/microsoft/finops-toolkit/issues/1380)). + - This parameter will be removed on or after July 1, 2025. + - If you rely on this setting, please [create an issue in GitHub](https://aka.ms/ftk/ideas) and let us know what you need. + - Improved readability and performance of the Disks query. +- **Fixed** + - Fixed the "The import Storage URL matches no exports" error ([#1344](https://github.com/microsoft/finops-toolkit/issues/1344)). + - Updated all Resource Graph queries to address the 'properties...' column not found error ([#1357](https://github.com/microsoft/finops-toolkit/issues/1357)). + +**[Rate optimization](power-bi/rate-optimization.md)** + +- **Added** + - Added support for MCA reservation recommendation exports. + - Show break-even point calculation for reservation recommendations. ([#406](https://github.com/microsoft/finops-toolkit/issues/406)). +- **Fixed** + - Fixed core count double-counting on the Hybrid Benefit page. + - Fixed savings to include negotiated discounts on the Total savings page. + +### [FinOps alerts](alerts/finops-alerts-overview.md) v0.9 + +- **Added** + - Overview documentation on how the FinOps alert tool works in the [FinOps alerts overview](./alerts/finops-alerts-overview.md). + - Configuration steps in the [Configure FinOps alerts](./alerts/configure-finops-alerts.md). + - FinOps alerts deployment template. + +### [Optimization engine](optimization-engine/overview.md) v0.9 + +- **Fixed** + - Fixed issue with breaking storage account recommendations when resource tags are duplicated after tag inheritance ([#1430](https://github.com/microsoft/finops-toolkit/issues/1430)). + +### [Open data](open-data.md) v0.9 + +**[Pricing units](open-data.md#pricing-units)** + +- **Added** + - Added the "1K/Day" unit of measure. + +**[Regions](open-data.md#regions)** + +- **Added** + - Added the "southcentralus2" region. +- **Fixed** + - Changed a **Central Canada** reference to **Canada Central**. + - This may have caused issues or duplication when joined with other datasets. + - Please check your data for duplicate references to **Central Canada** and **Canada Central**. + +**[Resource types](open-data.md#resource-types)** + +- **Added** + - Added 11 Microsoft.IoTOperationsMQ resource types. + - Added 3 Microsoft.AzureStackHCI resource types. + - Added 3 microsoft.CleanRoom resource types. + - Added 3 microsoft.DataReplication resource types. + - Added 6 Microsoft.DeviceRegistry resource types. + - Added 14 Microsoft.Media resource types. + - Added 4 Microsoft.Workloads resource types. + - Added the following resource types: + - microsoft.advisor/assessments + - microsoft.advisor/resiliencyreviews + - microsoft.appcomplianceautomation/reports/snapshots/controls + - microsoft.appsecurity/appprotectmanagedrulesetmanifests + - microsoft.azurearcdata/mysqlserver + - microsoft.azurearcdata/postgressqlserver + - microsoft.azurecis/sharedconfigvalues + - microsoft.billing/billingaccounts/migrations + - microsoft.dashboard/dashboards + - microsoft.devhub/templates + - microsoft.devhub/templates/versions + - microsoft.documentdb/fleets + - microsoft.edge/disconnectedoperations + - microsoft.graph/azureadapplicationprototype + - microsoft.hdinsight/clusterpools/clusters/instanceviews + - microsoft.healthplatform/accounts + - microsoft.logic/integrationserviceenvironments/health + - microsoft.maintenance/maintenanceconfigurationsbladeresource + - microsoft.networkcloud/kubernetesclusters/features + - microsoft.onlineexperimentation/workspaces + - microsoft.saashub/cloudservices + - microsoft.secretmanagementsampleprovider/forecasts + - microsoft.storagediscovery/storagediscoveryworkspaces + - microsoft.toolchainorchestrator/diagnostics +- **Changed** + - Updated the following resource types: + - microsoft.aad/domainservices + - microsoft.agricultureplatform/agriservices + - microsoft.compute/virtualmachines/providers/guestconfigurationassignments + - microsoft.computeschedule/autoactions + - microsoft.connectedcache/cachenodes + - microsoft.connectedcache/enterprisecustomers + - microsoft.edgeorder/bootstrapconfigurations + - microsoft.edgeorder/virtual_orderitems + - microsoft.iotfirmwaredefense/workspaces + - microsoft.manufacturingplatform/manufacturingdataservices + - microsoft.network/networksecurityperimeters/profiles + - microsoft.network/p2svpngateways + - microsoft.network/trafficmanagerprofiles + - microsoft.network/vpngateways + - microsoft.operationalinsights/clusters + - microsoft.sustainabilityservices/calculations + - microsoft.zerotrustsegmentation/segmentationmanagers + - mongodb.atlas/organizations + - oracle.database/exadbvmclusters + - oracle.database/exascaledbstoragevaults + +**[Services](open-data.md#services)** + +- **Added** + - Mapped the "microsoft.cognitiveservices/commitmentplans" resource type to Azure AI Services service. + - Mapped the "microsoft.deviceregistry/billingcontainers" resource type to Azure IoT Hub service. + +**[Dataset examples](open-data.md#dataset-examples)** + +- **Added** + - Added sample data for MCA reservation exports. + +> [!div class="nextstepaction"] +> [Download](https://github.com/microsoft/finops-toolkit/releases/tag/v0.9) +> [!div class="nextstepaction"] +> [Full changelog](https://github.com/microsoft/finops-toolkit/compare/v0.8...v0.9) + +
## v0.8 Update 1 -_Released February 16, 2024_ +_Released February 16, 2025_ This release is a minor patch to fix Power BI reports. These files were updated in the existing 0.8 release. We are documenting this as a new patch release for transparency. If you downloaded **PowerBI-KQL.zip** or **PowerBI-storage.zip** between February 12-15, 2025, please update to the latest version. @@ -74,7 +239,7 @@ _Released February 12, 2025_ - Updated storage reports to match the updated visuals from the KQL reports. - Expanded the columns in the commitment discount purchases page and updated to show recurring purchases separately. - **Fixed** - - Fixed date handling bug that resulted in a "We cannot apply operator >= to types List and Number" error ([#1180](https://github.com/microsoft/finops-toolkit/issues/1180)) + - Fixed date handling bug that resulted in a "We cannot apply operator >= to types List and Number" error ([#1180](https://github.com/microsoft/finops-toolkit/issues/1180)). - Date parsing now uses the report locale. If you run into issues, set the report locale explicitly to the desired format. - **Deprecated** - Cosmetic and informational transforms will be disabled by default in 0.9 and removed on or after July 1, 2025 to improve Power BI performance. If you rely on any of these changes, please let us know by [creating an issue in GitHub](https://aka.ms/ftk/ideas) to request an exemption. This includes: @@ -113,7 +278,7 @@ _Released February 12, 2025_ - Fixed an issue where `x_ResourceType` is using the wrong value. - This fix resolves the issue for all newly ingested data. - To fix historical data, reingest data using the `ingestion_ExecuteETL` Data Factory pipeline. - - 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)) + - 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)). ### [FinOps workbooks](workbooks/finops-workbooks-overview.md) v0.8 @@ -128,7 +293,7 @@ _Released February 12, 2025_ ### [Optimization engine](optimization-engine/overview.md) v0.8 - **Added** - - Improved multi-tenancy support with Azure Lighthouse guidance ([#1036](https://github.com/microsoft/finops-toolkit/issues/1036)) + - Improved multi-tenancy support with Azure Lighthouse guidance ([#1036](https://github.com/microsoft/finops-toolkit/issues/1036)). ### [PowerShell module](powershell/powershell-commands.md) v0.8 @@ -345,8 +510,8 @@ _**Breaking change**_ ### [Optimization engine](optimization-engine/overview.md) v0.7 - **Fixed** - - Exports ingestion issues in cases where exports come with empty lines ([#998](https://github.com/microsoft/finops-toolkit/issues/998)) - - Missing columns in EA savings plans exports ([#1026](https://github.com/microsoft/finops-toolkit/issues/1026)) + - Exports ingestion issues in cases where exports come with empty lines ([#998](https://github.com/microsoft/finops-toolkit/issues/998)). + - Missing columns in EA savings plans exports ([#1026](https://github.com/microsoft/finops-toolkit/issues/1026)). ### [Open data](open-data.md) v0.7 @@ -651,7 +816,7 @@ _Released September 1, 2024_ - Improved SQL Database security, replacing SQL authentication by Microsoft Entra ID authentication-only. - **Fixed** - `Premium SSD disk has been underutilized` recommendation wasn't showing results due to a meter name change in Cost Management ([#831](https://github.com/microsoft/finops-toolkit/issues/831)). - - Consumption exports for pay-as-you-go MCA subscriptions were missing cost data ([#828](https://github.com/microsoft/finops-toolkit/issues/828)) + - Consumption exports for pay-as-you-go MCA subscriptions were missing cost data ([#828](https://github.com/microsoft/finops-toolkit/issues/828)). ### [PowerShell module](powershell/powershell-commands.md) v0.5 @@ -1259,7 +1424,7 @@ _Released May 27, 2023_ Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Toolkit/featureName/Changelog) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Toolkit/featureName/Changelog) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/finops-toolkit-overview.md b/docs-mslearn/toolkit/finops-toolkit-overview.md index 275e5a935..8bd5aaf3a 100644 --- a/docs-mslearn/toolkit/finops-toolkit-overview.md +++ b/docs-mslearn/toolkit/finops-toolkit-overview.md @@ -1,9 +1,9 @@ --- title: FinOps toolkit overview description: Learn how the FinOps toolkit helps you automate and extend the Microsoft Cloud with starter kits, scripts, and advanced solutions to improve FinOps practices. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-toolkit @@ -80,7 +80,7 @@ All the main changes are tracked in the changelog. For more information, see the Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Toolkit/featureName/Overview) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Toolkit/featureName/Overview) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/help/contributors.md b/docs-mslearn/toolkit/help/contributors.md index be4d3e060..6bab7c87b 100644 --- a/docs-mslearn/toolkit/help/contributors.md +++ b/docs-mslearn/toolkit/help/contributors.md @@ -1,9 +1,9 @@ --- title: Contribute to the FinOps toolkit description: Learn how to contribute to the FinOps toolkit, like fixing bugs, suggest new features, review pull requests, and update documentation. -author: bandersmsft -ms.author: banders -ms.date: 12/02/2024 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: how-to ms.service: finops ms.subservice: finops-toolkit diff --git a/docs-mslearn/toolkit/help/data-dictionary.md b/docs-mslearn/toolkit/help/data-dictionary.md index ca4df9fd2..2f587689f 100644 --- a/docs-mslearn/toolkit/help/data-dictionary.md +++ b/docs-mslearn/toolkit/help/data-dictionary.md @@ -1,9 +1,9 @@ --- title: FinOps toolkit data dictionary description: This article describes the column names found in FinOps toolkit solutions, including columns from Cost Management and FOCUS. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-toolkit @@ -244,7 +244,7 @@ If you have feedback about FOCUS, [create an issue in the FOCUS repository](http Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Toolkit/featureName/Help.DataDictionary) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Toolkit/featureName/Help.DataDictionary) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/help/deploy.md b/docs-mslearn/toolkit/help/deploy.md index 04ec30d0c..389cd2629 100644 --- a/docs-mslearn/toolkit/help/deploy.md +++ b/docs-mslearn/toolkit/help/deploy.md @@ -1,9 +1,9 @@ --- title: Deployment options description: Learn how to use various options to deploy FinOps toolkit solutions, including ARM templates, Bicep modules, and quickstart templates. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: how-to ms.service: finops ms.subservice: finops-toolkit @@ -83,7 +83,7 @@ If you received any validation errors, fix them and attempt to create the resour Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Toolkit/featureName/Help.Deploy) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Toolkit/featureName/Help.Deploy) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/help/errors.md b/docs-mslearn/toolkit/help/errors.md index c0d0b33a6..6870bf1a6 100644 --- a/docs-mslearn/toolkit/help/errors.md +++ b/docs-mslearn/toolkit/help/errors.md @@ -1,9 +1,9 @@ --- title: Troubleshoot common FinOps toolkit errors description: This article describes common FinOps toolkit errors and provides solutions to help you resolve issues you might encounter. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: troubleshooting ms.service: finops ms.subservice: finops-toolkit @@ -26,6 +26,16 @@ If the information provided doesn't help you, [Create a support request](/azure/
+## Access to the resource is forbidden + +Severity: Critical + +This error generally means the account you are connected with does not have access to the resource you're attempting to use. + +**Mitigation**: Confirm you are using the correct account in the correct Microsoft Entra ID tenant. + +
+ ## AccountPropertyCannotBeUpdated Severity: Critical @@ -50,6 +60,39 @@ FinOps hubs 0.2 isn't operational. Upgrade to version 0.3 or later.
+## ConflictError + +Severity: Critical + +There may be multiple instances of this error. The one known instance is when Key Vault returns the following error: + +> _A vault with the same name already exists in deleted state. You need to either recover or purge existing key vault. Follow this link https://go.microsoft.com/fwlink/?linkid=2149745 for more information on soft delete._ + +This generally means you're deploying on top of an old deployment that was deleted, but Key Vault kept the old vault instance in a recoverable delete state. + +**Mitigation**: To fix this, purge the deleted Key Vault in the Azure portal. + +1. Open the [list of Key Vault instances](https://portal.azure.com/#browse/Microsoft.KeyVault%2Fvaults) in the Azure portal. +2. Select the **Manage deleted vaults** command at the top of the page. +3. Select the subscription in the dropdown. +4. Check the vaults to be removed. +5. Select **Purge** at the bottom of the flyout. +6. Select **Delete** in the confirmation dialog. + +You can now retry the deployment. + +
+ +## ContractedCostLessThanEffectiveCost + +Severity: Warning + +`ContractedCost` (based on negotiated discounts) is less than `EffectiveCost` (after commitment discounts) in the data from Cost Management. This should never happen unless the commitment discount provides less of a discount than your existing negotiated discounts. This will cause your savings calculations to not add up precisely. + +**Mitigation**: Confirm the `ContractedUnitPrice` in the cost data matches what's in the price data. If the contracted price is correct, file a support request with the Cost Management team to confirm the `x_EffectiveUnitPrice` and `EffectiveCost` are correct. If they are correct, consider returning the commitment discount. + +
+ ## DataExplorerIngestionFailed Severity: Critical @@ -100,6 +143,20 @@ Data Explorer pre-ingestion cleanup (drop extents from the raw table) failed. In
+## DeploymentOutputEvaluationFailed + +Severity: Major + +FinOps hubs 0.8 sets the Azure Data Explorer "trustedExternaltenants" security setting to lock the cluster down so it can only be access from specific, trusted tenants. This setting can be set for the first deployment, but cannot be set again in a second deployment. You may see the following error if you try to redeploy FinOps hubs 0.8 on top of an existing 0.8 deployment: + +> _The template output 'clusterUri' is not valid: The language expression property 'uri' doesn't exist, available properties are 'trustedExternalTenants, enableStreamingIngest, publicNetworkAccess, enableAutoStop, provisioningState'._ + +We are following up with the Azure Data Explorer team to identify the correct resolution. + +**Mitigation**: Deploy FinOps hubs 0.9. This setting has been removed from the template. + +
+ ## ExportDataNotFound Severity: Critical @@ -110,6 +167,26 @@ Exports weren't found in the specified storage path.
+## ExportTypeNotDefined + +Severity: Critical + +This billing scope type is not supported by managed exports. + +**Mitigation**: Remove the unsupported billing scope from settings.json, confirm the billing scope is supported by FinOps hubs and manually create new Cost management exports for the billing scope. + +
+ +## ExportTypeUnsupported + +Severity: Critical + +Microsoft Customer Agreements are not supported for managed exports. + +**Mitigation**: Remove the MCA billing scope from settings.json and manually create new Cost Management exports for each MCA billing profile for FOCUS cost, pricesheet, reservation details, reservation transactions and reservation recommendations. + +
+ ## HubDataNotFound Severity: Critical @@ -206,6 +283,16 @@ As of FinOps toolkit 0.7, support for older FOCUS versions has been deprecated t
+## ListCostLessThanContractedCost + +Severity: Warning + +`ListCost` (based on public, retail prices) is less than `ContractedCost` (based on negotiated discounts) in the data from Cost Management. This should never happen. This will cause your savings calculations to not add up precisely. + +**Mitigation**: Confirm the `ListUnitPrice` in the cost data matches what's in the price data. If the list price is correct, file a support request with the Cost Management team to confirm both the `ListUnitPrice` and `ContractedUnitPrice` are correct and explain why the price after negotiated discounts would be higher than public, retail rates. + +
+ ## ManifestReadFailed Severity: Critical @@ -345,10 +432,12 @@ This error code is shown in the `x_SourceChanges` column when `ProviderName` is Severity: Minor -The source of this error is unknown. This error may be surfaced randomly. +The source of this error is unknown. This error may be surfaced randomly when refreshing Power BI data. **Mitigation**: If you receive this error, select **Apply change** again. +This error has only been reported in storage reports. If you have long data refresh times or experience this error often, consider switching to [FinOps hubs](../hubs/finops-hubs-overview.md) with Data Explorer. Data Explorer uses KQL reports which do not require scheduling or incremental refresh. Data is pulled when the report is opened, so reports always show the latest data. +
## ResourceAccessForbiddenException @@ -398,6 +487,16 @@ To add support for another dataset, create a custom mapping file and save it to
+## The import Storage URL matches no exports + +Severity: Major + +If you are experiencing this in FinOps toolkit 0.8 reports, the error is because of a reference to a parameter that does not exist. + +**Mitigation**: This was fixed in FinOps toolkit 0.9. Update to the latest release to apply the fix. If you need to apply the fix directly to the 0.8 reports, edit the **ftk_DemoFilter** function in the advanced editor and change the contents to: `() => ""`. Save, then close and apply all changes. + +
+ ## UnknownExportFile Severity: Informational @@ -547,7 +646,7 @@ If you're facing an error not listed above or need more help, file a [support re Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Toolkit/featureName/Help.DataDictionary) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Toolkit/featureName/Help.DataDictionary) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/help/help-options.md b/docs-mslearn/toolkit/help/help-options.md index 7cf0485d6..43600f893 100644 --- a/docs-mslearn/toolkit/help/help-options.md +++ b/docs-mslearn/toolkit/help/help-options.md @@ -1,9 +1,9 @@ --- title: Help and support options description: This article summarizes the options for getting help and support for common issues you might experience in the FinOps toolkit. -author: bandersmsft -ms.author: banders -ms.date: 12/02/2024 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-toolkit diff --git a/docs-mslearn/toolkit/help/support.md b/docs-mslearn/toolkit/help/support.md index 1cb581dbf..645b77d63 100644 --- a/docs-mslearn/toolkit/help/support.md +++ b/docs-mslearn/toolkit/help/support.md @@ -1,9 +1,9 @@ --- title: Get support description: This article explains how to get support for issues with FinOps toolkit solutions, including reporting security issues and troubleshooting. -author: bandersmsft -ms.author: banders -ms.date: 12/02/2024 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: how-to ms.service: finops ms.subservice: finops-toolkit diff --git a/docs-mslearn/toolkit/help/terms.md b/docs-mslearn/toolkit/help/terms.md index 247b9833b..3c8577732 100644 --- a/docs-mslearn/toolkit/help/terms.md +++ b/docs-mslearn/toolkit/help/terms.md @@ -1,9 +1,9 @@ --- title: Common terms description: This article defines common terms used in the FinOps toolkit to help users understand the data and insights provided. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit @@ -101,7 +101,7 @@ See also: [Microsoft Partner Agreement](#microsoft-partner-agreement-mpa) Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Toolkit/featureName/Help.CommonTerms) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Toolkit/featureName/Help.CommonTerms) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/help/troubleshooting.md b/docs-mslearn/toolkit/help/troubleshooting.md index 7f8bb828e..8323d4e48 100644 --- a/docs-mslearn/toolkit/help/troubleshooting.md +++ b/docs-mslearn/toolkit/help/troubleshooting.md @@ -1,9 +1,9 @@ --- title: Troubleshooting FinOps toolkit issues description: This article describes how to validate that FinOps toolkit solutions are deployed and configured correctly, including troubleshooting common errors. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: troubleshooting ms.service: finops ms.subservice: finops-toolkit @@ -179,7 +179,7 @@ If you're facing an error not listed above or need more help, file a [support re Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Toolkit/featureName/Help.Troubleshooting) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Toolkit/featureName/Help.Troubleshooting) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/hubs/compatibility.md b/docs-mslearn/toolkit/hubs/compatibility.md index 1d03c5a26..2fc7f7f7b 100644 --- a/docs-mslearn/toolkit/hubs/compatibility.md +++ b/docs-mslearn/toolkit/hubs/compatibility.md @@ -1,9 +1,9 @@ --- title: Compatibility guide description: Learn which Power BI report versions are compatible with each FinOps hubs version to ensure seamless upgrades and data integrity. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-toolkit @@ -65,7 +65,7 @@ Did this guide give you the answers you needed? If not, ask a question in the di Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20hubs%3F/cvaQuestion/How%20valuable%20are%20FinOps%20hubs%3F/surveyId/FTK0.8/bladeName/Hubs/featureName/Compatibility) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20hubs%3F/cvaQuestion/How%20valuable%20are%20FinOps%20hubs%3F/surveyId/FTK0.9/bladeName/Hubs/featureName/Compatibility) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/hubs/configure-dashboards.md b/docs-mslearn/toolkit/hubs/configure-dashboards.md index 5be399b41..91421fb23 100644 --- a/docs-mslearn/toolkit/hubs/configure-dashboards.md +++ b/docs-mslearn/toolkit/hubs/configure-dashboards.md @@ -1,9 +1,9 @@ --- title: Configure Data Explorer dashboard for FinOps hubs description: Deploy a pre-built Azure Data Explorer dashboard for FinOps hubs to start analyzing cost and usage for your accounts. -author: bandersmsft -ms.author: banders -ms.date: 02/21/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: how-to ms.service: finops ms.subservice: finops-toolkit @@ -24,7 +24,25 @@ Before you begin, you must have: - [Deployed a FinOps hub instance](finops-hubs-overview.md#create-a-new-hub) with Data Explorer. - [Configured scopes](configure-scopes.md) and ingested data successfully. -- Have database viewer access to the Data Explorer **Hub** and **Ingestion** databases. +- Database viewer or greater access to the Data Explorer **Hub** and **Ingestion** databases. For details, see [Database level security role](/kusto/management/manage-database-security-roles#database-level-security-roles). + - Option 1: + 1. Open the Data Explorer cluster in the Azure portal. + 2. In the menu, select **Data** > **Databases**. + 3. Select the **Hub** database. + 4. In the menu, select **Overview** > **Permissions**. + 5. Select the **Add** command, then the desired security role. Viewer is the least-privileged role. + 6. Select the desired users, groups, and applications, then select the **Select** button. + 7. Repeat steps 3-6 for the **Ingestion** database. + - Option 2: + 1. Open the Data Explorer cluster in the Azure portal. + 2. In the menu, select **Data** > **Query**. + 3. Use the following commands to add users, groups, and applications as needed. For more information, see [Database level security role](/kusto/management/manage-database-security-roles#database-level-security-roles). + + ``` + .add database Hub viewers ('aaduser=', 'aadGroup=', 'aadapp=;') + + .add database Ingestion viewers ('aaduser=', 'aadGroup=', 'aadapp=;') + ``` This walkthrough does not incur any cost; however, maintaining an active Data Explorer cluster does incur cost. @@ -79,7 +97,7 @@ You may also consider using [Azure workbooks](/azure/azure-monitor/visualize/wor Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20hubs%3F/cvaQuestion/How%20valuable%20are%20FinOps%20hubs%3F/surveyId/FTK0.8/bladeName/Hubs/featureName/ConfigureScopes) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20hubs%3F/cvaQuestion/How%20valuable%20are%20FinOps%20hubs%3F/surveyId/FTK0.9/bladeName/Hubs/featureName/ConfigureScopes) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/hubs/configure-scopes.md b/docs-mslearn/toolkit/hubs/configure-scopes.md index d09deb51b..67654ee0b 100644 --- a/docs-mslearn/toolkit/hubs/configure-scopes.md +++ b/docs-mslearn/toolkit/hubs/configure-scopes.md @@ -1,9 +1,9 @@ --- title: Configure scopes for FinOps hubs description: Connect FinOps hubs to billing accounts and subscriptions by configuring Cost Management exports manually or give FinOps hubs access to manage exports for you. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: how-to ms.service: finops ms.subservice: finops-toolkit @@ -75,6 +75,10 @@ If you can't grant permissions for your scope, you can create Cost Management ex - We recommend exporting from either an **EA billing account** or **MCA billing profile** scope to access additional datasets, including price sheets and reservation recommendations. - Price sheet exports are required to populate missing prices and costs. - Reservation recommendation exports are used on the Rate optimization Reservation recommendations page. + - We recommend creating daily exports for each export type supported at your chosen billing scope: + - Enterprise Agreement billing account: FocusCosts, Pricesheet, ReservationTransactions, ReservationDetails, ReservationRecommendations + - Microsoft Customer Agreement billing profile: FocusCosts, Pricesheet, ReservationTransactions, ReservationDetails, ReservationRecommendations + - Subscription: FocusCosts 1. [Create a new FOCUS cost export](/azure/cost-management-billing/costs/tutorial-export-acm-data) using the following settings: @@ -92,8 +96,8 @@ If you can't grant permissions for your scope, you can create Cost Management ex - _**Resource group:** `subscriptions/{subscription-id}/resourceGroups/{rg-name}`_ - **File partitioning** = On - **Overwrite data** = Off⁴ -1. Create another export with the same settings except set **Frequency** to `Monthly export of last month's costs`. -1. Create exports for any other data you would like to include in your reports. +2. Create another export with the same settings except set **Frequency** to `Monthly export of last month's costs`. +3. Create exports for any other data you would like to include in your reports. - Supported datasets and versions: - Price sheet `2023-05-01` - Required to populate missing prices/costs and calculate savings when using Azure Data Explorer. @@ -103,12 +107,12 @@ If you can't grant permissions for your scope, you can create Cost Management ex - Reservation transactions `2023-05-01` - Supported formats: Parquet (preferred) or CSV - Supported compression: Snappy (preferred), GZip, or uncompressed -1. To initialize the dataset, run your exports. +4. To initialize the dataset, run your exports. - Exports can take up to a day to show up after first created. - Use the **Run now** command at the top of the Cost Management Exports page. - Your data should be available within 15 minutes or so, depending on how large your account is. - If you want to backfill data, open the export details and select the **Export selected dates** command to export one month at a time or use the [Start-FinOpsCostExport PowerShell command](../powershell/cost/Start-FinOpsCostExport.md) to export a larger date range. -1. Repeat steps 1-4 for each scope you want to monitor. +5. Repeat steps 1-4 for each scope you want to monitor. _¹ FinOps hubs 0.2 and later requires FOCUS cost data. As of July 2024, the option to export FOCUS cost data is only accessible from the central Cost Management experience in the Azure portal. If you don't see this option, search for or navigate to [Cost Management Exports](https://portal.azure.com/#blade/Microsoft_Azure_CostManagement/Menu/open/exports)._ @@ -144,7 +148,7 @@ Managed exports use a managed identity (MI) to configure the exports automatical
@@ -44,9 +42,7 @@ Private access is a more secure option that places FinOps hubs resources on an i - Azure Data Factory is configured to use the public integration runtime, which helps reduce costs. - A virtual network is deployed to ensure communication between all components during deployment and at runtime remains private. - Note that private networking incurs extra cost for networking resources, connectivity, and dedicated compute in Azure Data Factory. For a detailed cost estimate, please refer to the Azure pricing calculator. @@ -143,9 +139,7 @@ In this example: - DNS entries for storage and Data Explorer are added to Azure DNS Resolver to ensure reliable name resolution. - A route table is attached to the network gateway subnet to ensure traffic from on-premises can route to the peered vNet. - This network topology follows the Hub-Spoke network architecture guidance outlined in the [Cloud Adoption Framework](/azure/cloud-adoption-framework/ready/azure-best-practices/hub-spoke-network-topology) for Azure and the [Azure Architecture Center](/azure/architecture/networking/architecture/hub-spoke). @@ -156,7 +150,7 @@ This network topology follows the Hub-Spoke network architecture guidance outlin Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20hubs%3F/cvaQuestion/How%20valuable%20are%20FinOps%20hubs%3F/surveyId/FTK0.8/bladeName/Hubs/featureName/PrivateNetworking) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20hubs%3F/cvaQuestion/How%20valuable%20are%20FinOps%20hubs%3F/surveyId/FTK0.9/bladeName/Hubs/featureName/PrivateNetworking) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/hubs/template.md b/docs-mslearn/toolkit/hubs/template.md index 41f2e82c7..ddb1bae33 100644 --- a/docs-mslearn/toolkit/hubs/template.md +++ b/docs-mslearn/toolkit/hubs/template.md @@ -1,9 +1,9 @@ --- title: FinOps hub template description: Learn about what's included in the FinOps hub template including parameters, resources, and outputs. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-toolkit @@ -36,8 +36,8 @@ Ensure the following prerequisites are met before you deploy the template: | Resource | Minimum Azure RBAC | | ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Deploy and configure Data Factory¹ | [Data Factory Contributor](/azure/role-based-access-control/built-in-roles#data-factory-contributor) | - | Deploy Key Vault¹ | [Key Vault Contributor](/azure/role-based-access-control/built-in-roles#key-vault-contributor) | - | Configure Key Vault secrets¹ | [Key Vault Administrator](/azure/role-based-access-control/built-in-roles#key-vault-administrator) | + | Deploy Key Vault (remote hub only)¹ | [Key Vault Contributor](/azure/role-based-access-control/built-in-roles#key-vault-contributor) | + | Configure Key Vault secrets (remote hub only)¹ | [Key Vault Administrator](/azure/role-based-access-control/built-in-roles#key-vault-administrator) | | Create managed identity¹ | [Managed Identity Contributor](/azure/role-based-access-control/built-in-roles#managed-identity-contributor) | | Deploy and configure storage¹ | [Storage Account Contributor](/azure/role-based-access-control/built-in-roles#storage-account-contributor) | | Assign managed identity to resources¹ | [Managed Identity Operator](/azure/role-based-access-control/built-in-roles#managed-identity-operator) | @@ -48,14 +48,21 @@ Ensure the following prerequisites are met before you deploy the template: | Create an MCA billing cost export² | [Contributor](/azure/cost-management-billing/manage/understand-mca-roles) | | Read blob data in storage³ | [Storage Blob Data Contributor](/azure/role-based-access-control/built-in-roles#storage-blob-data-contributor) | - - _¹ It's sufficient to assign hubs resources deployment permissions on the resource group scope._
_² Cost Management permissions must be assigned on the scope where you want to export your costs from._
_³ Blob data permissions are required to access exported cost data from Power BI or other client tools._
+- You must have permissions to assign the following roles to managed identities as part of the deployment: + + | Azure RBAC role | Notes | + | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | + | [Data Factory Contributor](/azure/role-based-access-control/built-in-roles#data-factory-contributor) | Assigned to the deployment trigger manager identity to auto-start Data Factory triggers. | + | [Reader](/azure/role-based-access-control/built-in-roles#reader) | Assigned to Data Factory to manage data in storage. | + | [Storage Account Contributor](/azure/role-based-access-control/built-in-roles#storage-account-contributor) | Assigned to Data Factory to manage data in storage. | + | [Storage Blob Data Contributor](/azure/role-based-access-control/built-in-roles#storage-blob-data-contributor) | Assigned to Data Factory and Data Explorer to manage data in storage. | + | [Storage File Data Privileged Contributor](/azure/role-based-access-control/built-in-roles/storage#storage-file-data-privileged-contributor) | Assigned to the deployment file upload identity that uploads files to the config container. | + | [User Access Administrator](/azure/role-based-access-control/built-in-roles#user-access-administrator) | Assigned to Data Factory to manage data in storage. | + - The Microsoft.EventGrid resource provider must be registered in your subscription. For more information, see [Register a resource provider](/azure/azure-resource-manager/management/resource-providers-and-types#register-resource-provider). > [!IMPORTANT] @@ -85,7 +92,7 @@ Here are the parameters you can use to customize the deployment: | **dataExplorerFinalRetentionInMonths** | Int | Optional. Number of months of data to retain in the Data Explorer \*_final_v\* tables. | 13 | | **remoteHubStorageUri** | String | Optional. Storage account to push data to for ingestion into a remote hub. | | | **remoteHubStorageKey** | String | Optional. Storage account key to use when pushing data to a remote hub. | | -| **enablePublicAccess** | string | Optional. Disable public access to the data lake (storage firewall). | False | +| **enablePublicAccess** | string | Optional. Disable public access to the data lake (storage firewall). | True | | **virtualNetworkAddressPrefix** | String | Optional. IP Address range for the private virtual network used by FinOps hubs. `/26` is recommended to avoid wasting IPs. Internally, the following subnets will be created: `/28` for private endpoints, another `/28` subnet for temporary deployment scripts (container instances), and `/27` for Azure Data Explorer, if enabled. | '10.20.30.0/26' |
@@ -100,9 +107,7 @@ Resources use the following naming convention: `-- [!NOTE] - > In the future, we will use this container to stage external data outside of Cost Management. - - `config` – Stores hub metadata and configuration settings. Files: + - `config` – Stores hub metadata and configuration settings. Files: - `settings.json` – Hub settings. - `schemas/focuscost_1.0.json` – FOCUS 1.0 schema definition for parquet conversion. - `schemas/focuscost_1.0-preview(v1).json` – FOCUS 1.0-preview schema definition for parquet conversion. @@ -135,7 +140,7 @@ Resources use the following naming convention: `--store` - Managed private endpoint for storage account. - `-vault-` - Managed private endpoint for Azure Key Vault. -- `-vault-` Key Vault instance +- `-vault-` Key Vault instance (only included when deployed as a remote hub) - Secrets: - Data Factory system managed identity - `` Data Explorer cluster @@ -203,7 +208,7 @@ Here are the outputs generated by the deployment: Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20hubs%3F/cvaQuestion/How%20valuable%20are%20FinOps%20hubs%3F/surveyId/FTK0.8/bladeName/Hubs/featureName/Template) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20hubs%3F/cvaQuestion/How%20valuable%20are%20FinOps%20hubs%3F/surveyId/FTK0.9/bladeName/Hubs/featureName/Template) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/hubs/upgrade.md b/docs-mslearn/toolkit/hubs/upgrade.md index bf121b577..cb6359a83 100644 --- a/docs-mslearn/toolkit/hubs/upgrade.md +++ b/docs-mslearn/toolkit/hubs/upgrade.md @@ -1,9 +1,9 @@ --- title: Upgrade your FinOps hubs description: Learn how to upgrade your existing FinOps hub instance to the latest version, including necessary steps and considerations. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: how-to ms.service: finops ms.subservice: finops-toolkit @@ -177,7 +177,7 @@ If you enable Azure Data Explorer, you need to reingest historical data to add i > [!div class="nextstepaction"] > [Download 0.7](https://github.com/microsoft/finops-toolkit/releases/tag/v0.7) -[View changes](https://learn.microsoft.com/cloud-computing/finops/toolkit/changelog#-v07) +[View changes](../changelog.md#v07)
@@ -185,17 +185,48 @@ If you enable Azure Data Explorer, you need to reingest historical data to add i +FinOps hubs 0.8 introduced architectural changes to how networking resources were deployed. Networking resources must be deleted before upgrading from 0.7 to 0.8 or later. If you are moving from 0.6 or earlier to 0.8 or later, you can skip this step. The instructions assume your FinOps hub instance is the only thing in the resource group and there are no other networking resources. Do not delete resources that are not related to FinOps hubs. + To upgrade FinOps hubs 0.7 to 0.8: -1. Redeploy the template. -2. Update Power BI reports. -3. If using Data Explorer, replace use of `parse_resourceid(ResourceId).ResourceType` with `resource_type(x_ResourceType).SingularDisplayName`. +1. Delete FinOps hubs 0.7 networking resources: + 1. Open the FinOps hub resource group in the Azure portal. + 2. Delete all private endpoints within the resource group. + 3. Delete all private DNS zones within the resource group. + 4. Delete the virtual network. If errors are encountered: + - Confirm no private endpoints or DNS zones remain. + - Check the connected devices tab and remove any lingering resources to ensure the virtual network is not in use. +2. Redeploy the template by using the **same inputs** from the previous deployment: + - Subscription + - Resource group + - Location + - Hub name + - Data Explorer cluster name (recommended when monitoring over $100K in total spend) + - Data Explorer SKU (if a cluster name is specified) +3. Verify that the Data Factory triggers are all started. +4. Update Power BI reports. +5. If using Data Explorer, replace use of `parse_resourceid(ResourceId).ResourceType` with `resource_type(x_ResourceType).SingularDisplayName`. - The `ResourceType` property in `parse_resourceid(ResourceId)` is deprecated in 0.8 and will be removed in 0.9 or later. > [!div class="nextstepaction"] > [Download 0.8](https://github.com/microsoft/finops-toolkit/releases/tag/v0.8) -[View changes](https://learn.microsoft.com/cloud-computing/finops/toolkit/changelog#-v08) +[View changes](../changelog.md#v08) + +
+ +## Upgrading 0.8 + +To upgrade FinOps hubs 0.8 to 0.9: + +1. Redeploy the template. +2. Update [Power BI reports](../power-bi/reports.md). +3. Update the [Data Explorer dashboard](configure-dashboards.md). + +> [!div class="nextstepaction"] +> [Download 0.9](https://github.com/microsoft/finops-toolkit/releases/tag/v0.9) + +[View changes](../changelog.md#v09)
@@ -204,7 +235,7 @@ To upgrade FinOps hubs 0.7 to 0.8: Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20hubs%3F/cvaQuestion/How%20valuable%20are%20FinOps%20hubs%3F/surveyId/FTK0.8/bladeName/Hubs/featureName/Upgrade) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20hubs%3F/cvaQuestion/How%20valuable%20are%20FinOps%20hubs%3F/surveyId/FTK0.9/bladeName/Hubs/featureName/Upgrade) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/open-data.md b/docs-mslearn/toolkit/open-data.md index 2673f04b0..683627a18 100644 --- a/docs-mslearn/toolkit/open-data.md +++ b/docs-mslearn/toolkit/open-data.md @@ -2,9 +2,9 @@ title: Open data for FinOps description: Use open data to normalize and enhance your FinOps reporting, ensuring accurate and consistent data for better insights and decision-making. ms.topic: concept-article -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.service: finops ms.subservice: finops-toolkit ms.reviewer: micflan @@ -105,9 +105,9 @@ Sample data: Convert resource type values to lowercase before mapping. This helps reduce duplication and speed up the mapping process. > [!div class="nextstepaction"] -> [Download](https://github.com/microsoft/finops-toolkit/releases/latest/download/ResourceTypes.csv) +> [Download CSV](https://github.com/microsoft/finops-toolkit/releases/latest/download/ResourceTypes.csv) > [!div class="nextstepaction"] -> [Download](https://github.com/microsoft/finops-toolkit/releases/latest/download/ResourceTypes.json) +> [Download JSON](https://github.com/microsoft/finops-toolkit/releases/latest/download/ResourceTypes.json) > [!div class="nextstepaction"] > [See PowerShell](powershell/data/get-finopsresourcetype.md) @@ -196,7 +196,7 @@ Metadata is available for the following datasets: Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/OpenData/featureName/Overview) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/OpenData/featureName/Overview) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/optimization-engine/configure-workspaces.md b/docs-mslearn/toolkit/optimization-engine/configure-workspaces.md index ed6875771..9ecb76fa2 100644 --- a/docs-mslearn/toolkit/optimization-engine/configure-workspaces.md +++ b/docs-mslearn/toolkit/optimization-engine/configure-workspaces.md @@ -1,9 +1,9 @@ --- title: Configure workspaces description: Include the VM performance logs available in your Log Analytics workspaces to get deeper insights and more accurate results. -author: bandersmsft -ms.author: banders -ms.date: 02/13/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-toolkit diff --git a/docs-mslearn/toolkit/optimization-engine/customize.md b/docs-mslearn/toolkit/optimization-engine/customize.md index 3493aa33a..659e148a1 100644 --- a/docs-mslearn/toolkit/optimization-engine/customize.md +++ b/docs-mslearn/toolkit/optimization-engine/customize.md @@ -1,9 +1,9 @@ --- title: Customize Azure optimization engine description: This article describes how to customize the Azure optimization engine settings according to your organization requirements. -author: bandersmsft -ms.author: banders -ms.date: 02/13/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-toolkit diff --git a/docs-mslearn/toolkit/optimization-engine/faq.md b/docs-mslearn/toolkit/optimization-engine/faq.md index 4f26fe89f..62f20ed9f 100644 --- a/docs-mslearn/toolkit/optimization-engine/faq.md +++ b/docs-mslearn/toolkit/optimization-engine/faq.md @@ -1,9 +1,9 @@ --- title: Azure optimization engine FAQ description: This article covers frequently asked questions about the Azure Optimization Engine (AOE), including support, subscriptions, and currency. -author: bandersmsft -ms.author: banders -ms.date: 10/31/2024 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-toolkit diff --git a/docs-mslearn/toolkit/optimization-engine/overview.md b/docs-mslearn/toolkit/optimization-engine/overview.md index e13668239..9e68ee6c8 100644 --- a/docs-mslearn/toolkit/optimization-engine/overview.md +++ b/docs-mslearn/toolkit/optimization-engine/overview.md @@ -1,9 +1,9 @@ --- title: Get started with the Azure Optimization Engine description: The Azure Optimization Engine (AOE) is an extensible solution designed to generate optimization recommendations for your Azure environment. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: how-to ms.service: finops ms.subservice: finops-toolkit @@ -158,7 +158,7 @@ Every week at the same time, AOE recommendations are updated according to the cu Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20Azure%20Optimization%20Engine%3F/cvaQuestion/How%20valuable%20are%20Azure%20Optimization%20Engine%3F/surveyId/FTK0.8/bladeName/AOE/featureName/Overview) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20Azure%20Optimization%20Engine%3F/cvaQuestion/How%20valuable%20are%20Azure%20Optimization%20Engine%3F/surveyId/FTK0.9/bladeName/AOE/featureName/Overview) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/optimization-engine/reports.md b/docs-mslearn/toolkit/optimization-engine/reports.md index 1ae48ca04..736937d73 100644 --- a/docs-mslearn/toolkit/optimization-engine/reports.md +++ b/docs-mslearn/toolkit/optimization-engine/reports.md @@ -1,9 +1,9 @@ --- title: Azure optimization engine reports description: Visualize the Azure Optimization Engine's rich recommendations and insights through various reporting options, including Power BI reports. -author: bandersmsft -ms.author: banders -ms.date: 12/02/2024 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-toolkit diff --git a/docs-mslearn/toolkit/optimization-engine/setup-options.md b/docs-mslearn/toolkit/optimization-engine/setup-options.md index 6901284d2..4db490e2b 100644 --- a/docs-mslearn/toolkit/optimization-engine/setup-options.md +++ b/docs-mslearn/toolkit/optimization-engine/setup-options.md @@ -1,9 +1,9 @@ --- title: Setup options description: This article describes advance scenarios for setting up or upgrading Azure optimization engine (AOE). -author: bandersmsft -ms.author: banders -ms.date: 10/31/2024 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-toolkit diff --git a/docs-mslearn/toolkit/optimization-engine/suppress-recommendations.md b/docs-mslearn/toolkit/optimization-engine/suppress-recommendations.md index ddaad1b9b..e990ddd85 100644 --- a/docs-mslearn/toolkit/optimization-engine/suppress-recommendations.md +++ b/docs-mslearn/toolkit/optimization-engine/suppress-recommendations.md @@ -1,9 +1,9 @@ --- title: Suppress recommendations description: Learn how to adjust the Azure Optimization Engine recommendation results for your environment characteristics by suppressing irrelevant recommendations. -author: bandersmsft -ms.author: banders -ms.date: 10/31/2024 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-toolkit diff --git a/docs-mslearn/toolkit/optimization-engine/troubleshooting.md b/docs-mslearn/toolkit/optimization-engine/troubleshooting.md index a07ea72db..f6e1ec7aa 100644 --- a/docs-mslearn/toolkit/optimization-engine/troubleshooting.md +++ b/docs-mslearn/toolkit/optimization-engine/troubleshooting.md @@ -1,9 +1,9 @@ --- title: Troubleshoot Azure Optimization Engine issues description: This article helps you troubleshoot common issues with Azure Optimization Engine deployment and runtime. -author: bandersmsft -ms.author: banders -ms.date: 10/31/2024 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: troubleshooting ms.service: finops ms.subservice: finops-toolkit diff --git a/docs-mslearn/toolkit/power-bi/connector.md b/docs-mslearn/toolkit/power-bi/connector.md index 6281003b5..8e4894187 100644 --- a/docs-mslearn/toolkit/power-bi/connector.md +++ b/docs-mslearn/toolkit/power-bi/connector.md @@ -1,9 +1,9 @@ --- title: Cost Management connector report description: Understand the Power BI report for the Cost Management connector, including cost overviews, commitment discounts, and savings insights. -author: bandersmsft -ms.author: banders -ms.date: 02/13/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-toolkit @@ -28,7 +28,7 @@ The **Cost Management connector** report provides a general overview of cost, co > [!div class="nextstepaction"] > [Download](https://github.com/microsoft/finops-toolkit/releases/latest/download/CostManagementConnector.pbix) > [!div class="nextstepaction"] -> [Give feedback](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%20Management%20connector%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Cost%20Management%20connector%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.CMConnector/featureName/Documentation) +> [Give feedback](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%20Management%20connector%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Cost%20Management%20connector%20report%3F/surveyId/FTK0.9/bladeName/PowerBI.CMConnector/featureName/Documentation)
diff --git a/docs-mslearn/toolkit/power-bi/cost-summary.md b/docs-mslearn/toolkit/power-bi/cost-summary.md index 4327edf0a..156a5dd66 100644 --- a/docs-mslearn/toolkit/power-bi/cost-summary.md +++ b/docs-mslearn/toolkit/power-bi/cost-summary.md @@ -1,9 +1,9 @@ --- title: FinOps toolkit Cost summary report description: Learn about the Cost Summary Report in Power BI to identify top cost contributors, review cost changes over time, and summarize savings. -author: bandersmsft -ms.author: banders -ms.date: 02/16/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-toolkit @@ -26,7 +26,7 @@ The **Cost summary report** provides a general overview of cost and savings with > [!div class="nextstepaction"] > [Download for storage](https://github.com/microsoft/finops-toolkit/releases/latest/download/PowerBI-storage.zip) > [!div class="nextstepaction"] -> [Give feedback](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.CostSummary/featureName/Documentation) +> [Give feedback](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.9/bladeName/PowerBI.CostSummary/featureName/Documentation) Power BI reports are provided as template (.PBIT) files. Template files are not preconfigured and do not include sample data. When you first open a Power BI template, you will be prompted to specify report parameters, then authenticate with each data source to view your data. To access visuals and queries without loading data, select Edit in the Load menu button. diff --git a/docs-mslearn/toolkit/power-bi/data-ingestion.md b/docs-mslearn/toolkit/power-bi/data-ingestion.md index 56abd980e..08e6c6937 100644 --- a/docs-mslearn/toolkit/power-bi/data-ingestion.md +++ b/docs-mslearn/toolkit/power-bi/data-ingestion.md @@ -1,9 +1,9 @@ --- title: Data ingestion report description: Learn about the Data Ingestion Report, which provides insights into the data ingested into your FinOps hub storage account. -author: bandersmsft -ms.author: banders -ms.date: 02/13/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-toolkit @@ -22,7 +22,7 @@ The **Data ingestion report** provides details about the data that got ingested > [!div class="nextstepaction"] > [Download for storage](https://github.com/microsoft/finops-toolkit/releases/latest/download/PowerBI-storage.zip) > [!div class="nextstepaction"] -> [Give feedback](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.DataIngestion/featureName/Documentation) +> [Give feedback](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.9/bladeName/PowerBI.DataIngestion/featureName/Documentation) Power BI reports are provided as template (.PBIT) files. Template files are not preconfigured and do not include sample data. When you first open a Power BI template, you will be prompted to specify report parameters, then authenticate with each data source to view your data. To access visuals and queries without loading data, select Edit in the Load menu button. diff --git a/docs-mslearn/toolkit/power-bi/governance.md b/docs-mslearn/toolkit/power-bi/governance.md index 02c7b7028..9e9214f07 100644 --- a/docs-mslearn/toolkit/power-bi/governance.md +++ b/docs-mslearn/toolkit/power-bi/governance.md @@ -1,9 +1,9 @@ --- title: FinOps toolkit Governance report description: Summarize cloud governance posture including areas like compliance, security, operations, and resource management in Power BI. -author: bandersmsft -ms.author: banders -ms.date: 02/13/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-toolkit @@ -35,7 +35,7 @@ The Governance report is new and still being fleshed out. We will continue to ex > [!div class="nextstepaction"] > [Download for storage](https://github.com/microsoft/finops-toolkit/releases/latest/download/PowerBI-storage.zip) > [!div class="nextstepaction"] -> [Give feedback](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.Governance/featureName/Documentation) +> [Give feedback](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.9/bladeName/PowerBI.Governance/featureName/Documentation) Power BI reports are provided as template (.PBIT) files. Template files are not preconfigured and do not include sample data. When you first open a Power BI template, you will be prompted to specify report parameters, then authenticate with each data source to view your data. To access visuals and queries without loading data, select Edit in the Load menu button. diff --git a/docs-mslearn/toolkit/power-bi/help-me-choose.md b/docs-mslearn/toolkit/power-bi/help-me-choose.md index 14276f87b..791f36564 100644 --- a/docs-mslearn/toolkit/power-bi/help-me-choose.md +++ b/docs-mslearn/toolkit/power-bi/help-me-choose.md @@ -1,9 +1,9 @@ --- title: Choose a Power BI data source description: Learn about different ways to connect Power BI to your data to analyze and report on cloud costs, including connectors and exports. -author: bandersmsft -ms.author: banders -ms.date: 12/03/2024 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-toolkit diff --git a/docs-mslearn/toolkit/power-bi/rate-optimization.md b/docs-mslearn/toolkit/power-bi/rate-optimization.md index 92d123c67..376390d56 100644 --- a/docs-mslearn/toolkit/power-bi/rate-optimization.md +++ b/docs-mslearn/toolkit/power-bi/rate-optimization.md @@ -1,9 +1,9 @@ --- title: FinOps toolkit Rate optimization report description: Learn about the Rate Optimization Report in Power BI, which summarizes savings from commitment discounts like reservations and savings plans. -author: bandersmsft -ms.author: banders -ms.date: 02/16/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-toolkit @@ -28,7 +28,7 @@ The **Rate optimization report** summarizes existing and potential savings from > [!div class="nextstepaction"] > [Download for storage](https://github.com/microsoft/finops-toolkit/releases/latest/download/PowerBI-storage.zip) > [!div class="nextstepaction"] -> [Give feedback](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.RateOptimization/featureName/Documentation) +> [Give feedback](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.9/bladeName/PowerBI.RateOptimization/featureName/Documentation) Power BI reports are provided as template (.PBIT) files. Template files are not preconfigured and do not include sample data. When you first open a Power BI template, you will be prompted to specify report parameters, then authenticate with each data source to view your data. To access visuals and queries without loading data, select Edit in the Load menu button. diff --git a/docs-mslearn/toolkit/power-bi/reports.md b/docs-mslearn/toolkit/power-bi/reports.md index 0f18108d6..21ed855f5 100644 --- a/docs-mslearn/toolkit/power-bi/reports.md +++ b/docs-mslearn/toolkit/power-bi/reports.md @@ -1,9 +1,9 @@ --- title: FinOps toolkit Power BI reports description: Learn about the Power BI reports in the FinOps toolkit to customize and enhance your FinOps reporting and connect to Cost Management exports or FinOps hubs. -author: bandersmsft -ms.author: banders -ms.date: 02/13/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: how-to ms.service: finops ms.subservice: finops-toolkit diff --git a/docs-mslearn/toolkit/power-bi/setup.md b/docs-mslearn/toolkit/power-bi/setup.md index c1bfaee85..1993f9ea2 100644 --- a/docs-mslearn/toolkit/power-bi/setup.md +++ b/docs-mslearn/toolkit/power-bi/setup.md @@ -1,9 +1,9 @@ --- title: Set up Power BI reports description: Learn how to set up Power BI FinOps reports using the FinOps toolkit, customize visuals, and connect to your cost data for detailed analysis. -author: bandersmsft -ms.author: banders -ms.date: 02/13/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: how-to ms.service: finops ms.subservice: finops-toolkit @@ -28,19 +28,21 @@ The FinOps toolkit Power BI reports include preconfigured visuals, but aren't co 1. Configure Cost Management exports for any data you would like to include in reports, including: - - Cost and usage (FOCUS) – Required for all reports. - - Price sheet - - Reservation details - - Reservation recommendations – Required to see reservation recommendations in the Rate optimization report. - - Reservation transactions + | Dataset | Version | Notes | + | --------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------- | + | Cost and usage (FOCUS) | `1.0` or `1.0r2` | Required for all reports. If you need FOCUS 1.0-preview, use [FinOps hubs](../hubs/finops-hubs-overview.md) with Data Explorer. | + | Price sheet | `2023-05-01` | Required to populate missing prices for EA and MCA. | + | Reservation details | `2023-03-01` | Optional. | + | Reservation recommendations | `2023-05-01` | Required to see reservation recommendations in the Rate optimization report. | + | Reservation transactions | `2023-05-01` | Optional. | 2. Download and open the desired report in Power BI Desktop. - | Data source | Download | Notes | - | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------- | - | FinOps hubs with Data Explorer | [KQL reports](https://github.com/microsoft/finops-toolkit/releases/latest/download/PowerBI-kql.zip) | Recommended when monitoring more than $2 million per month or more than 13 months of data. | - | Exports in storage (including FinOps hubs) | [Storage reports](https://github.com/microsoft/finops-toolkit/releases/latest/download/PowerBI-storage.zip) | Not recommended when monitoring more than $2 million per month. | - | Cost Management connector | [Cost Management connector report](https://github.com/microsoft/finops-toolkit/releases/latest/download/CostManagementConnector.zip) | Not recommended when monitoring more than $1 million in total cost or accounts that contain savings plan usage. | + | Data source | Download | Notes | + | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------- | + | FinOps hubs with Data Explorer | [KQL reports](https://github.com/microsoft/finops-toolkit/releases/latest/download/PowerBI-kql.zip) | Recommended when monitoring over $100,000 or 13 months of data. | + | Exports in storage (including FinOps hubs) | [Storage reports](https://github.com/microsoft/finops-toolkit/releases/latest/download/PowerBI-storage.zip) | Not recommended when monitoring over $2 million per month. | + | Cost Management connector | [Cost Management connector report](https://github.com/microsoft/finops-toolkit/releases/latest/download/CostManagementConnector.zip) | Not recommended when monitoring over $1 million in total cost or accounts that contain savings plan usage. | 3. Open each report and specify the applicable report parameters: @@ -68,8 +70,10 @@ The FinOps toolkit Power BI reports include preconfigured visuals, but aren't co 4. Append the container and export path, if applicable. - **Number of Months** – Optional number of closed months you would like to report on if you want to always show a specific number of recent months. If not specified, the report will include all data in storage. - **RangeStart** / **RangeEnd** – Optional date range you would like to limit to. If not specified, the report will include all data in storage. - > [!WARNING] - > [Enable incremental refresh](/power-bi/connect-data/incremental-refresh-configure#define-policy) to load more than $2 million of raw cost details. Power BI reports can only support $2 million of data when incremental refresh is not enabled. After incremental refresh is enabled, they can support $2 million per month for a total of ~$26 million in raw cost details. + - We generally recommend leaving these dates empty. They are included to support incremental refresh. + - If you need to configure incremental refresh, consider using [FinOps hubs](../hubs/finops-hubs-overview.md) with Data Explorer instead. + - FinOps hubs with Data Explorer offers improved performance and is recommended for anyone monitoring over $100,000 in total spend. + - Storage reports only support ~$2 million of data without incremental refresh and ~$2 million per month in raw cost details. To learn more, see [Configure incremental refresh](/power-bi/connect-data/incremental-refresh-configure#define-policy). 4. Authorize each data source: diff --git a/docs-mslearn/toolkit/power-bi/template-app.md b/docs-mslearn/toolkit/power-bi/template-app.md index 6f8cc0632..6a505d1c7 100644 --- a/docs-mslearn/toolkit/power-bi/template-app.md +++ b/docs-mslearn/toolkit/power-bi/template-app.md @@ -1,9 +1,9 @@ --- title: Cost Management template app for Enterprise Agreement description: Learn about the Cost Management template app for Enterprise Agreement accounts, including its features, usage insights, and available reports. -author: bandersmsft -ms.author: banders -ms.date: 02/16/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-toolkit @@ -20,7 +20,7 @@ The **EA template app** is the .pbix version of the "Cost Management app" in Mic > [!div class="nextstepaction"] > [Download](https://github.com/microsoft/finops-toolkit/releases/latest/download/CostManagementTemplateApp.pbix) > [!div class="nextstepaction"] -> [Give feedback](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%20Management%20template%20app%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Cost%20Management%20template%20app%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.CMTemplateApp/featureName/Documentation) +> [Give feedback](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%20Management%20template%20app%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Cost%20Management%20template%20app%20report%3F/surveyId/FTK0.9/bladeName/PowerBI.CMTemplateApp/featureName/Documentation)
diff --git a/docs-mslearn/toolkit/power-bi/workload-optimization.md b/docs-mslearn/toolkit/power-bi/workload-optimization.md index 4878f0fea..d32097b6f 100644 --- a/docs-mslearn/toolkit/power-bi/workload-optimization.md +++ b/docs-mslearn/toolkit/power-bi/workload-optimization.md @@ -1,9 +1,9 @@ --- title: FinOps toolkit Workload optimization report description: Learn about the Workload optimization report, which identifies opportunities for rightsizing and removing unused resources to enhance efficiency. -author: bandersmsft -ms.author: banders -ms.date: 02/13/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-toolkit @@ -97,6 +97,7 @@ Related solutions: - [FinOps hubs](../hubs/finops-hubs-overview.md) - [FinOps workbooks](../workbooks/finops-workbooks-overview.md) +- [FinOps alerts](../alerts/finops-alerts-overview.md) - [FinOps toolkit open data](../open-data.md)
diff --git a/docs-mslearn/toolkit/powershell/cost/Get-FinOpsCostExport.md b/docs-mslearn/toolkit/powershell/cost/Get-FinOpsCostExport.md index 403a248f4..bc1263827 100644 --- a/docs-mslearn/toolkit/powershell/cost/Get-FinOpsCostExport.md +++ b/docs-mslearn/toolkit/powershell/cost/Get-FinOpsCostExport.md @@ -1,9 +1,9 @@ --- title: Get-FinOpsCostExport command description: Get a list of Cost Management exports for a given scope using the Get-FinOpsCostExport command in the FinOpsToolkit module. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit @@ -169,7 +169,7 @@ Gets all exports within the subscription scope for a container matching wildcard Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.8/bladeName/PowerShell/featureName/CostManagement.GetExport) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.9/bladeName/PowerShell/featureName/CostManagement.GetExport) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/powershell/cost/New-FinOpsCostExport.md b/docs-mslearn/toolkit/powershell/cost/New-FinOpsCostExport.md index 7bb7b5c39..14a367643 100644 --- a/docs-mslearn/toolkit/powershell/cost/New-FinOpsCostExport.md +++ b/docs-mslearn/toolkit/powershell/cost/New-FinOpsCostExport.md @@ -1,9 +1,9 @@ --- title: New-FinOpsCostExport command description: Create a new Cost Management export for the specified scope using the New-FinOpsCostExport command in the FinOpsToolkit module. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit @@ -70,28 +70,30 @@ New-FinOpsCostExport ` ## Parameters -| Name | Description | -| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `‑Name` | Required. Name of the export. | -| `‑Scope` | Required. Resource ID of the scope to export data for. | -| `‑Dataset` | Optional. Dataset to export. Allowed values = "ActualCost", "AmortizedCost". Default = "ActualCost". | -| `‑DatasetVersion` | Optional. Schema version of the dataset to export. Default = (latest version as of June 2024; for example, "1.0" for FocusCost). | -| `‑DatasetFilters` | Optional. Dictionary of key/value pairs to filter the dataset with. Only applies to ReservationRecommendations dataset in 2023-07-01-preview. Valid filters are reservationScope (Shared or Single), resourceType (for example, VirtualMachines), lookBackPeriod (Last7Days, Last30Days, Last60Days). | -| `‑Monthly` | Optional. Indicates that the export should be executed monthly (instead of daily). Default = false. | -| `‑OneTime` | Optional. Indicates that the export should only be executed once. When set, the start/end dates are the dates to query data for. Can't be used with the -Monthly option. | -| `‑StartDate` | Optional. Day to start running exports. Default = First day of the previous month if -OneTime is set; otherwise, tomorrow (DateTime.Now.AddDays(1)). | -| `‑EndDate` | Optional. Last day to run the export. Default = Last day of the month identified in -StartDate if -OneTime is set; otherwise, five years from -StartDate. | -| `‑StorageAccountId` | Required. Resource ID of the storage account to export data to. | -| `‑StorageContainer` | Optional. Name of the container to export data to. Container is created if it doesn't exist. Default = "cost-management". | -| `‑StoragePath` | Optional. Path to export data to within the storage container. Default = (scope ID). | -| `‑Location` | Optional. Indicates the Azure location to use for the managed identity used to push data to the storage account. Managed identity is required in order to work with storage accounts behind a firewall but require access to grant permissions (for example, Owner). If specified, managed identity is used; otherwise, managed identity isn't used and your export doesn't push data to a storage account behind a firewall. Default = (empty). | -| `‑DoNotPartition` | Optional. Indicates whether to partition the exported data into multiple files. Partitioning is recommended for reliability so this option is to disable partitioning. Default = false. | -| `‑DoNotOverwrite` | Optional. Indicates whether to overwrite previously exported data for the current month. Overwriting is recommended to keep storage size and costs down so this option is to disable overwriting. Default = false. | -| `‑Execute` | Optional. Indicates that the export should be run immediately after created. | -| `‑Backfill` | Optional. Number of months to export the data for. It only runs once at create time. Failed exports aren't reattempted. Not supported when -OneTime is set. Default = 0. | -| `‑Execute` | Optional. Indicates that the export should be run immediately after created. | -| `‑Backfill` | Optional. Number of months to export the data for. It only runs once at create time. Failed exports aren't reattempted. Not supported when -OneTime is set. Default = 0. | -| `‑ApiVersion` | Optional. API version to use when calling the Cost Management Exports API. Default = 2023-07-01-preview. | +| Name | Description | +| --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `‑Name` | Required. Name of the export. | +| `‑Scope` | Required. Resource ID of the scope to export data for. | +| `‑Dataset` | Optional. Dataset to export. Allowed values = "ActualCost", "AmortizedCost", "FocusCost", "PriceSheet", "ReservationDetails", "ReservationRecommendations", "ReservationTransactions". Default = "FocusCost". | +| `‑DatasetVersion` | Optional. Schema version of the dataset to export. Default = "1.0" (applies to FocusCost only). | +| `‑DatasetFilters` | Optional. Dictionary of key/value pairs to filter the dataset with. Only applies to ReservationRecommendations dataset in 2023-07-01-preview. Valid filters are reservationScope (Shared or Single), resourceType (for example, VirtualMachines), lookBackPeriod (Last7Days, Last30Days, Last60Days). | +| `‑CommitmentDiscountScope` | Optional. Reservation scope filter to use when exporting reservation recommendations. Ignored for other export types. Allowed values: Shared, Single. Default: Shared. | +| `‑CommitmentDiscountResourceType` | Optional. Reservation resource type filter to use when exporting reservation recommendations. Ignored for other export types. Default: VirtualMachines. | +| `‑CommitmentDiscountLookback` | Optional. Reservation resource type filter to use when exporting reservation recommendations. Ignored for other export types. Allowed values: 7, 30, 60. Default: 30. | +| `‑Monthly` | Optional. Indicates that the export should be executed monthly (instead of daily). Ignored for prices, reservation recommendations, and reservation transactions. Default = false. | +| `‑OneTime` | Optional. Indicates that the export should only be executed once. When set, the start/end dates are the dates to query data for. Cannot be used in conjunction with the -Monthly option. | +| `‑StartDate` | Optional. Day to start running exports. Default = First day of the previous month if -OneTime is set; otherwise, tomorrow (DateTime.Now.AddDays(1)). | +| `‑EndDate` | Optional. Last day to run the export. Default = Last day of the month identified in -StartDate if -OneTime is set; otherwise, 5 years from -StartDate. | +| `‑StorageAccountId` | Required. Resource ID of the storage account to export data to. | +| `‑StorageContainer` | Optional. Name of the container to export data to. Container is created if it doesn't exist. Default = "cost-management". | +| `‑StoragePath` | Optional. Path to export data to within the storage container. Default = (scope ID). | +| `‑DoNotPartition` | Optional. Indicates whether to partition the exported data into multiple files. Partitioning is recommended for reliability so this option is to disable partitioning. Default = false. | +| `‑DoNotOverwrite` | Optional. Indicates whether to overwrite previously exported data for the current month. Overwriting is recommended to keep storage size and costs down so this option is to disable overwriting. If creating an export for FinOps hubs, we recommend you specify the -DoNotOverwrite option to improve troubleshooting. Default = false. | +| `‑SystemAssignedIdentity` | Optional. Indicates that managed identity should be used to push data to the storage account. Managed identity is required in order to work with storage accounts behind a firewall but require access to grant permissions (for example, Owner). If specified, managed identity will be used; otherwise, managed identity will not be used and your export will not be able to push data to a storage account behind a firewall. Default = (empty). | +| `‑Location` | Optional. Indicates the Azure location to use for the managed identity used to push data to the storage account. Managed identity is required in order to work with storage accounts behind a firewall but require access to grant permissions (for example, Owner). If specified, managed identity will be used; otherwise, managed identity will not be used and your export will not be able to push data to a storage account behind a firewall. Default = (empty). | +| `‑Execute` | Optional. Indicates that the export should be run immediately after created. | +| `‑Backfill` | Optional. Number of months to export the data for. This is only run once at create time. Failed exports are not re-attempted. Not supported when -OneTime is set. Default = 0. | +| `‑ApiVersion` | Optional. API version to use when calling the Cost Management Exports API. Default = 2023-07-01-preview. |
@@ -160,7 +162,7 @@ Creates a new daily export called **Daily-MTD** with StartDate = DateTime.Now an Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.8/bladeName/PowerShell/featureName/CostManagement.NewExport) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.9/bladeName/PowerShell/featureName/CostManagement.NewExport) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/powershell/cost/Remove-FinOpsCostExport.md b/docs-mslearn/toolkit/powershell/cost/Remove-FinOpsCostExport.md index c391e10dc..2c6e50d2d 100644 --- a/docs-mslearn/toolkit/powershell/cost/Remove-FinOpsCostExport.md +++ b/docs-mslearn/toolkit/powershell/cost/Remove-FinOpsCostExport.md @@ -1,9 +1,9 @@ --- title: Remove-FinOpsCostExport command description: Delete a Cost Management export and optionally data associated with the export using the Remove-FinOpsCostExport command in the FinOpsToolkit module. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit @@ -67,7 +67,7 @@ Deletes a Cost Management export and removes the exported data from the linked s Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.8/bladeName/PowerShell/featureName/CostManagement.RemoveExport) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.9/bladeName/PowerShell/featureName/CostManagement.RemoveExport) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/powershell/cost/Start-FinOpsCostExport.md b/docs-mslearn/toolkit/powershell/cost/Start-FinOpsCostExport.md index ea1f0d26a..433787e93 100644 --- a/docs-mslearn/toolkit/powershell/cost/Start-FinOpsCostExport.md +++ b/docs-mslearn/toolkit/powershell/cost/Start-FinOpsCostExport.md @@ -1,9 +1,9 @@ --- title: Start-FinOpsCostExport command description: Initiate a Cost Management export run for the most recent period using the Start-FinOpsCostExport command in the FinOpsToolkit module. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit @@ -85,7 +85,7 @@ Runs an export called 'CostExport' for the previous 12 months. Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.8/bladeName/PowerShell/featureName/CostManagement.StartExport) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.9/bladeName/PowerShell/featureName/CostManagement.StartExport) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/powershell/cost/cost-management-commands.md b/docs-mslearn/toolkit/powershell/cost/cost-management-commands.md index 92235d56b..290778f84 100644 --- a/docs-mslearn/toolkit/powershell/cost/cost-management-commands.md +++ b/docs-mslearn/toolkit/powershell/cost/cost-management-commands.md @@ -1,9 +1,9 @@ --- title: Cost Management commands description: Learn about PowerShell commands in the FinOpsToolkit module to support Cost Management capabilities. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit @@ -32,7 +32,7 @@ The Cost Management PowerShell commands help you manage Cost Management features Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.8/bladeName/PowerShell/featureName/CostManagement) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.9/bladeName/PowerShell/featureName/CostManagement) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/powershell/data/Get-FinOpsPricingUnit.md b/docs-mslearn/toolkit/powershell/data/Get-FinOpsPricingUnit.md index 30c656b20..01d243b04 100644 --- a/docs-mslearn/toolkit/powershell/data/Get-FinOpsPricingUnit.md +++ b/docs-mslearn/toolkit/powershell/data/Get-FinOpsPricingUnit.md @@ -1,9 +1,9 @@ --- title: Get-FinOpsPricingUnit command description: Get a pricing unit, distinct unit, and block size using the Get-FinOpsPricingUnit command in the FinOpsToolkit module. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit @@ -69,7 +69,7 @@ Returns all pricing units measured in gigabytes. Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.8/bladeName/PowerShell/featureName/OpenData.GetPricingUnit) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.9/bladeName/PowerShell/featureName/OpenData.GetPricingUnit) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/powershell/data/Get-FinOpsRegion.md b/docs-mslearn/toolkit/powershell/data/Get-FinOpsRegion.md index ed0f340d7..61bb432eb 100644 --- a/docs-mslearn/toolkit/powershell/data/Get-FinOpsRegion.md +++ b/docs-mslearn/toolkit/powershell/data/Get-FinOpsRegion.md @@ -1,9 +1,9 @@ --- title: Get-FinOpsRegion command description: Get an Azure region ID and name based on the specified resource location using the Get-FinOpsRegion command in the FinOpsToolkit module. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit @@ -66,7 +66,7 @@ Returns all Asia regions with the original Cost Management ResourceLocation valu Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.8/bladeName/PowerShell/featureName/OpenData.GetRegion) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.9/bladeName/PowerShell/featureName/OpenData.GetRegion) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/powershell/data/Get-FinOpsResourceType.md b/docs-mslearn/toolkit/powershell/data/Get-FinOpsResourceType.md index 562561a23..284b392fe 100644 --- a/docs-mslearn/toolkit/powershell/data/Get-FinOpsResourceType.md +++ b/docs-mslearn/toolkit/powershell/data/Get-FinOpsResourceType.md @@ -1,9 +1,9 @@ --- title: Get-FinOpsResourceType command description: Get an Azure resource type with readable display names, preview status, description, icon, and support links using the Get-FinOpsResourceType command. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit @@ -64,7 +64,7 @@ Returns all resource types that aren't in preview. Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.8/bladeName/PowerShell/featureName/OpenData.GetResourceType) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.9/bladeName/PowerShell/featureName/OpenData.GetResourceType) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/powershell/data/Get-FinOpsService.md b/docs-mslearn/toolkit/powershell/data/Get-FinOpsService.md index 5b710c2e6..dd47b564e 100644 --- a/docs-mslearn/toolkit/powershell/data/Get-FinOpsService.md +++ b/docs-mslearn/toolkit/powershell/data/Get-FinOpsService.md @@ -1,9 +1,9 @@ --- title: Get-FinOpsService command description: Get the name and category for a service, publisher, and cloud provider using the Get-FinOpsService command in the FinOpsToolkit module. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit @@ -72,7 +72,7 @@ Returns all services with a resource provider that starts with `Microsoft.C`. Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.8/bladeName/PowerShell/featureName/OpenData.GetService) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.9/bladeName/PowerShell/featureName/OpenData.GetService) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/powershell/data/open-data-commands.md b/docs-mslearn/toolkit/powershell/data/open-data-commands.md index 234ae59ff..0049bf993 100644 --- a/docs-mslearn/toolkit/powershell/data/open-data-commands.md +++ b/docs-mslearn/toolkit/powershell/data/open-data-commands.md @@ -1,9 +1,9 @@ --- title: Open data commands description: Learn about PowerShell commands available in the FinOpsToolkit module to work with FinOps open data and integrate datasets into your workflow. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit @@ -32,7 +32,7 @@ The FinOps toolkit open data PowerShell commands help you integrate datasets int Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.8/bladeName/PowerShell/featureName/OpenData) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.9/bladeName/PowerShell/featureName/OpenData) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/powershell/hubs/Deploy-FinOpsHub.md b/docs-mslearn/toolkit/powershell/hubs/Deploy-FinOpsHub.md index e65c3d9bd..f94460afa 100644 --- a/docs-mslearn/toolkit/powershell/hubs/Deploy-FinOpsHub.md +++ b/docs-mslearn/toolkit/powershell/hubs/Deploy-FinOpsHub.md @@ -1,9 +1,9 @@ --- title: Deploy-FinOpsHub command description: Deploy a new or update an existing FinOps hub instance using the Deploy-FinOpsHub command in the FinOpsToolkit module. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit @@ -84,7 +84,7 @@ Deploys a FinOps hub instance named MyHub to the MyExistingResourceGroup resourc Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.8/bladeName/PowerShell/featureName/Hubs.DeployHub) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.9/bladeName/PowerShell/featureName/Hubs.DeployHub) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/powershell/hubs/Get-FinOpsHub.md b/docs-mslearn/toolkit/powershell/hubs/Get-FinOpsHub.md index 809bdc96b..ca3e16779 100644 --- a/docs-mslearn/toolkit/powershell/hubs/Get-FinOpsHub.md +++ b/docs-mslearn/toolkit/powershell/hubs/Get-FinOpsHub.md @@ -1,9 +1,9 @@ --- title: Get-FinOpsHub command description: Get details about a FinOps hub instance using the Get-FinOpsHub command in the FinOpsToolkit module. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit @@ -81,7 +81,7 @@ Returns all FinOps hubs named `foo` in the `bar` resource group. Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.8/bladeName/PowerShell/featureName/Hubs.GetHub) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.9/bladeName/PowerShell/featureName/Hubs.GetHub) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/powershell/hubs/Initialize-FinOpsHubDeployment.md b/docs-mslearn/toolkit/powershell/hubs/Initialize-FinOpsHubDeployment.md index 4e13415f9..3334b2e8c 100644 --- a/docs-mslearn/toolkit/powershell/hubs/Initialize-FinOpsHubDeployment.md +++ b/docs-mslearn/toolkit/powershell/hubs/Initialize-FinOpsHubDeployment.md @@ -1,9 +1,9 @@ --- title: Initialize-FinOpsHubDeployment command description: Initialize a FinOps hub deployment using the Initialize-FinOpsHubDeployment command in the FinOpsToolkit module. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit @@ -55,7 +55,7 @@ Shows what would happen if the command runs without actually running it. Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.8/bladeName/PowerShell/featureName/Hubs.InitDeployment) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.9/bladeName/PowerShell/featureName/Hubs.InitDeployment) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/powershell/hubs/Register-FinOpsHubProviders.md b/docs-mslearn/toolkit/powershell/hubs/Register-FinOpsHubProviders.md index e750cd9fd..ca4e8cfee 100644 --- a/docs-mslearn/toolkit/powershell/hubs/Register-FinOpsHubProviders.md +++ b/docs-mslearn/toolkit/powershell/hubs/Register-FinOpsHubProviders.md @@ -1,9 +1,9 @@ --- title: Register-FinOpsHubProviders command description: Register Azure resource providers required for FinOps hub using the Register-FinOpsHubProviders command in the FinOpsToolkit module. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit @@ -57,7 +57,7 @@ Shows what would happen if the command runs without actually running it. Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.8/bladeName/PowerShell/featureName/Hubs.RegisterProviders) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.9/bladeName/PowerShell/featureName/Hubs.RegisterProviders) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/powershell/hubs/Remove-FinOpsHub.md b/docs-mslearn/toolkit/powershell/hubs/Remove-FinOpsHub.md index c06a18716..80259f84e 100644 --- a/docs-mslearn/toolkit/powershell/hubs/Remove-FinOpsHub.md +++ b/docs-mslearn/toolkit/powershell/hubs/Remove-FinOpsHub.md @@ -1,9 +1,9 @@ --- title: Remove-FinOpsHub command description: Remove a FinOps hub instance using the Remove-FinOpsHub command in the FinOpsToolkit module, with an option to keep the storage account hosting cost data. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit @@ -70,7 +70,7 @@ Deletes a FinOps Hub named MyHub and deletes all associated resource except the Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.8/bladeName/PowerShell/featureName/Hubs.RemoveHub) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.9/bladeName/PowerShell/featureName/Hubs.RemoveHub) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/powershell/hubs/Remove-FinOpsHubScope.md b/docs-mslearn/toolkit/powershell/hubs/Remove-FinOpsHubScope.md index 65ae45c9d..abb6d2e88 100644 --- a/docs-mslearn/toolkit/powershell/hubs/Remove-FinOpsHubScope.md +++ b/docs-mslearn/toolkit/powershell/hubs/Remove-FinOpsHubScope.md @@ -1,9 +1,9 @@ --- title: Remove-FinOpsHubScope command description: Stops monitoring a scope within a FinOps hub instance and optionally remove the data using the Remove-FinOpsHubScope command in the FinOpsToolkit module. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit @@ -68,7 +68,7 @@ Removes the exports configured to use the FooHub hub instance and removes data f Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.8/bladeName/PowerShell/featureName/Hubs.RemoveScope) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.9/bladeName/PowerShell/featureName/Hubs.RemoveScope) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/powershell/hubs/finops-hubs-commands.md b/docs-mslearn/toolkit/powershell/hubs/finops-hubs-commands.md index 5db8e48d5..1e8247128 100644 --- a/docs-mslearn/toolkit/powershell/hubs/finops-hubs-commands.md +++ b/docs-mslearn/toolkit/powershell/hubs/finops-hubs-commands.md @@ -1,9 +1,9 @@ --- title: FinOps hubs automation description: Learn about PowerShell commands available in the FinOpsToolkit module that deploy and manage FinOps hubs. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit @@ -33,7 +33,7 @@ The FinOps hubs PowerShell commands help you deploy and manage FinOps hubs insta Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.8/bladeName/PowerShell/featureName/Hubs) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.9/bladeName/PowerShell/featureName/Hubs) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/powershell/powershell-commands.md b/docs-mslearn/toolkit/powershell/powershell-commands.md index c05594e9e..4e5dbf2be 100644 --- a/docs-mslearn/toolkit/powershell/powershell-commands.md +++ b/docs-mslearn/toolkit/powershell/powershell-commands.md @@ -1,9 +1,9 @@ --- title: FinOps toolkit PowerShell module description: Automate and scale your FinOps efforts using the FinOps toolkit PowerShell module, which includes commands to manage FinOps solutions. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit @@ -82,7 +82,7 @@ The FinOps toolkit PowerShell module includes commands to manage FinOps solution Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.8/bladeName/PowerShell/featureName/Overview) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.9/bladeName/PowerShell/featureName/Overview) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/powershell/toolkit/Get-FinOpsToolkitVersion.md b/docs-mslearn/toolkit/powershell/toolkit/Get-FinOpsToolkitVersion.md index 8cee43379..34077c0f5 100644 --- a/docs-mslearn/toolkit/powershell/toolkit/Get-FinOpsToolkitVersion.md +++ b/docs-mslearn/toolkit/powershell/toolkit/Get-FinOpsToolkitVersion.md @@ -1,9 +1,9 @@ --- title: Get-FinOpsToolkitVersion command description: Get available versions from published FinOps toolkit releases using the Get-FinOpsToolkitVersion command. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit @@ -73,7 +73,7 @@ Returns all release versions, including preview releases. Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.8/bladeName/PowerShell/featureName/Toolkit.GetVersion) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.9/bladeName/PowerShell/featureName/Toolkit.GetVersion) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/powershell/toolkit/finops-toolkit-commands.md b/docs-mslearn/toolkit/powershell/toolkit/finops-toolkit-commands.md index a7b14a261..91fb5db55 100644 --- a/docs-mslearn/toolkit/powershell/toolkit/finops-toolkit-commands.md +++ b/docs-mslearn/toolkit/powershell/toolkit/finops-toolkit-commands.md @@ -1,9 +1,9 @@ --- title: Toolkit commands description: This article summarizes PowerShell commands available for general FinOps toolkit operations, including getting details about toolkit releases. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit @@ -29,7 +29,7 @@ The FinOps toolkit PowerShell commands help you get details about FinOps toolkit Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.8/bladeName/PowerShell/featureName/Toolkit) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK0.9/bladeName/PowerShell/featureName/Toolkit) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/roadmap.md b/docs-mslearn/toolkit/roadmap.md index cf09faead..5802ae1d2 100644 --- a/docs-mslearn/toolkit/roadmap.md +++ b/docs-mslearn/toolkit/roadmap.md @@ -1,9 +1,9 @@ --- title: FinOps toolkit roadmap description: Explore the FinOps toolkit roadmap to learn about upcoming features, key themes, and initiatives planned for the future. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit @@ -128,7 +128,7 @@ While our community is growing, we don't have a dedicated staff and can't commit Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.8/bladeName/Toolkit/featureName/Roadmap) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK0.9/bladeName/Toolkit/featureName/Roadmap) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/workbooks/customize-workbooks.md b/docs-mslearn/toolkit/workbooks/customize-workbooks.md index 443e09379..4549d1840 100644 --- a/docs-mslearn/toolkit/workbooks/customize-workbooks.md +++ b/docs-mslearn/toolkit/workbooks/customize-workbooks.md @@ -1,9 +1,9 @@ --- title: Use and customize FinOps workbooks description: Learn how to install and customize FinOps workbooks to achieve FinOps goals, including cost recommendations, idle resource identification, and more. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: how-to ms.service: finops ms.subservice: finops-toolkit @@ -158,7 +158,7 @@ For more information about Azure Monitor workbooks, see the [Visualize data comb Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20workbooks%3F/cvaQuestion/How%20valuable%20are%20FinOps%20workbooks%3F/surveyId/FTK0.8/bladeName/Workbooks/featureName/Customize) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20workbooks%3F/cvaQuestion/How%20valuable%20are%20FinOps%20workbooks%3F/surveyId/FTK0.9/bladeName/Workbooks/featureName/Customize) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/workbooks/finops-workbooks-overview.md b/docs-mslearn/toolkit/workbooks/finops-workbooks-overview.md index bbe6eee3e..426b0b179 100644 --- a/docs-mslearn/toolkit/workbooks/finops-workbooks-overview.md +++ b/docs-mslearn/toolkit/workbooks/finops-workbooks-overview.md @@ -1,13 +1,13 @@ --- title: Deploy FinOps workbooks description: FinOps workbooks are Azure Monitor workbooks that help you implement FinOps capabilities, including optimization and governance, to achieve your FinOps goals. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: how-to ms.service: finops ms.subservice: finops-toolkit -ms.reviewer: micflan +ms.reviewer: arclares #customer intent: As a FinOps user, I want to understand what FinOps workbooks are and how they can help me accomplish my goals. --- @@ -50,7 +50,7 @@ This template includes the following workbooks: Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20workbooks%3F/cvaQuestion/How%20valuable%20are%20FinOps%20workbooks%3F/surveyId/FTK0.8/bladeName/Workbooks/featureName/Overview) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20workbooks%3F/cvaQuestion/How%20valuable%20are%20FinOps%20workbooks%3F/surveyId/FTK0.9/bladeName/Workbooks/featureName/Overview) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/workbooks/governance.md b/docs-mslearn/toolkit/workbooks/governance.md index dd997753a..19d4fac46 100644 --- a/docs-mslearn/toolkit/workbooks/governance.md +++ b/docs-mslearn/toolkit/workbooks/governance.md @@ -1,13 +1,13 @@ --- title: Governance workbook description: Azure Monitor workbook focused on governance, providing an overview of your Azure environment's governance posture and compliance. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-toolkit -ms.reviewer: micflan +ms.reviewer: nteyan #customer intent: As a FinOps user, I want to understand what the FinOps Governance workbook is and how it can help me implement the Cloud policy and governance capability. --- @@ -204,7 +204,7 @@ For more information, see [Driving your organization to remediate security issue Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20workbooks%3F/cvaQuestion/How%20valuable%20are%20FinOps%20workbooks%3F/surveyId/FTK0.8/bladeName/Workbooks.Governance/featureName/Overview) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20workbooks%3F/cvaQuestion/How%20valuable%20are%20FinOps%20workbooks%3F/surveyId/FTK0.9/bladeName/Workbooks.Governance/featureName/Overview) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. diff --git a/docs-mslearn/toolkit/workbooks/optimization.md b/docs-mslearn/toolkit/workbooks/optimization.md index 76f99f3c9..0d8ef2795 100644 --- a/docs-mslearn/toolkit/workbooks/optimization.md +++ b/docs-mslearn/toolkit/workbooks/optimization.md @@ -1,13 +1,13 @@ --- title: FinOps toolkit Optimization workbook description: The Azure Monitor workbook focuses on cost optimization, providing insights and recommendations for improving cost efficiency in your Azure environment. -author: bandersmsft -ms.author: banders -ms.date: 02/18/2025 +author: flanakin +ms.author: micflan +ms.date: 04/02/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-toolkit -ms.reviewer: micflan +ms.reviewer: arclares #customer intent: As a FinOps user, I want to understand what the FinOps Optimization workbook is and how it can help me implement the Workload optimization and Rate optimization FinOps capabilities. --- @@ -56,7 +56,7 @@ For more information about the Cost optimization workbook, see [Understand and o Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. > [!div class="nextstepaction"] -> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20workbooks%3F/cvaQuestion/How%20valuable%20are%20FinOps%20workbooks%3F/surveyId/FTK0.8/bladeName/Workbooks.Optimization/featureName/Overview) +> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20workbooks%3F/cvaQuestion/How%20valuable%20are%20FinOps%20workbooks%3F/surveyId/FTK0.9/bladeName/Workbooks.Optimization/featureName/Overview) If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. @@ -80,6 +80,7 @@ Related products: Related solutions: +- [FinOps alerts](../alerts/finops-alerts-overview.md) - [Optimization engine](../optimization-engine/overview.md) - [FinOps toolkit Power BI reports](../power-bi/reports.md) - [FinOps hubs](../hubs/finops-hubs-overview.md) diff --git a/docs-wiki/Advisory-council.md b/docs-wiki/Advisory-council.md index bf6f432de..9d8b1a5e7 100644 --- a/docs-wiki/Advisory-council.md +++ b/docs-wiki/Advisory-council.md @@ -1,13 +1,12 @@ -The Microsoft FinOps toolkit advisory council represents contributors, their contributions, and end consumers for each of the tools and resources included in the FinOps toolkit. The advisory council advocates for diverse perspectives and fosters a collaborative environment, bridging the gap between the governing board and the contributors and consumers. Advisory council members are typically owners of one or more tools and resources that have been contributed to the FinOps toolkit. +The Microsoft FinOps toolkit advisory council represents contributors, their contributions, and end consumers for each of the tools and resources included in the FinOps toolkit. The advisory council advocates for diverse perspectives and fosters a collaborative environment, bridging the gap between the governing board and the contributors and consumers. Advisory council members are typically technical leads of one or more tools and resources that have been contributed to the FinOps toolkit.
On this page: - [💼 Responsibilities](#-responsibilities) -- [🤔 Making decisions](#-making-decisions) - [🧑‍🤝‍🧑 Composition](#-composition) - [📑 Meetings](#-meetings) @@ -20,13 +19,13 @@ The council is responsible for the following high-level areas: - **Advocacy**: Representing the interests and concerns of contributors and consumers. - **Oversight**: Reviewing and providing feedback on board decisions. - **Communication**: Facilitating open and transparent communication between the governing board, contributors, and consumers. -- **Execution**: Executing the vision and strategy outlined by the board as it pertains to each tool and resource. +- **Contribution**: Driving contributions in alignment with the vision and strategy outlined by the board as it pertains to each tool and resource. +- **Support**: Providing and facilitating help and support to unblock contributors and consumers. - **Recognition**: Acknowledging and celebrating the contributions of community members to encourage continued engagement and contribution. -Council members are also expected to facilitate [[Support escalations]] by: +As part of support efforts, Council members are expected to facilitate [[Support escalations]] by: -- Reviewing new and unresolved issues and discussions related to their tool or resource at least once per week. -- Responding to issues and discussions about their tool or resource within 2 business days. +- Reviewing and responding to new and unresolved issues and discussions related to their tool or resource at least once per week. - Responding to Microsoft Support escalations within 2 business days. - Responding to security investigations within 1 business day. @@ -34,12 +33,6 @@ Council members are expected to facilitate resolving or looping in key contribut
-## 🤔 Making decisions - -While the council does not make explicit project decisions amongst themselves, their participation in [[governing board]] meetings and decisions is subject to the same decision making process and requirements. - -
- ## 🧑‍🤝‍🧑 Composition The advisory council consists of the following representative seats: @@ -47,6 +40,7 @@ The advisory council consists of the following representative seats: - Each tool and resource included in the toolkit - Each Microsoft product family in the FinOps space: - Azure Advisor + - Azure Carbon Optimization - Azure Monitor - Azure Resource Manager (including Management groups, Tags, Policy, Resource Graph, etc.) - Commerce (including Benefits, Cost Management, Pricing, etc.) @@ -59,19 +53,27 @@ The advisory council consists of the following representative seats: - Azure Customer Experience - ISV & Digital Natives - Commerce - FastTrack - Developer Relations - - Customer Support Services + - Customer Support Services - Any FinOps Certified Professional (no limit on number) This currently includes the following people: -| Seat | Member | -| -------------------------- | --------------------- | -| Azure Optimization Engine | Helder Pinto | -| Cost optimization workbook | Seif Bassem | -| FinOps hubs | Brett Wilson | -| Governance workbook | Nicolas Teyan | -| PowerShell module | Anthony Romano | -| Learning resources | Fernando Vasconcellos | +| Seat | Member | +| ------------------------------------ | --------------------- | +| Azure Optimization Engine | Helder Pinto | +| Bicep Registry | Vacant | +| FinOps alerts | Robel Mamecha | +| FinOps guide: Framework & FOCUS docs | Michael Flanakin | +| FinOps guide: Best practice library | Vacant | +| FinOps guide: MS Learn modules | Fernando Vasconcellos | +| FinOps guide: Interactive guides | Fernando Vasconcellos | +| FinOps guide: Review assessment | Fernando Vasconcellos | +| FinOps hubs | Brett Wilson | +| FinOps workbooks: Optimization | Arthur Clares | +| FinOps workbooks: Governance | Nicolas Teyan | +| Open data | Vacant | +| Power BI | Vacant | +| PowerShell | Vacant | Each seat can be filled by one and only one representative to ensure the council remains fair, balanced, and does not grow too large to be effective. The one exception is FinOps Certified Professionals who we believe have earned the right to contribute independently given their investment in certification and dedication to the FinOps space. @@ -90,6 +92,8 @@ Individuals must meet the following criteria in order to attain a council seat: ## 📑 Meetings -Advisory council meetings have not been established yet. Meetings will be recorded to support asynchronous collaboration for those not able to join. Governing board members are expected to join. Contributors and active community members may request to join these calls or view recordings as desired. +The advisory council does not have dedicated meetings at this time. The advisory council is expected to participate (synchronously or asynchronously) in weekly FinOps toolkit sync calls on Wednesdays at 3 PM UTC or FinOps hubs sync calls on Mondays at 3:30 PM UTC. Meetings will be recorded to support asynchronous collaboration for those not able to join. Contributors and active community members may request to join these calls or view recordings as desired. + +The advisory council is also invited to the monthly governing board meetings; however, attendance is optional.
diff --git a/docs-wiki/Governing-board.md b/docs-wiki/Governing-board.md index a78d5cfd1..9b8bb2f25 100644 --- a/docs-wiki/Governing-board.md +++ b/docs-wiki/Governing-board.md @@ -67,18 +67,19 @@ If consensus cannot be reached within 14 days and the board believes the issue i The governing board consists of the following representative seats: -| Seat | Member | -| ------------------------------------------ | ---------------- | -| Business sponsor | Nelson Pereira | -| Community | Sonia Cuff | -| Consulting | Manfred Simonis | -| Engineering | Arthur Clares | -| Marketing | Vacant | -| Product | Michael Flanakin | -| FinOps Certified Professional | Vacant | -| Internal customer (one per FinOps persona) | Vacant | -| External customer (one per FinOps persona) | Vacant | -| Advisory Council | Vacant | +| Seat | Member | Time zone | +| ----------------------------- | --------------------- | --------- | +| Business sponsor | Nelson Pereira | UTC | +| Community | Sonia Cuff | UTC+10 | +| Consulting | Tanuja Shah | UTC-5 | +| Engineering | Arthur Clares | UTC | +| Marketing | Fernando Vasconcellos | UTC-5 | +| Product | Michael Flanakin | UTC-8 | +| FinOps Certified Professional | Dirk Brinkmann | UTC+1 | +| External | Vacant | | +| External | Vacant | | +| External | Vacant | | +| Advisory Council | Vacant | | Individuals must meet the following criteria in order to attain a board seat: @@ -94,6 +95,14 @@ Individuals must meet the following criteria in order to attain a board seat: ## 📑 Meetings -Governing board meetings are held on Tuesdays at 6am UTC. Meetings are recorded to support asynchronous collaboration for those not able to join. Advisory council members, contributors, and active community members may request to join these calls or view recordings. Recordings are only stored for 30 days. +Governing board meetings are held monthly. Meetings are recorded to support asynchronous collaboration for those not able to join. Advisory council members, contributors, and active community members may request to join these calls or view recordings. Recordings are only stored for 30 days. + +Governing board meetings have the following agenda: + +- Monthly updates (5m) +- Milestone progress, blockers, and risks (5-10m) +- OKR and KPI review (5-10m) +- New and ongoing initiatives (30m) +- Action items and next steps (5m)
diff --git a/docs/README.md b/docs/README.md index 896f5bd35..24cb864d6 100644 --- a/docs/README.md +++ b/docs/README.md @@ -16,12 +16,12 @@ Automate and extend the Microsoft Cloud with starter kits, scripts, and advanced --- -
-

What's new in February 2025v0.8

-

- February introduces major Power BI optimizations, a simplified FinOps hubs architecture, with many additional small fixes and improvements across the board. +

+

What's new in March 2025v0.8

+

+ March introduces a new FinOps alerts tool for getting notified about optimization opportunities, FinOps hubs expanded coverage of managed exports, Power BI added the reservation break-even point and performance improvements, and many additional small fixes and improvements across the board.

-

See all changes

+

See all changes

@@ -49,6 +49,11 @@ Automate and extend the Microsoft Cloud with starter kits, scripts, and advanced
Customizable home for engineers to maximize cloud ROI.
Learn more
+
+
🔔 FinOps alerts
+
Automate cost optimization by managing idle resources.
+ Learn more +
🔍 Optimization Engine
Extensible solution for custom optimization recommendations.
@@ -72,7 +77,7 @@ Automate and extend the Microsoft Cloud with starter kits, scripts, and advanced
Download FinOps toolkit {% include ftkver.txt %} -💜 Give feedback +💜 Give feedback
@@ -90,97 +95,108 @@ Whether you're looking for a little assistance or are interested in contributing + + + + + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + + + - - - - + + - - + + + + + + +
Nelson Pereira
Nelson Pereira

🌟
Michael Flanakin
Michael Flanakin

🌟 💻 👀 📖 🧑‍🏫 📣
Arthur Clares
Arthur Clares

🌟 💻 👀 📖 🧑‍🏫 📣
Sonia Cuff
Sonia Cuff

🌟 📣
Tanuja Shah
Tanuja Shah

🌟
Fernando Vasconcellos
Fernando Vasconcellos

🌟 📖 📣
Dirk Brinkmann
Dirk Brinkmann

🌟
Brett Wilson
Brett Wilson

💻 👀 📖
Hélder Pinto
Hélder Pinto

💻 👀 📖 🐛
Nicolas Teyan
Nicolas Teyan

💻 📖
Bill Anderson
Bill Anderson

📖
Robel
Robel

💻 📖
Sacha Narinx
Sacha Narinx

💻 👀 📖
Anthony Romano
Anthony Romano

💻 👀 📖
grantxyzou
grantxyzou

🎨
lmoscinski
lmoscinski

🎨
Roland Krummenacher
Roland Krummenacher

💻 👀 🐛
Divyadeep Dayal
Divyadeep Dayal

💻
jamelachahbar
jamelachahbar

💻
Orthodoxos Kipouridis
Orthodoxos Kipouridis

💻 📖
Ben Shy
Ben Shy

💻 👀
Kevin De La Rosa
Kevin De La Rosa

📖
bwatts64
bwatts64

💻 👀
Dany Hoter
Dany Hoter

💻 👀
Joseph John
Joseph John

📖 👀
ripadrao
ripadrao

📖
Pedro Sousa
Pedro Sousa

📖
Sourav Bera
Sourav Bera

📖
J.R. Phillips
J.R. Phillips

💻
Saad Mahmood
Saad Mahmood

💻
simonarbel
simonarbel

🐛
Daniel Ueffing
Daniel Ueffing

🤔 🐛
Daniel Ueffing
Daniel Ueffing

🤔 🐛 📖
Seif Bassem
Seif Bassem

💻
Arjen Huitema
Arjen Huitema

💻
Yuan Zhang
Yuan Zhang

💻
ymehdimsft
ymehdimsft

💻
srilatha inavolu
srilatha inavolu

💻 👀
soumyananda
soumyananda

💻 👀
Chris Bowman
Chris Bowman

🐛 👀
Trey Morgan
Trey Morgan

💻
Travis Silvers
Travis Silvers

👀
Travis Silvers
Travis Silvers

👀
vijayaj4
vijayaj4

💻
pskulkarni
pskulkarni

💻
Ankur Sharma
Ankur Sharma

👀
SREENADHA REDDY VANKIREDDY
SREENADHA REDDY VANKIREDDY

👀
Mubarak Tanseer
Mubarak Tanseer

🐛
maggar
maggar

🤔
lkshck
lkshck

🐛
Slavik N
Slavik N

👀
Adam Andersson
Adam Andersson

🐛
Irena Jurica
Irena Jurica

👀
renanalmeidjr
renanalmeidjr

🐛
elvismangarae
elvismangarae

🐛
erincon01
erincon01

👀 💬
NavidKhan8
NavidKhan8

🐛
Maik van der Gaag
Maik van der Gaag

🐛
Rodney
Rodney

👀
Graham
Graham

🐛 💻
psilantropy
psilantropy

🐛
Graham
Graham

🐛
psilantropy
psilantropy

🐛
Marc Samendinger
Marc Samendinger

📖
Patric K.
Patric K.

💻 🐛
Misba Yousuf
Misba Yousuf

📖
Will Murphy
Will Murphy

🐛
Matt Davis
Matt Davis

🐛
Junya Yamaguchi
Junya Yamaguchi

💻
Claudia Zambella
Claudia Zambella

🛡️
Brian Wyka
Brian Wyka

📖 👀 🐛
ivanboscolo
ivanboscolo

🐛
buxel
buxel

💬
John Lundell
John Lundell

🐛 💬
Ivan Mota
Ivan Mota

💻
Rudolfs Naumenko
Rudolfs Naumenko

💻
Philip Street
Philip Street

🐛 👀
JSwinkels
JSwinkels

🐛
Jared
Jared

👀
Eskil Uhlving Larsen
Eskil Uhlving Larsen

📖
diff --git a/docs/_includes/components/site_nav.html b/docs/_includes/components/site_nav.html index c11acb059..e730bcd57 100644 --- a/docs/_includes/components/site_nav.html +++ b/docs/_includes/components/site_nav.html @@ -89,7 +89,7 @@ diff --git a/docs/_includes/ftkver.txt b/docs/_includes/ftkver.txt index ce609caf8..9a7d84f2a 100644 --- a/docs/_includes/ftkver.txt +++ b/docs/_includes/ftkver.txt @@ -1 +1 @@ -0.8 \ No newline at end of file +0.9 \ No newline at end of file diff --git a/docs/_sass/color_schemes/dark.scss b/docs/_sass/color_schemes/dark.scss index b0670870a..57a0f0790 100644 --- a/docs/_sass/color_schemes/dark.scss +++ b/docs/_sass/color_schemes/dark.scss @@ -15,4 +15,4 @@ $search-background-color: $grey-dk-250; $search-result-preview-color: $grey-dk-000; $border-color: $grey-dk-200; -@import "./vendor/OneDarkJekyll/syntax"; // this is the one-dark-vivid atom syntax theme \ No newline at end of file +@import './vendor/OneDarkJekyll/syntax'; // this is the one-dark-vivid atom syntax theme diff --git a/docs/_sass/custom/custom.scss b/docs/_sass/custom/custom.scss index de084fd2b..3b95520cf 100644 --- a/docs/_sass/custom/custom.scss +++ b/docs/_sass/custom/custom.scss @@ -1,14 +1,48 @@ -.ftk-version { - background-color: #6f4bb2; - color: #fff; - position: absolute; - top: -0.125em; - margin-left: 0.75em; - padding: 0.25em 0.5em; - border-radius: 0.5em; - font-size: 0.7em; - font-weight: 500; - display: inline-block; +// Colors: https://coolors.co/6f4bb2 + +.side-bar + .main .main-header { + background-color: transparent; +} + +.ftk-new, +.ftk-pricing { + margin: 0; + padding: 1rem; + + h3 { + margin: 0 0 1rem; + } + p { + margin-top: 0.5rem; + margin-bottom: 0; + } +} + +.ftk-new { + background-color: #6f4bb233; + border: solid 1px #6f4bb2; + + .dark-mode & a { + color: #c2b2df; + } + + h3 .ftk-version { + background-color: #6f4bb2; + color: #fff; + position: absolute; + top: -0.125em; + margin-left: 0.75em; + padding: 0.25em 0.5em; + border-radius: 0.5em; + font-size: 0.7em; + font-weight: 500; + display: inline-block; + } +} + +.ftk-pricing { + background-color: #8fb44b33; + border: solid 1px #8fb44b; } a[target='_blank']:hover::after { @@ -70,7 +104,7 @@ a[target='_blank']:hover::after { .ftk-instructions { .ftk-step { .ftk-accordion { - background-color: #eef; + background-color: #6f4bb233; cursor: pointer; border: none; outline: none; @@ -79,25 +113,29 @@ a[target='_blank']:hover::after { transition: 0.4s; width: 100%; + .dark-mode & { + color: #e0d8ef; + } + &:hover { + background-color: #6f4bb266; + } &:after { content: '\02795'; /* Unicode plus (+) */ - font-size: 0.8125rem; color: #777; + font-size: 0.8125rem; float: right; margin-left: 5px; } } &.ftk-active .ftk-accordion { - background-color: #ddf; - } - .ftk-accordion:hover { - background-color: #ccf; - } - &.ftk-active .ftk-accordion:after { - content: '\2796'; /* Unicode minus (-) */ + background-color: #6f4bb299; + + &:after { + content: '\2796'; /* Unicode minus (-) */ + } } & > div { - background-color: #f9f9ff; + background-color: #6f4bb211; display: none; margin-bottom: 1.5rem 1.5rem; overflow: hidden; diff --git a/docs/alerts.md b/docs/alerts.md new file mode 100644 index 000000000..db84b977b --- /dev/null +++ b/docs/alerts.md @@ -0,0 +1,64 @@ +--- +layout: default +title: FinOps alerts +browser: FinOps alerts - Monitor your Azure environment for optimization +nav_order: 35 +description: 'Accelerate your cost optimization efforts with scheduled notifications that continuously monitor your cloud environment, empowering you to make informed decisions without the hassle.' +permalink: /alerts +#customer intent: As a Finops practitioner, I need to learn about FinOps Alerts +--- + +FinOps alerts +Accelerate your cost optimization efforts with scheduled notifications that continuously monitor your cloud environment, empowering you to make informed decisions without the hassle. +{: .fs-6 .fw-300 } + +Deploy +Documentation + +--- + +Designed with flexibility in mind, FinOps alerts run on a fully configurable schedule, continuously scanning your selected subscriptions for idle resources. + +
+

What's new in March 2025v0.9

+

+ In March, FinOps alerts launched to boost cost optimization with automated notifications that monitor your cloud. +

+ +
+ + +## Actionable insights for smarter cloud management + + + + +## Deploy FinOps alerts + +FinOps alerts works best with the Owner role. For least privileged access, use the Contributor and Role Based Access Control Administrator roles. + +Deploy to Azure +Deploy to Azure Gov +Deploy to Azure China + +💜 Give feedback + + +
diff --git a/docs/bicep.md b/docs/bicep.md index 4b764d459..ef729ec03 100644 --- a/docs/bicep.md +++ b/docs/bicep.md @@ -20,12 +20,12 @@ Accelerate your FinOps efforts with reusable bicep modules for your Azure deploy The FinOps toolkit bicep modules help you deploy resources to manage, monitor, and optimize cost and usage. @@ -61,6 +61,6 @@ module 'br/public:cost/-:' { For details about the parameters for each module, refer to the documentation. About the modules -💜 Give feedback +💜 Give feedback
diff --git a/docs/deploy/finops-alerts-0.9.json b/docs/deploy/finops-alerts-0.9.json new file mode 100644 index 000000000..a018121ed --- /dev/null +++ b/docs/deploy/finops-alerts-0.9.json @@ -0,0 +1,4354 @@ +{ + "$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": "12802525131637595090" + } + }, + "parameters": { + "location": { + "type": "string", + "defaultValue": "[resourceGroup().location]", + "metadata": { + "description": "Azure location where resources should be created" + } + }, + "appName": { + "type": "string", + "defaultValue": "finops-alerts", + "minLength": 1, + "maxLength": 20, + "metadata": { + "description": "Name of the logic app" + } + }, + "recurrenceFrequency": { + "type": "string", + "defaultValue": "Week", + "metadata": { + "description": "Specifies the frequency of the recurrence trigger. Possible values are Week, Day or Hour." + } + }, + "recurrenceInterval": { + "type": "int", + "defaultValue": 1, + "metadata": { + "description": "Specifies the interval for the recurrence trigger. Represents the number of frequency units." + } + }, + "recurrenceType": { + "type": "string", + "defaultValue": "Recurrence", + "metadata": { + "description": "Specifies the type of the trigger. For this example, it is a recurrence trigger." + } + }, + "logicAppSubscriptionId": { + "type": "string", + "defaultValue": "", + "metadata": { + "description": "The Id of the subscription to deploy the logic app in." + } + }, + "resourceGroupName": { + "type": "string", + "defaultValue": "", + "metadata": { + "description": "The name of the resource group." + } + } + }, + "resources": [ + { + "type": "Microsoft.Resources/deployments", + "apiVersion": "2022-09-01", + "name": "[format('logicApp-{0}', uniqueString(deployment().name, parameters('location'), parameters('appName')))]", + "subscriptionId": "[parameters('logicAppSubscriptionId')]", + "resourceGroup": "[parameters('resourceGroupName')]", + "properties": { + "expressionEvaluationOptions": { + "scope": "inner" + }, + "mode": "Incremental", + "parameters": { + "appName": { + "value": "[parameters('appName')]" + }, + "location": { + "value": "[parameters('location')]" + }, + "recurrenceFrequency": { + "value": "[parameters('recurrenceFrequency')]" + }, + "recurrenceInterval": { + "value": "[parameters('recurrenceInterval')]" + }, + "recurrenceType": { + "value": "[parameters('recurrenceType')]" + } + }, + "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": "10854342800064359748" + } + }, + "parameters": { + "location": { + "type": "string", + "defaultValue": "[resourceGroup().location]", + "metadata": { + "description": "Azure location where resources should be created" + } + }, + "appName": { + "type": "string", + "defaultValue": "finops-alerts", + "minLength": 1, + "maxLength": 20, + "metadata": { + "description": "Name of the logic app" + } + }, + "recurrenceFrequency": { + "type": "string", + "defaultValue": "Week", + "metadata": { + "description": "Specifies the frequency of the recurrence trigger. Possible values are Week, Day or Hour." + } + }, + "recurrenceInterval": { + "type": "int", + "defaultValue": 1, + "metadata": { + "description": "Specifies the interval for the recurrence trigger. Represents the number of frequency units." + } + }, + "recurrenceType": { + "type": "string", + "defaultValue": "Recurrence", + "metadata": { + "description": "Specifies the type of the trigger. For this example, it is a recurrence trigger." + } + } + }, + "variables": { + "safeSuffix": "[replace(replace(toLower(parameters('appName')), '-', ''), '_', '')]", + "connectionName": "[format('{0}-connection', variables('safeSuffix'))]", + "displayName": "[format('{0}-connection', variables('safeSuffix'))]", + "actionKeys": [ + "Send_an_email_V2" + ] + }, + "resources": [ + { + "type": "Microsoft.Logic/workflows", + "apiVersion": "2019-05-01", + "name": "[parameters('appName')]", + "identity": { + "type": "SystemAssigned" + }, + "properties": { + "state": "Enabled", + "definition": { + "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "$connections": { + "defaultValue": {}, + "type": "Object" + } + }, + "triggers": { + "Recurrence": { + "recurrence": { + "frequency": "[parameters('recurrenceFrequency')]", + "interval": "[parameters('recurrenceInterval')]" + }, + "evaluatedRecurrence": { + "frequency": "[parameters('recurrenceFrequency')]", + "interval": "[parameters('recurrenceInterval')]" + }, + "type": "[parameters('recurrenceType')]" + } + }, + "actions": { + "For_each_App_GW": { + "foreach": "@body('Parse_idle_App_Gateways')?['data']", + "actions": { + "Set_App_Gateways_URI": { + "type": "SetVariable", + "inputs": { + "name": "AppGwURI", + "value": "@{concat('https://portal.azure.com/#@',items('For_each_App_GW')?['tenantId'],'/resource',items('For_each_App_GW')?['id'])}" + } + }, + "Compose_AppGw": { + "runAfter": { + "Set_App_Gateways_URI": [ + "Succeeded" + ] + }, + "type": "Compose", + "inputs": "@variables('AppGwURI')" + }, + "Append_to_App_Gateway_HTML": { + "runAfter": { + "Compose_AppGw": [ + "Succeeded" + ] + }, + "type": "AppendToStringVariable", + "inputs": { + "name": "AppGatewayHTML", + "value": " \n @{items('For_each_App_GW')?['name']}\n @{items('For_each_App_GW')?['resourceGroup']}\n @{items('For_each_App_GW')?['subscriptionName']}\n " + } + } + }, + "runAfter": { + "Condition_App_Gateway": [ + "Succeeded" + ] + }, + "type": "Foreach", + "runtimeConfiguration": { + "concurrency": { + "repetitions": 1 + } + } + }, + "For_each_Disk": { + "foreach": "@body('Parse_Idle_disks')?['data']", + "actions": { + "Set_Disk_URI": { + "type": "SetVariable", + "inputs": { + "name": "DiskURI", + "value": "@{concat('https://portal.azure.com/#@',items('For_each_Disk')?['tenantId'],'/resource',items('For_each_Disk')?['DiskId'])}" + } + }, + "Compose_Disk": { + "runAfter": { + "Set_Disk_URI": [ + "Succeeded" + ] + }, + "type": "Compose", + "inputs": "@variables('DiskURI')" + }, + "Append_to_Idle_Disk_HTML": { + "runAfter": { + "Compose_Disk": [ + "Succeeded" + ] + }, + "type": "AppendToStringVariable", + "inputs": { + "name": "IdleDiskHTML", + "value": " \n @{items('For_each_Disk')?['DiskName']}\n @{items('For_each_Disk')?['resourceGroup']}\n @{items('For_each_Disk')?['subscriptionName']}\n " + } + } + }, + "runAfter": { + "Condition_Disk": [ + "Succeeded" + ] + }, + "type": "Foreach", + "runtimeConfiguration": { + "concurrency": { + "repetitions": 1 + } + } + }, + "For_each_IP_address": { + "foreach": "@body('Parse_Idle_IP_addresses')?['data']", + "actions": { + "Set_IP_address_URI": { + "type": "SetVariable", + "inputs": { + "name": "IPAddressURI", + "value": "@{concat('https://portal.azure.com/#@',items('For_each_IP_address')?['tenantId'],'/resource',items('For_each_IP_address')?['PublicIpId'])}" + } + }, + "Compose_IP": { + "runAfter": { + "Set_IP_address_URI": [ + "Succeeded" + ] + }, + "type": "Compose", + "inputs": "@variables('IPAddressURI')" + }, + "Append_to_IP_Address_HTML": { + "runAfter": { + "Compose_IP": [ + "Succeeded" + ] + }, + "type": "AppendToStringVariable", + "inputs": { + "name": "IPAddressHTML", + "value": " \n @{items('For_each_IP_address')?['IPName']}\n @{items('For_each_IP_address')?['resourceGroup']}\n @{items('For_each_IP_address')?['subscriptionName']}\n " + } + } + }, + "runAfter": { + "Condition_IP_Address": [ + "Succeeded" + ] + }, + "type": "Foreach", + "runtimeConfiguration": { + "concurrency": { + "repetitions": 1 + } + } + }, + "For_each_Load_Balancer": { + "foreach": "@body('Parse_Idle_Load_Balancers')?['data']", + "actions": { + "Set_Load_Balancer_URI": { + "type": "SetVariable", + "inputs": { + "name": "LoadBalancerURI", + "value": "@{concat('https://portal.azure.com/#@',items('For_each_Load_Balancer')?['tenantId'],'/resource',items('For_each_Load_Balancer')?['loadBalancerid'])}" + } + }, + "Compose_LB": { + "runAfter": { + "Set_Load_Balancer_URI": [ + "Succeeded" + ] + }, + "type": "Compose", + "inputs": "@variables('LoadBalancerURI')" + }, + "Append_to_Load_Balancer_HTML": { + "runAfter": { + "Compose_LB": [ + "Succeeded" + ] + }, + "type": "AppendToStringVariable", + "inputs": { + "name": "LoadBalancerHTML", + "value": " \n @{items('For_each_Load_Balancer')?['LoadBalancerName']}\n @{items('For_each_Load_Balancer')?['resourceGroup']}\n @{items('For_each_Load_Balancer')?['subscriptionName']}\n " + } + } + }, + "runAfter": { + "Condition_Load_Balancer": [ + "Succeeded" + ] + }, + "type": "Foreach", + "runtimeConfiguration": { + "concurrency": { + "repetitions": 1 + } + } + }, + "For_each_Snapshot": { + "foreach": "@body('Parse_Snapshots')?['data']", + "actions": { + "Set_Snapshot_URI": { + "type": "SetVariable", + "inputs": { + "name": "SnapshotURI", + "value": "@{concat('https://portal.azure.com/#@',items('For_each_Snapshot')?['tenantId'],'/resource',items('For_each_Snapshot')?['SnapshotId'])}\n" + } + }, + "Compose_Snapshot": { + "runAfter": { + "Set_Snapshot_URI": [ + "Succeeded" + ] + }, + "type": "Compose", + "inputs": "@variables('SnapshotURI')" + }, + "Append_to_Disk_Snapshot_HTML": { + "runAfter": { + "Compose_Snapshot": [ + "Succeeded" + ] + }, + "type": "AppendToStringVariable", + "inputs": { + "name": "DiskSnapshotHTML", + "value": " \n @{items('For_each_Snapshot')?['Snapshotname']}\n @{items('For_each_Snapshot')?['resourceGroup']}\n @{items('For_each_Snapshot')?['subscriptionName']}\n " + } + } + }, + "runAfter": { + "Condition_Disk_Snapshots": [ + "Succeeded" + ] + }, + "type": "Foreach", + "runtimeConfiguration": { + "concurrency": { + "repetitions": 1 + } + } + }, + "For_each_Stopped_VM": { + "foreach": "@body('Parse_stopped_VMs')?['data']", + "actions": { + "Set_Stopped_VM_URI": { + "type": "SetVariable", + "inputs": { + "name": "StoppedVMURI", + "value": "@{concat('https://portal.azure.com/#@',items('For_each_Stopped_VM')?['tenantId'],'/resource',items('For_each_Stopped_VM')?['VirtualMachineId'])}" + } + }, + "Compose_VM": { + "runAfter": { + "Set_Stopped_VM_URI": [ + "Succeeded" + ] + }, + "type": "Compose", + "inputs": "@variables('StoppedVMURI')" + }, + "Append_to_Stopped_VM_HTML": { + "runAfter": { + "Compose_VM": [ + "Succeeded" + ] + }, + "type": "AppendToStringVariable", + "inputs": { + "name": "StoppedVMHTML", + "value": " \n @{items('For_each_Stopped_VM')?['VMname']}\n @{items('For_each_Stopped_VM')?['resourceGroup']}\n @{items('For_each_Stopped_VM')?['subscriptionName']}\n " + } + } + }, + "runAfter": { + "Condition_Stopped_VMs": [ + "Succeeded" + ] + }, + "type": "Foreach", + "runtimeConfiguration": { + "concurrency": { + "repetitions": 1 + } + } + }, + "Get_idle_App_Gateways": { + "runAfter": { + "Initialize_resources_table": [ + "Succeeded" + ] + }, + "type": "Http", + "inputs": { + "uri": "[format('{0}//providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01', environment().resourceManager)]", + "method": "POST", + "body": { + "query": "@{variables('resourcesTable')} | where type =~ 'Microsoft.Network/applicationGateways'| extend backendPoolsCount = array_length(properties.backendAddressPools),SKUName= tostring(properties.sku.name), SKUTier=tostring(properties.sku.tier),SKUCapacity=properties.sku.capacity,backendPools=properties.backendAddressPools| join (resources | where type =~ 'Microsoft.Network/applicationGateways'| mvexpand backendPools = properties.backendAddressPools| extend backendIPCount =array_length(backendPools.properties.backendIPConfigurations) | extend backendAddressesCount = array_length(backendPools.properties.backendAddresses) | extend backendPoolName=backendPools.properties.backendAddressPools.name | summarize backendIPCount = sum(backendIPCount) ,backendAddressesCount=sum(backendAddressesCount) by id) on id| project-away id1| where (backendIPCount == 0 or isempty(backendIPCount)) and (backendAddressesCount==0 or isempty(backendAddressesCount))| order by id asc | join kind=leftouter ( resourcecontainers | where type == 'microsoft.resources/subscriptions' | project subscriptionId, subscriptionName = name) on subscriptionId", + "scope": "Tenant" + }, + "authentication": { + "type": "ManagedServiceIdentity" + } + } + }, + "Get_idle_Disks": { + "runAfter": { + "Initialize_resources_table": [ + "Succeeded" + ] + }, + "type": "Http", + "inputs": { + "uri": "[format('{0}//providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01', environment().resourceManager)]", + "method": "POST", + "body": { + "query": "@{variables('resourcesTable')} | where type =~ 'microsoft.compute/disks' and managedBy == ''| extend diskState = tostring(properties.diskState) | where (managedBy == '' and diskState != 'ActiveSAS') or (diskState == 'Unattached' and diskState != 'ActiveSAS') | extend DiskId = id, DiskName = name, SKUName = sku.name, SKUTier = sku.tier, DiskSizeGB = tostring(properties.diskSizeGB), Location = location, TimeCreated = tostring(properties.timeCreated) | order by DiskId asc | project DiskId, DiskName, DiskSizeGB, SKUName, SKUTier, resourceGroup, Location, TimeCreated, subscriptionId | join kind=leftouter (resourcecontainers | where type == 'microsoft.resources/subscriptions' | project subscriptionId, subscriptionName = name) on subscriptionId", + "scope": "Tenant" + }, + "authentication": { + "type": "ManagedServiceIdentity" + } + } + }, + "Get_idle_IP_addresses": { + "runAfter": { + "Initialize_resources_table": [ + "Succeeded" + ] + }, + "type": "Http", + "inputs": { + "uri": "[format('{0}//providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01', environment().resourceManager)]", + "method": "POST", + "body": { + "query": "@{variables('resourcesTable')} | where type =~ 'Microsoft.Network/publicIPAddresses' and isempty(properties.ipConfiguration) and isempty(properties.natGateway) | extend PublicIpId=id, IPName=name, AllocationMethod=tostring(properties.publicIPAllocationMethod), SKUName=sku.name, Location=location | project PublicIpId,IPName, SKUName, resourceGroup, Location, AllocationMethod, subscriptionId, tenantId | union ( Resources | where type =~ 'microsoft.network/networkinterfaces' and isempty(properties.virtualMachine) and isnull(properties.privateEndpoint) and isnotempty(properties.ipConfigurations) | extend IPconfig = properties.ipConfigurations | mv-expand IPconfig | extend PublicIpId= tostring(IPconfig.properties.publicIPAddress.id) | project PublicIpId | join ( resources | where type =~ 'Microsoft.Network/publicIPAddresses' | extend PublicIpId=id, IPName=name, AllocationMethod=tostring(properties.publicIPAllocationMethod), SKUName=sku.name, resourceGroup, Location=location ) on PublicIpId | project PublicIpId,IPName, SKUName, resourceGroup, Location, AllocationMethod, subscriptionId, tenantId) | join kind=leftouter ( resourcecontainers | where type == 'microsoft.resources/subscriptions' | project subscriptionId, subscriptionName = name) on subscriptionId", + "scope": "Tenant" + }, + "authentication": { + "type": "ManagedServiceIdentity" + } + } + }, + "Get_idle_Load_Balancers": { + "runAfter": { + "Initialize_resources_table": [ + "Succeeded" + ] + }, + "type": "Http", + "inputs": { + "uri": "[format('{0}//providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01', environment().resourceManager)]", + "method": "POST", + "body": { + "query": "@{variables('resourcesTable')} | where type =~ 'microsoft.network/loadbalancers' and tostring(properties.backendAddressPools) == '[]' | extend loadBalancerId=id,LBRG=resourceGroup, LoadBalancerName=name, SKU=sku, LBLocation=location | order by loadBalancerId asc | project loadBalancerId,LoadBalancerName, SKU.name,SKU.tier, LBLocation, resourceGroup, subscriptionId | join kind=leftouter ( resourcecontainers | where type == 'microsoft.resources/subscriptions' | project subscriptionId, subscriptionName = name) on subscriptionId", + "scope": "Tenant" + }, + "authentication": { + "type": "ManagedServiceIdentity" + } + } + }, + "Get_Disk_Snapshots_older_than_30_days": { + "runAfter": { + "Initialize_resources_table": [ + "Succeeded" + ] + }, + "type": "Http", + "inputs": { + "uri": "[format('{0}//providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01', environment().resourceManager)]", + "method": "POST", + "body": { + "query": "@{variables('resourcesTable')} | where type =~ 'microsoft.compute/snapshots' | extend TimeCreated = properties.timeCreated | where TimeCreated < ago(30d) | extend SnapshotId=id, Snapshotname=name | order by id asc | project id, SnapshotId, Snapshotname, resourceGroup, location, TimeCreated ,subscriptionId | join kind=leftouter ( resourcecontainers | where type == 'microsoft.resources/subscriptions' | project subscriptionId, subscriptionName = name) on subscriptionId", + "scope": "Tenant" + }, + "authentication": { + "type": "ManagedServiceIdentity" + } + } + }, + "Get_Stopped_VMs": { + "runAfter": { + "Initialize_resources_table": [ + "Succeeded" + ] + }, + "type": "Http", + "inputs": { + "uri": "[format('{0}//providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01', environment().resourceManager)]", + "method": "POST", + "body": { + "query": "@{variables('resourcesTable')} | where type =~ 'microsoft.compute/virtualmachines' and tostring(properties.extended.instanceView.powerState.displayStatus) != 'VM deallocated' and tostring(properties.extended.instanceView.powerState.displayStatus) != 'VM running'| extend VMname=name, PowerState=tostring(properties.extended.instanceView.powerState.displayStatus), VMLocation=location, VirtualMachineId=id| order by VirtualMachineId asc| project VirtualMachineId,VMname, PowerState, VMLocation, resourceGroup, subscriptionId | join kind=leftouter ( resourcecontainers | where type == 'microsoft.resources/subscriptions' | project subscriptionId, subscriptionName = name) on subscriptionId", + "scope": "Tenant" + }, + "authentication": { + "type": "ManagedServiceIdentity" + } + } + }, + "Initialize_App_Gateways_URI": { + "runAfter": { + "Parse_idle_App_Gateways": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "AppGwURI", + "type": "string" + } + ] + } + }, + "Initialize_Disk_URI": { + "runAfter": { + "Parse_Idle_disks": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "DiskURI", + "type": "string" + } + ] + } + }, + "Initialize_IP_addresses_URI": { + "runAfter": { + "Parse_Idle_IP_addresses": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "IPAddressURI", + "type": "string" + } + ] + } + }, + "Initialize_Load_Balancer_URI": { + "runAfter": { + "Parse_Idle_Load_Balancers": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "LoadBalancerURI", + "type": "string" + } + ] + } + }, + "Initialize_Snapshot_URI": { + "runAfter": { + "Parse_Snapshots": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "SnapshotURI", + "type": "string" + } + ] + } + }, + "Initialize_Stopped_VM_URI": { + "runAfter": { + "Parse_stopped_VMs": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "StoppedVMURI", + "type": "string" + } + ] + } + }, + "Excluded_subscriptions": { + "runAfter": { + "Included_subscriptions": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "ExcludedSubscriptions", + "type": "array", + "value": [] + } + ] + } + }, + "Parse_idle_App_Gateways": { + "runAfter": { + "Get_idle_App_Gateways": [ + "Succeeded" + ] + }, + "type": "ParseJson", + "inputs": { + "content": "@body('Get_idle_App_Gateways')", + "schema": { + "properties": { + "properties": { + "properties": { + "count": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "data": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "SKUCapacity": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "SKUName": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "SKUTier": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "backendAddressesCount": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "backendIPCount": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "backendPools": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "etag": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "properties": { + "properties": { + "properties": { + "properties": { + "backendAddresses": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "provisioningState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "requestRoutingRules": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "backendPoolsCount": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "extendedLocation": { + "properties": {}, + "type": "object" + }, + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "identity": { + "properties": {}, + "type": "object" + }, + "kind": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "location": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "managedBy": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "plan": { + "properties": {}, + "type": "object" + }, + "properties": { + "properties": { + "properties": { + "properties": { + "authenticationCertificates": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "backendAddressPools": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "etag": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "properties": { + "properties": { + "properties": { + "properties": { + "backendAddresses": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "provisioningState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "requestRoutingRules": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "backendHttpSettingsCollection": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "etag": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "properties": { + "properties": { + "properties": { + "properties": { + "cookieBasedAffinity": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "pickHostNameFromBackendAddress": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "port": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "protocol": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "provisioningState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "requestRoutingRules": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "requestTimeout": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "enableHttp2": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "frontendIPConfigurations": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "etag": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "properties": { + "properties": { + "properties": { + "properties": { + "httpListeners": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "privateIPAllocationMethod": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "provisioningState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "subnet": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "frontendPorts": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "etag": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "properties": { + "properties": { + "properties": { + "properties": { + "httpListeners": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "port": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "provisioningState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "gatewayIPConfigurations": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "etag": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "properties": { + "properties": { + "properties": { + "properties": { + "provisioningState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "subnet": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "httpListeners": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "etag": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "properties": { + "properties": { + "properties": { + "properties": { + "frontendIPConfiguration": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "frontendPort": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "protocol": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "provisioningState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "requestRoutingRules": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "requireServerNameIndication": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "operationalState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "probes": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "provisioningState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "redirectConfigurations": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "requestRoutingRules": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "etag": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "properties": { + "properties": { + "properties": { + "properties": { + "backendAddressPool": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "backendHttpSettings": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "httpListener": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "provisioningState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "ruleType": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "resourceGuid": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "rewriteRuleSets": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "sku": { + "properties": { + "properties": { + "properties": { + "capacity": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "tier": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "sslCertificates": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "urlPathMaps": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "resourceGroup": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "sku": { + "properties": {}, + "type": "object" + }, + "subscriptionId": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "tags": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "tenantId": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "zones": { + "properties": {}, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "facets": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "resultTruncated": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "totalRecords": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "Parse_Idle_IP_addresses": { + "runAfter": { + "Get_idle_IP_addresses": [ + "Succeeded" + ] + }, + "type": "ParseJson", + "inputs": { + "content": "@body('Get_idle_IP_addresses')", + "schema": { + "properties": { + "properties": { + "properties": { + "count": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "data": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "extendedLocation": { + "properties": {}, + "type": "object" + }, + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "identity": { + "properties": {}, + "type": "object" + }, + "kind": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "location": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "managedBy": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "plan": { + "properties": {}, + "type": "object" + }, + "properties": { + "properties": { + "properties": { + "properties": { + "idleTimeoutInMinutes": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "ipTags": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "provisioningState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "publicIPAddressVersion": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "publicIPAllocationMethod": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "resourceGuid": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "resourceGroup": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "sku": { + "properties": { + "properties": { + "properties": { + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "tier": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "subscriptionId": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "tags": { + "properties": {}, + "type": "object" + }, + "tenantId": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "zones": { + "properties": {}, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "facets": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "resultTruncated": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "totalRecords": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "Parse_Idle_Load_Balancers": { + "runAfter": { + "Get_idle_Load_Balancers": [ + "Succeeded" + ] + }, + "type": "ParseJson", + "inputs": { + "content": "@body('Get_idle_Load_Balancers')", + "schema": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "childErrors": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "errorType": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "lineNumber": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "linePosition": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "message": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "path": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "schemaId": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "value": { + "properties": { + "items": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "Parse_Idle_disks": { + "runAfter": { + "Get_idle_Disks": [ + "Succeeded" + ] + }, + "type": "ParseJson", + "inputs": { + "content": "@body('Get_idle_Disks')", + "schema": { + "properties": { + "properties": { + "properties": { + "count": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "data": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "extendedLocation": { + "properties": {}, + "type": "object" + }, + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "identity": { + "properties": {}, + "type": "object" + }, + "kind": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "location": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "managedBy": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "plan": { + "properties": {}, + "type": "object" + }, + "properties": { + "properties": { + "properties": { + "properties": { + "creationData": { + "properties": { + "properties": { + "properties": { + "createOption": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "imageReference": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "diskIOPSReadWrite": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "diskMBpsReadWrite": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "diskSizeBytes": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "diskSizeGB": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "diskState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "encryption": { + "properties": { + "properties": { + "properties": { + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "hyperVGeneration": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "networkAccessPolicy": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "osType": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "provisioningState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "publicNetworkAccess": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "supportedCapabilities": { + "properties": { + "properties": { + "properties": { + "architecture": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "timeCreated": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "uniqueId": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "resourceGroup": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "sku": { + "properties": { + "properties": { + "properties": { + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "tier": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "subscriptionId": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "tags": { + "properties": {}, + "type": "object" + }, + "tenantId": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "zones": { + "properties": {}, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "facets": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "resultTruncated": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "totalRecords": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "Parse_Snapshots": { + "runAfter": { + "Get_Disk_Snapshots_older_than_30_days": [ + "Succeeded" + ] + }, + "type": "ParseJson", + "inputs": { + "content": "@body('Get_Disk_Snapshots_older_than_30_days')", + "schema": { + "properties": { + "query": { + "type": "string" + }, + "subscriptions": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "Parse_stopped_VMs": { + "runAfter": { + "Get_Stopped_VMs": [ + "Succeeded" + ] + }, + "type": "ParseJson", + "inputs": { + "content": "@body('Get_Stopped_VMs')", + "schema": { + "properties": { + "properties": { + "properties": { + "count": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "data": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "extendedLocation": { + "properties": {}, + "type": "object" + }, + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "identity": { + "properties": {}, + "type": "object" + }, + "kind": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "location": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "managedBy": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "plan": { + "properties": {}, + "type": "object" + }, + "properties": { + "properties": { + "properties": { + "properties": { + "diagnosticsProfile": { + "properties": { + "properties": { + "properties": { + "bootDiagnostics": { + "properties": { + "properties": { + "properties": { + "enabled": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "extended": { + "properties": { + "properties": { + "properties": { + "instanceView": { + "properties": { + "properties": { + "properties": { + "hyperVGeneration": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "powerState": { + "properties": { + "properties": { + "properties": { + "code": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "displayStatus": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "level": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "hardwareProfile": { + "properties": { + "properties": { + "properties": { + "vmSize": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "networkProfile": { + "properties": { + "properties": { + "properties": { + "networkInterfaces": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "osProfile": { + "properties": { + "properties": { + "properties": { + "adminUsername": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "allowExtensionOperations": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "computerName": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "requireGuestProvisionSignal": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "secrets": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "windowsConfiguration": { + "properties": { + "properties": { + "properties": { + "enableAutomaticUpdates": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "patchSettings": { + "properties": { + "properties": { + "properties": { + "assessmentMode": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "enableHotpatching": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "patchMode": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "provisionVMAgent": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "provisioningState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "storageProfile": { + "properties": { + "properties": { + "properties": { + "dataDisks": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "imageReference": { + "properties": { + "properties": { + "properties": { + "exactVersion": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "offer": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "publisher": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "sku": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "version": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "osDisk": { + "properties": { + "properties": { + "properties": { + "caching": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "createOption": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "deleteOption": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "diskSizeGB": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "managedDisk": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "storageAccountType": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "osType": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "vmId": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "resourceGroup": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "sku": { + "properties": {}, + "type": "object" + }, + "subscriptionId": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "tags": { + "properties": {}, + "type": "object" + }, + "tenantId": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "zones": { + "properties": {}, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "facets": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "resultTruncated": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "totalRecords": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "Set_alert_recipient": { + "runAfter": { + "Set_email_subject": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "SendAlertTo", + "type": "string" + } + ] + } + }, + "Initialize_App_Gateway_HTML": { + "runAfter": { + "Initialize_App_Gateways_URI": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "AppGatewayHTML", + "type": "string", + "value": "

Idle Application Gateway Details

" + } + ] + } + }, + "Initialize_Disk_HTML": { + "runAfter": { + "Initialize_Disk_URI": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "IdleDiskHTML", + "type": "string", + "value": "

Idle Disk Details

" + } + ] + } + }, + "Send_an_email_(V2)": { + "runAfter": { + "EmailNotice": [ + "Succeeded" + ] + }, + "type": "ApiConnection", + "inputs": { + "host": { + "connection": { + "name": "@parameters('$connections')['office365']['connectionId']" + } + }, + "method": "post", + "body": { + "To": "@variables('SendAlertTo')", + "Subject": "@variables('SetEmailSubject')", + "Body": "

@{variables('EmailNotice')}

@{variables('AppGatewayHTML')}
@{variables('IdleDiskHTML')}
@{variables('IPAddressHTML')}
@{variables('LoadBalancerHTML')}
@{variables('DiskSnapshotHTML')}
@{variables('StoppedVMHTML')}


📧 About FinOps alerts

FinOps alerts keep you informed about cost optimization opportunities within in your cloud environment. They are fully configurable and can be tailored to run on your desired schedule, ensuring that you receive timely notifications on the scenarios most important to your organization. FinOps alerts are part of the FinOps toolkit, an open-source collection of FinOps solutions that help you manage and optimize your cost, usage, and carbon.

Provide feedback

Give feedback
Vote on or suggest ideas


" + }, + "path": "/v2/Mail" + } + }, + "Initialize_IP_Address_HTML": { + "runAfter": { + "Initialize_IP_addresses_URI": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "IPAddressHTML", + "type": "string", + "value": "

Idle IP Address Details

" + } + ] + } + }, + "Initialize_Load_Balancer_HTML": { + "runAfter": { + "Initialize_Load_Balancer_URI": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "LoadBalancerHTML", + "type": "string", + "value": "

Idle Load Balancer Details

" + } + ] + } + }, + "Initialize_Disk_Snapshot_HTML": { + "runAfter": { + "Initialize_Snapshot_URI": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "DiskSnapshotHTML", + "type": "string", + "value": "

Old Disk Snapshot Details

" + } + ] + } + }, + "Initialize_Stopped_VM_HTML": { + "runAfter": { + "Initialize_Stopped_VM_URI": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "StoppedVMHTML", + "type": "string", + "value": "

Stopped VM Details

" + } + ] + } + }, + "End_to_App_Gateway_HTML": { + "runAfter": { + "For_each_App_GW": [ + "Succeeded" + ] + }, + "type": "AppendToStringVariable", + "inputs": { + "name": "AppGatewayHTML", + "value": "" + } + }, + "End_to_IP_Address_HTML": { + "runAfter": { + "For_each_IP_address": [ + "Succeeded" + ] + }, + "type": "AppendToStringVariable", + "inputs": { + "name": "IPAddressHTML", + "value": " " + } + }, + "End_to_Disk_HTML": { + "runAfter": { + "For_each_Disk": [ + "Succeeded" + ] + }, + "type": "AppendToStringVariable", + "inputs": { + "name": "IdleDiskHTML", + "value": "" + } + }, + "End_to_Load_Balancer_HTML": { + "runAfter": { + "For_each_Load_Balancer": [ + "Succeeded" + ] + }, + "type": "AppendToStringVariable", + "inputs": { + "name": "LoadBalancerHTML", + "value": "" + } + }, + "End_to_Disk_Snapshot_HTML": { + "runAfter": { + "For_each_Snapshot": [ + "Succeeded" + ] + }, + "type": "AppendToStringVariable", + "inputs": { + "name": "DiskSnapshotHTML", + "value": "" + } + }, + "End_to_Stopped_VM_HTML": { + "runAfter": { + "For_each_Stopped_VM": [ + "Succeeded" + ] + }, + "type": "AppendToStringVariable", + "inputs": { + "name": "StoppedVMHTML", + "value": "" + } + }, + "Set_email_subject": { + "runAfter": {}, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "SetEmailSubject", + "type": "string" + } + ] + } + }, + "Included_subscriptions": { + "runAfter": { + "Set_alert_recipient": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "IncludedSubscriptions", + "type": "array", + "value": [] + } + ] + } + }, + "Initialize_resources_table": { + "runAfter": { + "Excluded_subscriptions": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "resourcesTable", + "type": "string", + "value": "resources@{if(equals(length(variables('IncludedSubscriptions')), 0), '', concat('| where subscriptionId in (\"', replace(replace(string(variables('IncludedSubscriptions')), '[', ''), ']', ''), '\")'))}@{if(equals(length(variables('ExcludedSubscriptions')), 0), '', concat('| where subscriptionId !in (\"', replace(replace(string(variables('ExcludedSubscriptions')), '[', ''), ']', ''), '\")'))}" + } + ] + } + }, + "Condition_App_Gateway": { + "actions": { + "Append_no_App_Gateway_results_text": { + "type": "AppendToStringVariable", + "inputs": { + "name": "AppGatewayHTML", + "value": "No resources are idle." + } + } + }, + "runAfter": { + "Initialize_App_Gateway_HTML": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "Append_App_Gateway_results_in_table": { + "type": "AppendToStringVariable", + "inputs": { + "name": "AppGatewayHTML", + "value": "\n \n \n \n \n \n" + } + } + } + }, + "expression": { + "and": [ + { + "equals": [ + "@length(body('Get_idle_App_Gateways')['data'])", + 0 + ] + } + ] + }, + "type": "If" + }, + "Condition_Stopped_VMs": { + "actions": { + "Append_no_Stopped_VM_results_text_": { + "type": "AppendToStringVariable", + "inputs": { + "name": "StoppedVMHTML", + "value": "No resources are idle." + } + } + }, + "runAfter": { + "Initialize_Stopped_VM_HTML": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "Append_Stopped_VM_result_in_table_": { + "type": "AppendToStringVariable", + "inputs": { + "name": "StoppedVMHTML", + "value": "
NameResource GroupSubscription
\n \n \n \n \n \n" + } + } + } + }, + "expression": { + "and": [ + { + "equals": [ + "@length(body('Get_Stopped_VMs')['data'])", + 0 + ] + } + ] + }, + "type": "If" + }, + "Condition_Disk": { + "actions": { + "Append_no_Disk_results_text": { + "type": "AppendToStringVariable", + "inputs": { + "name": "IdleDiskHTML", + "value": "No resources are idle." + } + } + }, + "runAfter": { + "Initialize_Disk_HTML": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "Append_Disk_results_in_table": { + "type": "AppendToStringVariable", + "inputs": { + "name": "IdleDiskHTML", + "value": "
NameResource GroupSubscription
\n \n \n \n \n \n" + } + } + } + }, + "expression": { + "and": [ + { + "equals": [ + "@length(body('Get_idle_Disks')['data'])", + 0 + ] + } + ] + }, + "type": "If" + }, + "Condition_IP_Address": { + "actions": { + "Append_no_IP_Address_results_text": { + "type": "AppendToStringVariable", + "inputs": { + "name": "IPAddressHTML", + "value": "No resources are idle." + } + } + }, + "runAfter": { + "Initialize_IP_Address_HTML": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "Append_IP_Address_results_in_table": { + "type": "AppendToStringVariable", + "inputs": { + "name": "IPAddressHTML", + "value": "
NameResource GroupSubscription
\n \n \n \n \n \n" + } + } + } + }, + "expression": { + "and": [ + { + "equals": [ + "@length(body('Get_idle_IP_addresses')['data'])", + 0 + ] + } + ] + }, + "type": "If" + }, + "Condition_Load_Balancer": { + "actions": { + "Append_no_Load_Balancer_results_text": { + "type": "AppendToStringVariable", + "inputs": { + "name": "LoadBalancerHTML", + "value": "No resources are idle." + } + } + }, + "runAfter": { + "Initialize_Load_Balancer_HTML": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "Append_Load_Balancer_results_in_table": { + "type": "AppendToStringVariable", + "inputs": { + "name": "LoadBalancerHTML", + "value": "
NameResource GroupSubscription
\n \n \n \n \n \n" + } + } + } + }, + "expression": { + "and": [ + { + "equals": [ + "@length(body('Get_idle_Load_Balancers')['data'])", + 0 + ] + } + ] + }, + "type": "If" + }, + "Condition_Disk_Snapshots": { + "actions": { + "Append_no_Disk_Snapshot_results_text": { + "type": "AppendToStringVariable", + "inputs": { + "name": "DiskSnapshotHTML", + "value": "No resources are idle." + } + } + }, + "runAfter": { + "Initialize_Disk_Snapshot_HTML": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "Append_Disk_Snapshot_results_in_table": { + "type": "AppendToStringVariable", + "inputs": { + "name": "DiskSnapshotHTML", + "value": "
NameResource GroupSubscription
\n \n \n \n \n \n" + } + } + } + }, + "expression": { + "and": [ + { + "equals": [ + "@length(body('Get_Disk_Snapshots_older_than_30_days')['data'])", + 0 + ] + } + ] + }, + "type": "If" + }, + "Condition_App_Gateway_next_steps": { + "actions": {}, + "runAfter": { + "End_to_App_Gateway_HTML": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "Append_to_App_Gateway_table": { + "type": "AppendToStringVariable", + "inputs": { + "name": "AppGatewayHTML", + "value": "
\n 👉 Next steps: Review application gateways which include backend pools with no targets.\n
" + } + } + } + }, + "expression": { + "and": [ + { + "equals": [ + "@length(body('Get_idle_App_Gateways')['data'])", + 0 + ] + } + ] + }, + "type": "If" + }, + "Condition_Disk_next_steps": { + "actions": {}, + "runAfter": { + "End_to_Disk_HTML": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "Append_to_Disk_table": { + "type": "AppendToStringVariable", + "inputs": { + "name": "IdleDiskHTML", + "value": "
\n 👉 Next steps: Review managed disks that are not attached to any virtual machine.\n
" + } + } + } + }, + "expression": { + "and": [ + { + "equals": [ + "@length(body('Get_idle_Disks')['data'])", + 0 + ] + } + ] + }, + "type": "If" + }, + "Condition_IP_Address_next_steps": { + "actions": {}, + "runAfter": { + "End_to_IP_Address_HTML": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "Append_to_IP_Address_table": { + "type": "AppendToStringVariable", + "inputs": { + "name": "IPAddressHTML", + "value": "
\n 👉 Next steps: Review unattached public IP addresses, as they may represent additional cost.\n
" + } + } + } + }, + "expression": { + "and": [ + { + "equals": [ + "@length(body('Get_idle_IP_addresses')['data'])", + 0 + ] + } + ] + }, + "type": "If" + }, + "Condition_Load_Balancer_next_steps": { + "actions": {}, + "runAfter": { + "End_to_Load_Balancer_HTML": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "Append_to_Load_Balancer_table": { + "type": "AppendToStringVariable", + "inputs": { + "name": "LoadBalancerHTML", + "value": "
\n 👉 Next steps: Review load balancers with no backend pools and remove them if not needed.\n
" + } + } + } + }, + "expression": { + "and": [ + { + "equals": [ + "@length(body('Get_idle_Load_Balancers')['data'])", + 0 + ] + } + ] + }, + "type": "If" + }, + "Condition_Disk_Snapshot_next_steps": { + "actions": {}, + "runAfter": { + "End_to_Disk_Snapshot_HTML": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "Append_to_Disk_Snapshot_table": { + "type": "AppendToStringVariable", + "inputs": { + "name": "DiskSnapshotHTML", + "value": "
\n 👉 Next steps: Review managed disk snapshots that are older than 30 days.\n
" + } + } + } + }, + "expression": { + "and": [ + { + "equals": [ + "@length(body('Get_Disk_Snapshots_older_than_30_days')['data'])", + 0 + ] + } + ] + }, + "type": "If" + }, + "Condition_stopped_VM_next_steps": { + "actions": {}, + "runAfter": { + "End_to_Stopped_VM_HTML": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "Append_to_Stopped_VM_table": { + "type": "AppendToStringVariable", + "inputs": { + "name": "StoppedVMHTML", + "value": "
\n 👉 Next steps: Review stopped VMs, as they are billed for the allocated cost.\n
" + } + } + } + }, + "expression": { + "and": [ + { + "equals": [ + "@length(body('Get_Stopped_VMs')['data'])", + 0 + ] + } + ] + }, + "type": "If" + }, + "EmailNotice": { + "runAfter": { + "Condition_App_Gateway_next_steps": [ + "Succeeded" + ], + "Condition_Disk_next_steps": [ + "Succeeded" + ], + "Condition_IP_Address_next_steps": [ + "Succeeded" + ], + "Condition_Load_Balancer_next_steps": [ + "Succeeded" + ], + "Condition_Disk_Snapshot_next_steps": [ + "Succeeded" + ], + "Condition_stopped_VM_next_steps": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "EmailNotice", + "type": "string", + "value": "

The following resources have been identified through FinOps alerts. Please take a moment to review and proceed with the next steps outlined below:



" + } + ] + } + } + }, + "outputs": {} + }, + "parameters": { + "$connections": { + "value": { + "office365": { + "connectionId": "[resourceId('Microsoft.Web/connections', variables('connectionName'))]", + "connectionName": "[variables('connectionName')]", + "id": "[resourceId('Microsoft.Web/locations/managedApis', parameters('location'), 'office365')]" + } + } + } + } + }, + "location": "[parameters('location')]", + "tags": { + "displayName": "FinOpsalert" + }, + "dependsOn": [ + "[resourceId('Microsoft.Web/connections', variables('connectionName'))]" + ] + }, + { + "type": "Microsoft.Web/connections", + "apiVersion": "2016-06-01", + "name": "[variables('connectionName')]", + "location": "[parameters('location')]", + "properties": { + "api": { + "id": "[resourceId('Microsoft.Web/locations/managedApis', parameters('location'), 'office365')]" + }, + "displayName": "[variables('displayName')]" + } + } + ], + "outputs": { + "logicAppName": { + "type": "string", + "value": "[parameters('appName')]" + }, + "connectionName": { + "type": "string", + "value": "[variables('connectionName')]" + }, + "actionsCount": { + "type": "int", + "value": "[length(variables('actionKeys'))]" + }, + "logicAppResourceId": { + "type": "string", + "value": "[resourceId('Microsoft.Logic/workflows', parameters('appName'))]" + }, + "logicAppPrincipalId": { + "type": "string", + "value": "[reference(resourceId('Microsoft.Logic/workflows', parameters('appName')), '2019-05-01', 'full').identity.principalId]" + }, + "logicAppTriggerUrl": { + "type": "string", + "value": "[format('https://{0}.logic.azure.com:443/workflows/{1}/triggers/Recurrence/run?api-version=2016-10-01', parameters('appName'), parameters('appName'))]" + } + } + } + } + } + ] +} \ No newline at end of file diff --git a/docs/deploy/finops-alerts-0.9.ui.json b/docs/deploy/finops-alerts-0.9.ui.json new file mode 100644 index 000000000..7f519e102 --- /dev/null +++ b/docs/deploy/finops-alerts-0.9.ui.json @@ -0,0 +1,72 @@ +{ + "$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 alerts is an Azure Logic Apps-based automated detection system that identifies idle resources across selected subscriptions on a configurable schedule and sends notifications to admins to investigate and take action", + "location": { + "label": "Location", + "toolTip": "Location of logic app must be in the same region as the resource group.", + "resourceTypes": [ + "Microsoft.Logic/workflows", + "Microsoft.Web/connections" + ] + } + } + }, + "basics": [ + { + "name": "finopsalertsName", + "type": "Microsoft.Common.TextBox", + "label": "FinOps alerts name", + "defaultValue": "finops-alerts", + "toolTip": "Name of the FinOps alerts instance.", + "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": "connectionsName", + "type": "Microsoft.Common.TextBox", + "label": "Connection name", + "defaultValue": "finops-alerts-connection", + "toolTip": "Name of the API connection.", + "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 + } + ], + "steps": [{ + "name": "tags", + "label": "Tags", + "elements": [ + { + "name": "tagsByResource", + "label": "Tags", + "toolTip": "Tags to apply to resources.", + "type": "Microsoft.Common.TagsByResource", + "resources": [ + "Microsoft.Logic/workflows", + "Microsoft.Web/connections" + ] + } + ] + }], + "outputs": { + "hubName": "[basics('finopsalertsName')]", + "location": "[location()]", + "tagsByResource": "[steps('tags').tagsByResource]"}, + "resourceTypes": [ + "Microsoft.Logic/workflows", + "Microsoft.Web/connections" + ] + } +} diff --git a/docs/deploy/finops-alerts-latest.json b/docs/deploy/finops-alerts-latest.json new file mode 100644 index 000000000..a018121ed --- /dev/null +++ b/docs/deploy/finops-alerts-latest.json @@ -0,0 +1,4354 @@ +{ + "$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": "12802525131637595090" + } + }, + "parameters": { + "location": { + "type": "string", + "defaultValue": "[resourceGroup().location]", + "metadata": { + "description": "Azure location where resources should be created" + } + }, + "appName": { + "type": "string", + "defaultValue": "finops-alerts", + "minLength": 1, + "maxLength": 20, + "metadata": { + "description": "Name of the logic app" + } + }, + "recurrenceFrequency": { + "type": "string", + "defaultValue": "Week", + "metadata": { + "description": "Specifies the frequency of the recurrence trigger. Possible values are Week, Day or Hour." + } + }, + "recurrenceInterval": { + "type": "int", + "defaultValue": 1, + "metadata": { + "description": "Specifies the interval for the recurrence trigger. Represents the number of frequency units." + } + }, + "recurrenceType": { + "type": "string", + "defaultValue": "Recurrence", + "metadata": { + "description": "Specifies the type of the trigger. For this example, it is a recurrence trigger." + } + }, + "logicAppSubscriptionId": { + "type": "string", + "defaultValue": "", + "metadata": { + "description": "The Id of the subscription to deploy the logic app in." + } + }, + "resourceGroupName": { + "type": "string", + "defaultValue": "", + "metadata": { + "description": "The name of the resource group." + } + } + }, + "resources": [ + { + "type": "Microsoft.Resources/deployments", + "apiVersion": "2022-09-01", + "name": "[format('logicApp-{0}', uniqueString(deployment().name, parameters('location'), parameters('appName')))]", + "subscriptionId": "[parameters('logicAppSubscriptionId')]", + "resourceGroup": "[parameters('resourceGroupName')]", + "properties": { + "expressionEvaluationOptions": { + "scope": "inner" + }, + "mode": "Incremental", + "parameters": { + "appName": { + "value": "[parameters('appName')]" + }, + "location": { + "value": "[parameters('location')]" + }, + "recurrenceFrequency": { + "value": "[parameters('recurrenceFrequency')]" + }, + "recurrenceInterval": { + "value": "[parameters('recurrenceInterval')]" + }, + "recurrenceType": { + "value": "[parameters('recurrenceType')]" + } + }, + "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": "10854342800064359748" + } + }, + "parameters": { + "location": { + "type": "string", + "defaultValue": "[resourceGroup().location]", + "metadata": { + "description": "Azure location where resources should be created" + } + }, + "appName": { + "type": "string", + "defaultValue": "finops-alerts", + "minLength": 1, + "maxLength": 20, + "metadata": { + "description": "Name of the logic app" + } + }, + "recurrenceFrequency": { + "type": "string", + "defaultValue": "Week", + "metadata": { + "description": "Specifies the frequency of the recurrence trigger. Possible values are Week, Day or Hour." + } + }, + "recurrenceInterval": { + "type": "int", + "defaultValue": 1, + "metadata": { + "description": "Specifies the interval for the recurrence trigger. Represents the number of frequency units." + } + }, + "recurrenceType": { + "type": "string", + "defaultValue": "Recurrence", + "metadata": { + "description": "Specifies the type of the trigger. For this example, it is a recurrence trigger." + } + } + }, + "variables": { + "safeSuffix": "[replace(replace(toLower(parameters('appName')), '-', ''), '_', '')]", + "connectionName": "[format('{0}-connection', variables('safeSuffix'))]", + "displayName": "[format('{0}-connection', variables('safeSuffix'))]", + "actionKeys": [ + "Send_an_email_V2" + ] + }, + "resources": [ + { + "type": "Microsoft.Logic/workflows", + "apiVersion": "2019-05-01", + "name": "[parameters('appName')]", + "identity": { + "type": "SystemAssigned" + }, + "properties": { + "state": "Enabled", + "definition": { + "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "$connections": { + "defaultValue": {}, + "type": "Object" + } + }, + "triggers": { + "Recurrence": { + "recurrence": { + "frequency": "[parameters('recurrenceFrequency')]", + "interval": "[parameters('recurrenceInterval')]" + }, + "evaluatedRecurrence": { + "frequency": "[parameters('recurrenceFrequency')]", + "interval": "[parameters('recurrenceInterval')]" + }, + "type": "[parameters('recurrenceType')]" + } + }, + "actions": { + "For_each_App_GW": { + "foreach": "@body('Parse_idle_App_Gateways')?['data']", + "actions": { + "Set_App_Gateways_URI": { + "type": "SetVariable", + "inputs": { + "name": "AppGwURI", + "value": "@{concat('https://portal.azure.com/#@',items('For_each_App_GW')?['tenantId'],'/resource',items('For_each_App_GW')?['id'])}" + } + }, + "Compose_AppGw": { + "runAfter": { + "Set_App_Gateways_URI": [ + "Succeeded" + ] + }, + "type": "Compose", + "inputs": "@variables('AppGwURI')" + }, + "Append_to_App_Gateway_HTML": { + "runAfter": { + "Compose_AppGw": [ + "Succeeded" + ] + }, + "type": "AppendToStringVariable", + "inputs": { + "name": "AppGatewayHTML", + "value": " \n \n \n \n " + } + } + }, + "runAfter": { + "Condition_App_Gateway": [ + "Succeeded" + ] + }, + "type": "Foreach", + "runtimeConfiguration": { + "concurrency": { + "repetitions": 1 + } + } + }, + "For_each_Disk": { + "foreach": "@body('Parse_Idle_disks')?['data']", + "actions": { + "Set_Disk_URI": { + "type": "SetVariable", + "inputs": { + "name": "DiskURI", + "value": "@{concat('https://portal.azure.com/#@',items('For_each_Disk')?['tenantId'],'/resource',items('For_each_Disk')?['DiskId'])}" + } + }, + "Compose_Disk": { + "runAfter": { + "Set_Disk_URI": [ + "Succeeded" + ] + }, + "type": "Compose", + "inputs": "@variables('DiskURI')" + }, + "Append_to_Idle_Disk_HTML": { + "runAfter": { + "Compose_Disk": [ + "Succeeded" + ] + }, + "type": "AppendToStringVariable", + "inputs": { + "name": "IdleDiskHTML", + "value": " \n \n \n \n " + } + } + }, + "runAfter": { + "Condition_Disk": [ + "Succeeded" + ] + }, + "type": "Foreach", + "runtimeConfiguration": { + "concurrency": { + "repetitions": 1 + } + } + }, + "For_each_IP_address": { + "foreach": "@body('Parse_Idle_IP_addresses')?['data']", + "actions": { + "Set_IP_address_URI": { + "type": "SetVariable", + "inputs": { + "name": "IPAddressURI", + "value": "@{concat('https://portal.azure.com/#@',items('For_each_IP_address')?['tenantId'],'/resource',items('For_each_IP_address')?['PublicIpId'])}" + } + }, + "Compose_IP": { + "runAfter": { + "Set_IP_address_URI": [ + "Succeeded" + ] + }, + "type": "Compose", + "inputs": "@variables('IPAddressURI')" + }, + "Append_to_IP_Address_HTML": { + "runAfter": { + "Compose_IP": [ + "Succeeded" + ] + }, + "type": "AppendToStringVariable", + "inputs": { + "name": "IPAddressHTML", + "value": " \n \n \n \n " + } + } + }, + "runAfter": { + "Condition_IP_Address": [ + "Succeeded" + ] + }, + "type": "Foreach", + "runtimeConfiguration": { + "concurrency": { + "repetitions": 1 + } + } + }, + "For_each_Load_Balancer": { + "foreach": "@body('Parse_Idle_Load_Balancers')?['data']", + "actions": { + "Set_Load_Balancer_URI": { + "type": "SetVariable", + "inputs": { + "name": "LoadBalancerURI", + "value": "@{concat('https://portal.azure.com/#@',items('For_each_Load_Balancer')?['tenantId'],'/resource',items('For_each_Load_Balancer')?['loadBalancerid'])}" + } + }, + "Compose_LB": { + "runAfter": { + "Set_Load_Balancer_URI": [ + "Succeeded" + ] + }, + "type": "Compose", + "inputs": "@variables('LoadBalancerURI')" + }, + "Append_to_Load_Balancer_HTML": { + "runAfter": { + "Compose_LB": [ + "Succeeded" + ] + }, + "type": "AppendToStringVariable", + "inputs": { + "name": "LoadBalancerHTML", + "value": " \n \n \n \n " + } + } + }, + "runAfter": { + "Condition_Load_Balancer": [ + "Succeeded" + ] + }, + "type": "Foreach", + "runtimeConfiguration": { + "concurrency": { + "repetitions": 1 + } + } + }, + "For_each_Snapshot": { + "foreach": "@body('Parse_Snapshots')?['data']", + "actions": { + "Set_Snapshot_URI": { + "type": "SetVariable", + "inputs": { + "name": "SnapshotURI", + "value": "@{concat('https://portal.azure.com/#@',items('For_each_Snapshot')?['tenantId'],'/resource',items('For_each_Snapshot')?['SnapshotId'])}\n" + } + }, + "Compose_Snapshot": { + "runAfter": { + "Set_Snapshot_URI": [ + "Succeeded" + ] + }, + "type": "Compose", + "inputs": "@variables('SnapshotURI')" + }, + "Append_to_Disk_Snapshot_HTML": { + "runAfter": { + "Compose_Snapshot": [ + "Succeeded" + ] + }, + "type": "AppendToStringVariable", + "inputs": { + "name": "DiskSnapshotHTML", + "value": " \n \n \n \n " + } + } + }, + "runAfter": { + "Condition_Disk_Snapshots": [ + "Succeeded" + ] + }, + "type": "Foreach", + "runtimeConfiguration": { + "concurrency": { + "repetitions": 1 + } + } + }, + "For_each_Stopped_VM": { + "foreach": "@body('Parse_stopped_VMs')?['data']", + "actions": { + "Set_Stopped_VM_URI": { + "type": "SetVariable", + "inputs": { + "name": "StoppedVMURI", + "value": "@{concat('https://portal.azure.com/#@',items('For_each_Stopped_VM')?['tenantId'],'/resource',items('For_each_Stopped_VM')?['VirtualMachineId'])}" + } + }, + "Compose_VM": { + "runAfter": { + "Set_Stopped_VM_URI": [ + "Succeeded" + ] + }, + "type": "Compose", + "inputs": "@variables('StoppedVMURI')" + }, + "Append_to_Stopped_VM_HTML": { + "runAfter": { + "Compose_VM": [ + "Succeeded" + ] + }, + "type": "AppendToStringVariable", + "inputs": { + "name": "StoppedVMHTML", + "value": " \n \n \n \n " + } + } + }, + "runAfter": { + "Condition_Stopped_VMs": [ + "Succeeded" + ] + }, + "type": "Foreach", + "runtimeConfiguration": { + "concurrency": { + "repetitions": 1 + } + } + }, + "Get_idle_App_Gateways": { + "runAfter": { + "Initialize_resources_table": [ + "Succeeded" + ] + }, + "type": "Http", + "inputs": { + "uri": "[format('{0}//providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01', environment().resourceManager)]", + "method": "POST", + "body": { + "query": "@{variables('resourcesTable')} | where type =~ 'Microsoft.Network/applicationGateways'| extend backendPoolsCount = array_length(properties.backendAddressPools),SKUName= tostring(properties.sku.name), SKUTier=tostring(properties.sku.tier),SKUCapacity=properties.sku.capacity,backendPools=properties.backendAddressPools| join (resources | where type =~ 'Microsoft.Network/applicationGateways'| mvexpand backendPools = properties.backendAddressPools| extend backendIPCount =array_length(backendPools.properties.backendIPConfigurations) | extend backendAddressesCount = array_length(backendPools.properties.backendAddresses) | extend backendPoolName=backendPools.properties.backendAddressPools.name | summarize backendIPCount = sum(backendIPCount) ,backendAddressesCount=sum(backendAddressesCount) by id) on id| project-away id1| where (backendIPCount == 0 or isempty(backendIPCount)) and (backendAddressesCount==0 or isempty(backendAddressesCount))| order by id asc | join kind=leftouter ( resourcecontainers | where type == 'microsoft.resources/subscriptions' | project subscriptionId, subscriptionName = name) on subscriptionId", + "scope": "Tenant" + }, + "authentication": { + "type": "ManagedServiceIdentity" + } + } + }, + "Get_idle_Disks": { + "runAfter": { + "Initialize_resources_table": [ + "Succeeded" + ] + }, + "type": "Http", + "inputs": { + "uri": "[format('{0}//providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01', environment().resourceManager)]", + "method": "POST", + "body": { + "query": "@{variables('resourcesTable')} | where type =~ 'microsoft.compute/disks' and managedBy == ''| extend diskState = tostring(properties.diskState) | where (managedBy == '' and diskState != 'ActiveSAS') or (diskState == 'Unattached' and diskState != 'ActiveSAS') | extend DiskId = id, DiskName = name, SKUName = sku.name, SKUTier = sku.tier, DiskSizeGB = tostring(properties.diskSizeGB), Location = location, TimeCreated = tostring(properties.timeCreated) | order by DiskId asc | project DiskId, DiskName, DiskSizeGB, SKUName, SKUTier, resourceGroup, Location, TimeCreated, subscriptionId | join kind=leftouter (resourcecontainers | where type == 'microsoft.resources/subscriptions' | project subscriptionId, subscriptionName = name) on subscriptionId", + "scope": "Tenant" + }, + "authentication": { + "type": "ManagedServiceIdentity" + } + } + }, + "Get_idle_IP_addresses": { + "runAfter": { + "Initialize_resources_table": [ + "Succeeded" + ] + }, + "type": "Http", + "inputs": { + "uri": "[format('{0}//providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01', environment().resourceManager)]", + "method": "POST", + "body": { + "query": "@{variables('resourcesTable')} | where type =~ 'Microsoft.Network/publicIPAddresses' and isempty(properties.ipConfiguration) and isempty(properties.natGateway) | extend PublicIpId=id, IPName=name, AllocationMethod=tostring(properties.publicIPAllocationMethod), SKUName=sku.name, Location=location | project PublicIpId,IPName, SKUName, resourceGroup, Location, AllocationMethod, subscriptionId, tenantId | union ( Resources | where type =~ 'microsoft.network/networkinterfaces' and isempty(properties.virtualMachine) and isnull(properties.privateEndpoint) and isnotempty(properties.ipConfigurations) | extend IPconfig = properties.ipConfigurations | mv-expand IPconfig | extend PublicIpId= tostring(IPconfig.properties.publicIPAddress.id) | project PublicIpId | join ( resources | where type =~ 'Microsoft.Network/publicIPAddresses' | extend PublicIpId=id, IPName=name, AllocationMethod=tostring(properties.publicIPAllocationMethod), SKUName=sku.name, resourceGroup, Location=location ) on PublicIpId | project PublicIpId,IPName, SKUName, resourceGroup, Location, AllocationMethod, subscriptionId, tenantId) | join kind=leftouter ( resourcecontainers | where type == 'microsoft.resources/subscriptions' | project subscriptionId, subscriptionName = name) on subscriptionId", + "scope": "Tenant" + }, + "authentication": { + "type": "ManagedServiceIdentity" + } + } + }, + "Get_idle_Load_Balancers": { + "runAfter": { + "Initialize_resources_table": [ + "Succeeded" + ] + }, + "type": "Http", + "inputs": { + "uri": "[format('{0}//providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01', environment().resourceManager)]", + "method": "POST", + "body": { + "query": "@{variables('resourcesTable')} | where type =~ 'microsoft.network/loadbalancers' and tostring(properties.backendAddressPools) == '[]' | extend loadBalancerId=id,LBRG=resourceGroup, LoadBalancerName=name, SKU=sku, LBLocation=location | order by loadBalancerId asc | project loadBalancerId,LoadBalancerName, SKU.name,SKU.tier, LBLocation, resourceGroup, subscriptionId | join kind=leftouter ( resourcecontainers | where type == 'microsoft.resources/subscriptions' | project subscriptionId, subscriptionName = name) on subscriptionId", + "scope": "Tenant" + }, + "authentication": { + "type": "ManagedServiceIdentity" + } + } + }, + "Get_Disk_Snapshots_older_than_30_days": { + "runAfter": { + "Initialize_resources_table": [ + "Succeeded" + ] + }, + "type": "Http", + "inputs": { + "uri": "[format('{0}//providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01', environment().resourceManager)]", + "method": "POST", + "body": { + "query": "@{variables('resourcesTable')} | where type =~ 'microsoft.compute/snapshots' | extend TimeCreated = properties.timeCreated | where TimeCreated < ago(30d) | extend SnapshotId=id, Snapshotname=name | order by id asc | project id, SnapshotId, Snapshotname, resourceGroup, location, TimeCreated ,subscriptionId | join kind=leftouter ( resourcecontainers | where type == 'microsoft.resources/subscriptions' | project subscriptionId, subscriptionName = name) on subscriptionId", + "scope": "Tenant" + }, + "authentication": { + "type": "ManagedServiceIdentity" + } + } + }, + "Get_Stopped_VMs": { + "runAfter": { + "Initialize_resources_table": [ + "Succeeded" + ] + }, + "type": "Http", + "inputs": { + "uri": "[format('{0}//providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01', environment().resourceManager)]", + "method": "POST", + "body": { + "query": "@{variables('resourcesTable')} | where type =~ 'microsoft.compute/virtualmachines' and tostring(properties.extended.instanceView.powerState.displayStatus) != 'VM deallocated' and tostring(properties.extended.instanceView.powerState.displayStatus) != 'VM running'| extend VMname=name, PowerState=tostring(properties.extended.instanceView.powerState.displayStatus), VMLocation=location, VirtualMachineId=id| order by VirtualMachineId asc| project VirtualMachineId,VMname, PowerState, VMLocation, resourceGroup, subscriptionId | join kind=leftouter ( resourcecontainers | where type == 'microsoft.resources/subscriptions' | project subscriptionId, subscriptionName = name) on subscriptionId", + "scope": "Tenant" + }, + "authentication": { + "type": "ManagedServiceIdentity" + } + } + }, + "Initialize_App_Gateways_URI": { + "runAfter": { + "Parse_idle_App_Gateways": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "AppGwURI", + "type": "string" + } + ] + } + }, + "Initialize_Disk_URI": { + "runAfter": { + "Parse_Idle_disks": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "DiskURI", + "type": "string" + } + ] + } + }, + "Initialize_IP_addresses_URI": { + "runAfter": { + "Parse_Idle_IP_addresses": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "IPAddressURI", + "type": "string" + } + ] + } + }, + "Initialize_Load_Balancer_URI": { + "runAfter": { + "Parse_Idle_Load_Balancers": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "LoadBalancerURI", + "type": "string" + } + ] + } + }, + "Initialize_Snapshot_URI": { + "runAfter": { + "Parse_Snapshots": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "SnapshotURI", + "type": "string" + } + ] + } + }, + "Initialize_Stopped_VM_URI": { + "runAfter": { + "Parse_stopped_VMs": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "StoppedVMURI", + "type": "string" + } + ] + } + }, + "Excluded_subscriptions": { + "runAfter": { + "Included_subscriptions": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "ExcludedSubscriptions", + "type": "array", + "value": [] + } + ] + } + }, + "Parse_idle_App_Gateways": { + "runAfter": { + "Get_idle_App_Gateways": [ + "Succeeded" + ] + }, + "type": "ParseJson", + "inputs": { + "content": "@body('Get_idle_App_Gateways')", + "schema": { + "properties": { + "properties": { + "properties": { + "count": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "data": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "SKUCapacity": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "SKUName": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "SKUTier": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "backendAddressesCount": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "backendIPCount": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "backendPools": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "etag": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "properties": { + "properties": { + "properties": { + "properties": { + "backendAddresses": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "provisioningState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "requestRoutingRules": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "backendPoolsCount": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "extendedLocation": { + "properties": {}, + "type": "object" + }, + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "identity": { + "properties": {}, + "type": "object" + }, + "kind": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "location": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "managedBy": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "plan": { + "properties": {}, + "type": "object" + }, + "properties": { + "properties": { + "properties": { + "properties": { + "authenticationCertificates": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "backendAddressPools": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "etag": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "properties": { + "properties": { + "properties": { + "properties": { + "backendAddresses": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "provisioningState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "requestRoutingRules": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "backendHttpSettingsCollection": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "etag": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "properties": { + "properties": { + "properties": { + "properties": { + "cookieBasedAffinity": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "pickHostNameFromBackendAddress": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "port": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "protocol": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "provisioningState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "requestRoutingRules": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "requestTimeout": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "enableHttp2": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "frontendIPConfigurations": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "etag": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "properties": { + "properties": { + "properties": { + "properties": { + "httpListeners": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "privateIPAllocationMethod": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "provisioningState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "subnet": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "frontendPorts": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "etag": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "properties": { + "properties": { + "properties": { + "properties": { + "httpListeners": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "port": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "provisioningState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "gatewayIPConfigurations": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "etag": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "properties": { + "properties": { + "properties": { + "properties": { + "provisioningState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "subnet": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "httpListeners": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "etag": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "properties": { + "properties": { + "properties": { + "properties": { + "frontendIPConfiguration": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "frontendPort": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "protocol": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "provisioningState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "requestRoutingRules": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "requireServerNameIndication": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "operationalState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "probes": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "provisioningState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "redirectConfigurations": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "requestRoutingRules": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "etag": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "properties": { + "properties": { + "properties": { + "properties": { + "backendAddressPool": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "backendHttpSettings": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "httpListener": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "provisioningState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "ruleType": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "resourceGuid": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "rewriteRuleSets": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "sku": { + "properties": { + "properties": { + "properties": { + "capacity": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "tier": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "sslCertificates": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "urlPathMaps": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "resourceGroup": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "sku": { + "properties": {}, + "type": "object" + }, + "subscriptionId": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "tags": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "tenantId": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "zones": { + "properties": {}, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "facets": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "resultTruncated": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "totalRecords": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "Parse_Idle_IP_addresses": { + "runAfter": { + "Get_idle_IP_addresses": [ + "Succeeded" + ] + }, + "type": "ParseJson", + "inputs": { + "content": "@body('Get_idle_IP_addresses')", + "schema": { + "properties": { + "properties": { + "properties": { + "count": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "data": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "extendedLocation": { + "properties": {}, + "type": "object" + }, + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "identity": { + "properties": {}, + "type": "object" + }, + "kind": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "location": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "managedBy": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "plan": { + "properties": {}, + "type": "object" + }, + "properties": { + "properties": { + "properties": { + "properties": { + "idleTimeoutInMinutes": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "ipTags": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "provisioningState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "publicIPAddressVersion": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "publicIPAllocationMethod": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "resourceGuid": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "resourceGroup": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "sku": { + "properties": { + "properties": { + "properties": { + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "tier": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "subscriptionId": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "tags": { + "properties": {}, + "type": "object" + }, + "tenantId": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "zones": { + "properties": {}, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "facets": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "resultTruncated": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "totalRecords": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "Parse_Idle_Load_Balancers": { + "runAfter": { + "Get_idle_Load_Balancers": [ + "Succeeded" + ] + }, + "type": "ParseJson", + "inputs": { + "content": "@body('Get_idle_Load_Balancers')", + "schema": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "childErrors": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "errorType": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "lineNumber": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "linePosition": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "message": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "path": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "schemaId": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "value": { + "properties": { + "items": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "Parse_Idle_disks": { + "runAfter": { + "Get_idle_Disks": [ + "Succeeded" + ] + }, + "type": "ParseJson", + "inputs": { + "content": "@body('Get_idle_Disks')", + "schema": { + "properties": { + "properties": { + "properties": { + "count": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "data": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "extendedLocation": { + "properties": {}, + "type": "object" + }, + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "identity": { + "properties": {}, + "type": "object" + }, + "kind": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "location": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "managedBy": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "plan": { + "properties": {}, + "type": "object" + }, + "properties": { + "properties": { + "properties": { + "properties": { + "creationData": { + "properties": { + "properties": { + "properties": { + "createOption": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "imageReference": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "diskIOPSReadWrite": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "diskMBpsReadWrite": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "diskSizeBytes": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "diskSizeGB": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "diskState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "encryption": { + "properties": { + "properties": { + "properties": { + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "hyperVGeneration": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "networkAccessPolicy": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "osType": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "provisioningState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "publicNetworkAccess": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "supportedCapabilities": { + "properties": { + "properties": { + "properties": { + "architecture": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "timeCreated": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "uniqueId": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "resourceGroup": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "sku": { + "properties": { + "properties": { + "properties": { + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "tier": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "subscriptionId": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "tags": { + "properties": {}, + "type": "object" + }, + "tenantId": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "zones": { + "properties": {}, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "facets": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "resultTruncated": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "totalRecords": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "Parse_Snapshots": { + "runAfter": { + "Get_Disk_Snapshots_older_than_30_days": [ + "Succeeded" + ] + }, + "type": "ParseJson", + "inputs": { + "content": "@body('Get_Disk_Snapshots_older_than_30_days')", + "schema": { + "properties": { + "query": { + "type": "string" + }, + "subscriptions": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "Parse_stopped_VMs": { + "runAfter": { + "Get_Stopped_VMs": [ + "Succeeded" + ] + }, + "type": "ParseJson", + "inputs": { + "content": "@body('Get_Stopped_VMs')", + "schema": { + "properties": { + "properties": { + "properties": { + "count": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "data": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "extendedLocation": { + "properties": {}, + "type": "object" + }, + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "identity": { + "properties": {}, + "type": "object" + }, + "kind": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "location": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "managedBy": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "plan": { + "properties": {}, + "type": "object" + }, + "properties": { + "properties": { + "properties": { + "properties": { + "diagnosticsProfile": { + "properties": { + "properties": { + "properties": { + "bootDiagnostics": { + "properties": { + "properties": { + "properties": { + "enabled": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "extended": { + "properties": { + "properties": { + "properties": { + "instanceView": { + "properties": { + "properties": { + "properties": { + "hyperVGeneration": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "powerState": { + "properties": { + "properties": { + "properties": { + "code": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "displayStatus": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "level": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "hardwareProfile": { + "properties": { + "properties": { + "properties": { + "vmSize": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "networkProfile": { + "properties": { + "properties": { + "properties": { + "networkInterfaces": { + "properties": { + "items": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "osProfile": { + "properties": { + "properties": { + "properties": { + "adminUsername": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "allowExtensionOperations": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "computerName": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "requireGuestProvisionSignal": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "secrets": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "windowsConfiguration": { + "properties": { + "properties": { + "properties": { + "enableAutomaticUpdates": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "patchSettings": { + "properties": { + "properties": { + "properties": { + "assessmentMode": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "enableHotpatching": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "patchMode": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "provisionVMAgent": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "provisioningState": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "storageProfile": { + "properties": { + "properties": { + "properties": { + "dataDisks": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "imageReference": { + "properties": { + "properties": { + "properties": { + "exactVersion": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "offer": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "publisher": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "sku": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "version": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "osDisk": { + "properties": { + "properties": { + "properties": { + "caching": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "createOption": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "deleteOption": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "diskSizeGB": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "managedDisk": { + "properties": { + "properties": { + "properties": { + "id": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "storageAccountType": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "osType": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "vmId": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "resourceGroup": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "sku": { + "properties": {}, + "type": "object" + }, + "subscriptionId": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "tags": { + "properties": {}, + "type": "object" + }, + "tenantId": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "zones": { + "properties": {}, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "facets": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "resultTruncated": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "totalRecords": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "Set_alert_recipient": { + "runAfter": { + "Set_email_subject": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "SendAlertTo", + "type": "string" + } + ] + } + }, + "Initialize_App_Gateway_HTML": { + "runAfter": { + "Initialize_App_Gateways_URI": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "AppGatewayHTML", + "type": "string", + "value": "

Idle Application Gateway Details

" + } + ] + } + }, + "Initialize_Disk_HTML": { + "runAfter": { + "Initialize_Disk_URI": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "IdleDiskHTML", + "type": "string", + "value": "

Idle Disk Details

" + } + ] + } + }, + "Send_an_email_(V2)": { + "runAfter": { + "EmailNotice": [ + "Succeeded" + ] + }, + "type": "ApiConnection", + "inputs": { + "host": { + "connection": { + "name": "@parameters('$connections')['office365']['connectionId']" + } + }, + "method": "post", + "body": { + "To": "@variables('SendAlertTo')", + "Subject": "@variables('SetEmailSubject')", + "Body": "

@{variables('EmailNotice')}

@{variables('AppGatewayHTML')}
@{variables('IdleDiskHTML')}
@{variables('IPAddressHTML')}
@{variables('LoadBalancerHTML')}
@{variables('DiskSnapshotHTML')}
@{variables('StoppedVMHTML')}


📧 About FinOps alerts

FinOps alerts keep you informed about cost optimization opportunities within in your cloud environment. They are fully configurable and can be tailored to run on your desired schedule, ensuring that you receive timely notifications on the scenarios most important to your organization. FinOps alerts are part of the FinOps toolkit, an open-source collection of FinOps solutions that help you manage and optimize your cost, usage, and carbon.

Provide feedback

Give feedback
Vote on or suggest ideas


" + }, + "path": "/v2/Mail" + } + }, + "Initialize_IP_Address_HTML": { + "runAfter": { + "Initialize_IP_addresses_URI": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "IPAddressHTML", + "type": "string", + "value": "

Idle IP Address Details

" + } + ] + } + }, + "Initialize_Load_Balancer_HTML": { + "runAfter": { + "Initialize_Load_Balancer_URI": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "LoadBalancerHTML", + "type": "string", + "value": "

Idle Load Balancer Details

" + } + ] + } + }, + "Initialize_Disk_Snapshot_HTML": { + "runAfter": { + "Initialize_Snapshot_URI": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "DiskSnapshotHTML", + "type": "string", + "value": "

Old Disk Snapshot Details

" + } + ] + } + }, + "Initialize_Stopped_VM_HTML": { + "runAfter": { + "Initialize_Stopped_VM_URI": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "StoppedVMHTML", + "type": "string", + "value": "

Stopped VM Details

" + } + ] + } + }, + "End_to_App_Gateway_HTML": { + "runAfter": { + "For_each_App_GW": [ + "Succeeded" + ] + }, + "type": "AppendToStringVariable", + "inputs": { + "name": "AppGatewayHTML", + "value": "
NameResource GroupSubscription
@{items('For_each_App_GW')?['name']}@{items('For_each_App_GW')?['resourceGroup']}@{items('For_each_App_GW')?['subscriptionName']}
@{items('For_each_Disk')?['DiskName']}@{items('For_each_Disk')?['resourceGroup']}@{items('For_each_Disk')?['subscriptionName']}
@{items('For_each_IP_address')?['IPName']}@{items('For_each_IP_address')?['resourceGroup']}@{items('For_each_IP_address')?['subscriptionName']}
@{items('For_each_Load_Balancer')?['LoadBalancerName']}@{items('For_each_Load_Balancer')?['resourceGroup']}@{items('For_each_Load_Balancer')?['subscriptionName']}
@{items('For_each_Snapshot')?['Snapshotname']}@{items('For_each_Snapshot')?['resourceGroup']}@{items('For_each_Snapshot')?['subscriptionName']}
@{items('For_each_Stopped_VM')?['VMname']}@{items('For_each_Stopped_VM')?['resourceGroup']}@{items('For_each_Stopped_VM')?['subscriptionName']}
" + } + }, + "End_to_IP_Address_HTML": { + "runAfter": { + "For_each_IP_address": [ + "Succeeded" + ] + }, + "type": "AppendToStringVariable", + "inputs": { + "name": "IPAddressHTML", + "value": " " + } + }, + "End_to_Disk_HTML": { + "runAfter": { + "For_each_Disk": [ + "Succeeded" + ] + }, + "type": "AppendToStringVariable", + "inputs": { + "name": "IdleDiskHTML", + "value": "" + } + }, + "End_to_Load_Balancer_HTML": { + "runAfter": { + "For_each_Load_Balancer": [ + "Succeeded" + ] + }, + "type": "AppendToStringVariable", + "inputs": { + "name": "LoadBalancerHTML", + "value": "" + } + }, + "End_to_Disk_Snapshot_HTML": { + "runAfter": { + "For_each_Snapshot": [ + "Succeeded" + ] + }, + "type": "AppendToStringVariable", + "inputs": { + "name": "DiskSnapshotHTML", + "value": "" + } + }, + "End_to_Stopped_VM_HTML": { + "runAfter": { + "For_each_Stopped_VM": [ + "Succeeded" + ] + }, + "type": "AppendToStringVariable", + "inputs": { + "name": "StoppedVMHTML", + "value": "" + } + }, + "Set_email_subject": { + "runAfter": {}, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "SetEmailSubject", + "type": "string" + } + ] + } + }, + "Included_subscriptions": { + "runAfter": { + "Set_alert_recipient": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "IncludedSubscriptions", + "type": "array", + "value": [] + } + ] + } + }, + "Initialize_resources_table": { + "runAfter": { + "Excluded_subscriptions": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "resourcesTable", + "type": "string", + "value": "resources@{if(equals(length(variables('IncludedSubscriptions')), 0), '', concat('| where subscriptionId in (\"', replace(replace(string(variables('IncludedSubscriptions')), '[', ''), ']', ''), '\")'))}@{if(equals(length(variables('ExcludedSubscriptions')), 0), '', concat('| where subscriptionId !in (\"', replace(replace(string(variables('ExcludedSubscriptions')), '[', ''), ']', ''), '\")'))}" + } + ] + } + }, + "Condition_App_Gateway": { + "actions": { + "Append_no_App_Gateway_results_text": { + "type": "AppendToStringVariable", + "inputs": { + "name": "AppGatewayHTML", + "value": "No resources are idle." + } + } + }, + "runAfter": { + "Initialize_App_Gateway_HTML": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "Append_App_Gateway_results_in_table": { + "type": "AppendToStringVariable", + "inputs": { + "name": "AppGatewayHTML", + "value": "\n \n \n \n \n \n" + } + } + } + }, + "expression": { + "and": [ + { + "equals": [ + "@length(body('Get_idle_App_Gateways')['data'])", + 0 + ] + } + ] + }, + "type": "If" + }, + "Condition_Stopped_VMs": { + "actions": { + "Append_no_Stopped_VM_results_text_": { + "type": "AppendToStringVariable", + "inputs": { + "name": "StoppedVMHTML", + "value": "No resources are idle." + } + } + }, + "runAfter": { + "Initialize_Stopped_VM_HTML": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "Append_Stopped_VM_result_in_table_": { + "type": "AppendToStringVariable", + "inputs": { + "name": "StoppedVMHTML", + "value": "
NameResource GroupSubscription
\n \n \n \n \n \n" + } + } + } + }, + "expression": { + "and": [ + { + "equals": [ + "@length(body('Get_Stopped_VMs')['data'])", + 0 + ] + } + ] + }, + "type": "If" + }, + "Condition_Disk": { + "actions": { + "Append_no_Disk_results_text": { + "type": "AppendToStringVariable", + "inputs": { + "name": "IdleDiskHTML", + "value": "No resources are idle." + } + } + }, + "runAfter": { + "Initialize_Disk_HTML": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "Append_Disk_results_in_table": { + "type": "AppendToStringVariable", + "inputs": { + "name": "IdleDiskHTML", + "value": "
NameResource GroupSubscription
\n \n \n \n \n \n" + } + } + } + }, + "expression": { + "and": [ + { + "equals": [ + "@length(body('Get_idle_Disks')['data'])", + 0 + ] + } + ] + }, + "type": "If" + }, + "Condition_IP_Address": { + "actions": { + "Append_no_IP_Address_results_text": { + "type": "AppendToStringVariable", + "inputs": { + "name": "IPAddressHTML", + "value": "No resources are idle." + } + } + }, + "runAfter": { + "Initialize_IP_Address_HTML": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "Append_IP_Address_results_in_table": { + "type": "AppendToStringVariable", + "inputs": { + "name": "IPAddressHTML", + "value": "
NameResource GroupSubscription
\n \n \n \n \n \n" + } + } + } + }, + "expression": { + "and": [ + { + "equals": [ + "@length(body('Get_idle_IP_addresses')['data'])", + 0 + ] + } + ] + }, + "type": "If" + }, + "Condition_Load_Balancer": { + "actions": { + "Append_no_Load_Balancer_results_text": { + "type": "AppendToStringVariable", + "inputs": { + "name": "LoadBalancerHTML", + "value": "No resources are idle." + } + } + }, + "runAfter": { + "Initialize_Load_Balancer_HTML": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "Append_Load_Balancer_results_in_table": { + "type": "AppendToStringVariable", + "inputs": { + "name": "LoadBalancerHTML", + "value": "
NameResource GroupSubscription
\n \n \n \n \n \n" + } + } + } + }, + "expression": { + "and": [ + { + "equals": [ + "@length(body('Get_idle_Load_Balancers')['data'])", + 0 + ] + } + ] + }, + "type": "If" + }, + "Condition_Disk_Snapshots": { + "actions": { + "Append_no_Disk_Snapshot_results_text": { + "type": "AppendToStringVariable", + "inputs": { + "name": "DiskSnapshotHTML", + "value": "No resources are idle." + } + } + }, + "runAfter": { + "Initialize_Disk_Snapshot_HTML": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "Append_Disk_Snapshot_results_in_table": { + "type": "AppendToStringVariable", + "inputs": { + "name": "DiskSnapshotHTML", + "value": "
NameResource GroupSubscription
\n \n \n \n \n \n" + } + } + } + }, + "expression": { + "and": [ + { + "equals": [ + "@length(body('Get_Disk_Snapshots_older_than_30_days')['data'])", + 0 + ] + } + ] + }, + "type": "If" + }, + "Condition_App_Gateway_next_steps": { + "actions": {}, + "runAfter": { + "End_to_App_Gateway_HTML": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "Append_to_App_Gateway_table": { + "type": "AppendToStringVariable", + "inputs": { + "name": "AppGatewayHTML", + "value": "
\n 👉 Next steps: Review application gateways which include backend pools with no targets.\n
" + } + } + } + }, + "expression": { + "and": [ + { + "equals": [ + "@length(body('Get_idle_App_Gateways')['data'])", + 0 + ] + } + ] + }, + "type": "If" + }, + "Condition_Disk_next_steps": { + "actions": {}, + "runAfter": { + "End_to_Disk_HTML": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "Append_to_Disk_table": { + "type": "AppendToStringVariable", + "inputs": { + "name": "IdleDiskHTML", + "value": "
\n 👉 Next steps: Review managed disks that are not attached to any virtual machine.\n
" + } + } + } + }, + "expression": { + "and": [ + { + "equals": [ + "@length(body('Get_idle_Disks')['data'])", + 0 + ] + } + ] + }, + "type": "If" + }, + "Condition_IP_Address_next_steps": { + "actions": {}, + "runAfter": { + "End_to_IP_Address_HTML": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "Append_to_IP_Address_table": { + "type": "AppendToStringVariable", + "inputs": { + "name": "IPAddressHTML", + "value": "
\n 👉 Next steps: Review unattached public IP addresses, as they may represent additional cost.\n
" + } + } + } + }, + "expression": { + "and": [ + { + "equals": [ + "@length(body('Get_idle_IP_addresses')['data'])", + 0 + ] + } + ] + }, + "type": "If" + }, + "Condition_Load_Balancer_next_steps": { + "actions": {}, + "runAfter": { + "End_to_Load_Balancer_HTML": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "Append_to_Load_Balancer_table": { + "type": "AppendToStringVariable", + "inputs": { + "name": "LoadBalancerHTML", + "value": "
\n 👉 Next steps: Review load balancers with no backend pools and remove them if not needed.\n
" + } + } + } + }, + "expression": { + "and": [ + { + "equals": [ + "@length(body('Get_idle_Load_Balancers')['data'])", + 0 + ] + } + ] + }, + "type": "If" + }, + "Condition_Disk_Snapshot_next_steps": { + "actions": {}, + "runAfter": { + "End_to_Disk_Snapshot_HTML": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "Append_to_Disk_Snapshot_table": { + "type": "AppendToStringVariable", + "inputs": { + "name": "DiskSnapshotHTML", + "value": "
\n 👉 Next steps: Review managed disk snapshots that are older than 30 days.\n
" + } + } + } + }, + "expression": { + "and": [ + { + "equals": [ + "@length(body('Get_Disk_Snapshots_older_than_30_days')['data'])", + 0 + ] + } + ] + }, + "type": "If" + }, + "Condition_stopped_VM_next_steps": { + "actions": {}, + "runAfter": { + "End_to_Stopped_VM_HTML": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "Append_to_Stopped_VM_table": { + "type": "AppendToStringVariable", + "inputs": { + "name": "StoppedVMHTML", + "value": "
\n 👉 Next steps: Review stopped VMs, as they are billed for the allocated cost.\n
" + } + } + } + }, + "expression": { + "and": [ + { + "equals": [ + "@length(body('Get_Stopped_VMs')['data'])", + 0 + ] + } + ] + }, + "type": "If" + }, + "EmailNotice": { + "runAfter": { + "Condition_App_Gateway_next_steps": [ + "Succeeded" + ], + "Condition_Disk_next_steps": [ + "Succeeded" + ], + "Condition_IP_Address_next_steps": [ + "Succeeded" + ], + "Condition_Load_Balancer_next_steps": [ + "Succeeded" + ], + "Condition_Disk_Snapshot_next_steps": [ + "Succeeded" + ], + "Condition_stopped_VM_next_steps": [ + "Succeeded" + ] + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "EmailNotice", + "type": "string", + "value": "

The following resources have been identified through FinOps alerts. Please take a moment to review and proceed with the next steps outlined below:



" + } + ] + } + } + }, + "outputs": {} + }, + "parameters": { + "$connections": { + "value": { + "office365": { + "connectionId": "[resourceId('Microsoft.Web/connections', variables('connectionName'))]", + "connectionName": "[variables('connectionName')]", + "id": "[resourceId('Microsoft.Web/locations/managedApis', parameters('location'), 'office365')]" + } + } + } + } + }, + "location": "[parameters('location')]", + "tags": { + "displayName": "FinOpsalert" + }, + "dependsOn": [ + "[resourceId('Microsoft.Web/connections', variables('connectionName'))]" + ] + }, + { + "type": "Microsoft.Web/connections", + "apiVersion": "2016-06-01", + "name": "[variables('connectionName')]", + "location": "[parameters('location')]", + "properties": { + "api": { + "id": "[resourceId('Microsoft.Web/locations/managedApis', parameters('location'), 'office365')]" + }, + "displayName": "[variables('displayName')]" + } + } + ], + "outputs": { + "logicAppName": { + "type": "string", + "value": "[parameters('appName')]" + }, + "connectionName": { + "type": "string", + "value": "[variables('connectionName')]" + }, + "actionsCount": { + "type": "int", + "value": "[length(variables('actionKeys'))]" + }, + "logicAppResourceId": { + "type": "string", + "value": "[resourceId('Microsoft.Logic/workflows', parameters('appName'))]" + }, + "logicAppPrincipalId": { + "type": "string", + "value": "[reference(resourceId('Microsoft.Logic/workflows', parameters('appName')), '2019-05-01', 'full').identity.principalId]" + }, + "logicAppTriggerUrl": { + "type": "string", + "value": "[format('https://{0}.logic.azure.com:443/workflows/{1}/triggers/Recurrence/run?api-version=2016-10-01', parameters('appName'), parameters('appName'))]" + } + } + } + } + } + ] +} \ No newline at end of file diff --git a/docs/deploy/finops-alerts-latest.ui.json b/docs/deploy/finops-alerts-latest.ui.json new file mode 100644 index 000000000..7f519e102 --- /dev/null +++ b/docs/deploy/finops-alerts-latest.ui.json @@ -0,0 +1,72 @@ +{ + "$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 alerts is an Azure Logic Apps-based automated detection system that identifies idle resources across selected subscriptions on a configurable schedule and sends notifications to admins to investigate and take action", + "location": { + "label": "Location", + "toolTip": "Location of logic app must be in the same region as the resource group.", + "resourceTypes": [ + "Microsoft.Logic/workflows", + "Microsoft.Web/connections" + ] + } + } + }, + "basics": [ + { + "name": "finopsalertsName", + "type": "Microsoft.Common.TextBox", + "label": "FinOps alerts name", + "defaultValue": "finops-alerts", + "toolTip": "Name of the FinOps alerts instance.", + "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": "connectionsName", + "type": "Microsoft.Common.TextBox", + "label": "Connection name", + "defaultValue": "finops-alerts-connection", + "toolTip": "Name of the API connection.", + "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 + } + ], + "steps": [{ + "name": "tags", + "label": "Tags", + "elements": [ + { + "name": "tagsByResource", + "label": "Tags", + "toolTip": "Tags to apply to resources.", + "type": "Microsoft.Common.TagsByResource", + "resources": [ + "Microsoft.Logic/workflows", + "Microsoft.Web/connections" + ] + } + ] + }], + "outputs": { + "hubName": "[basics('finopsalertsName')]", + "location": "[location()]", + "tagsByResource": "[steps('tags').tagsByResource]"}, + "resourceTypes": [ + "Microsoft.Logic/workflows", + "Microsoft.Web/connections" + ] + } +} diff --git a/docs/deploy/finops-hub-0.9.json b/docs/deploy/finops-hub-0.9.json new file mode 100644 index 000000000..aa3459cd2 --- /dev/null +++ b/docs/deploy/finops-hub-0.9.json @@ -0,0 +1,8509 @@ +{ + "$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": "6665130305505342036" + } + }, + "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#", + "contentVersion": "1.0.0.0", + "metadata": { + "_generator": { + "name": "bicep", + "version": "0.33.93.31351", + "templateHash": "9032999427449681343" + } + }, + "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." + } + }, + "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.9", + "finOpsToolkitVersion": "0.9", + "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": "[join(createArray('00f120b5-2007-6120-0000-40b000000000_', if(or(empty(parameters('remoteHubStorageUri')), empty(parameters('remoteHubStorageKey'))), '', 'R'), substring(split(parameters('storageSku'), '_')[1], 0, 1), if(empty(parameters('dataExplorerName')), '', format('X{0}', substring(parameters('dataExplorerSku'), 0, 1))), if(empty(parameters('dataExplorerName')), '', replace(replace(replace(replace(replace(replace(replace(replace(split(split(parameters('dataExplorerSku'), 'Standard_')[1], '_')[0], 'C', ''), 'D', ''), 'E', ''), 'L', ''), 'a', ''), 'd', ''), 'i', ''), 's', '')), if(or(empty(parameters('dataExplorerName')), equals(parameters('dataExplorerCapacity'), 1)), '', format('x{0}', parameters('dataExplorerCapacity'))), if(parameters('enablePublicAccess'), '', 'P')), '')]" + }, + "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('$fxv#0')]" + } + }, + "resources": [] + } + } + }, + { + "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" + } + } + }, + { + "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]" + } + } + } + } + }, + { + "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(resourceId('Microsoft.Resources/deployments', 'vnet'), '2022-09-01').outputs.vNetId.value))]", + "privateEndpointSubnetId": "[if(parameters('enablePublicAccess'), createObject('value', ''), createObject('value', reference(resourceId('Microsoft.Resources/deployments', 'vnet'), '2022-09-01').outputs.finopsHubSubnetId.value))]", + "scriptSubnetId": "[if(parameters('enablePublicAccess'), createObject('value', ''), createObject('value', reference(resourceId('Microsoft.Resources/deployments', 'vnet'), '2022-09-01').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": "4390747260549399432" + } + }, + "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.9", + "$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\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 # Force string array to object array with unique values\r\n if ($json.scopes)\r\n {\r\n Write-Output \" Converting string array to object array...\"\r\n $scopeArray = @()\r\n $json.scopes | Where-Object $validateScopes | ForEach-Object { $scopeArray += $_ } | Select-Object -Unique\r\n $json.scopes = @() + $scopeArray\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 default retention\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\n$json.scopes = (@() + $json.scopes + $newScopes) | Select-Object -Unique\r\nif ($null -eq $json.scopes) { $json.scopes = @() }\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\": \"CostWithNoReservedInstancesJson\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"First UsageDate\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"FirstUsageDate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Instance Flexibility Ratio\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"InstanceFlexibilityRatio\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Instance Flexibility Group\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"InstanceFlexibilityGroup\" }\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\": \"String\" },\r\n \"sink\": { \"name\": \"NetSavingsJson\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Normalized Size\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"NormalizedSize\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Recommended Quantity\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"RecommendedQuantity\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Recommended Quantity Normalized\", \"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\": \"SkuName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SkuName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Sku Properties\", \"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\": \"Total Cost With ReservedInstances\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"TotalCostWithReservedInstancesJson\" }\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", + "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": [ + "[resourceId('Microsoft.Resources/deployments', 'vnet')]" + ] + }, + { + "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')]" + }, + "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(resourceId('Microsoft.Resources/deployments', 'vnet'), '2022-09-01').outputs.vNetId.value))]", + "privateEndpointSubnetId": "[if(parameters('enablePublicAccess'), createObject('value', ''), createObject('value', reference(resourceId('Microsoft.Resources/deployments', 'vnet'), '2022-09-01').outputs.dataExplorerSubnetId.value))]", + "enablePublicAccess": { + "value": "[parameters('enablePublicAccess')]" + }, + "storageAccountName": { + "value": "[reference(resourceId('Microsoft.Resources/deployments', 'storage'), '2022-09-01').outputs.name.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": "15559057084461761997" + } + }, + "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." + } + }, + "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.9", + "$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 Arize AI 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 ,\"commvault.contentstore/cloudaccounts\": { \"SingularDisplayName\": \"Commvault Cloud Account\" }\r\n ,\"commvault.contentstore/cloudaccounts/plans\": { \"SingularDisplayName\": \"Commvault.ContentStore cloud accounts plan\" }\r\n ,\"commvault.contentstore/cloudaccounts/protectiongroups\": { \"SingularDisplayName\": \"Commvault.ContentStore cloud accounts protection group\" }\r\n ,\"commvault.contentstore/cloudaccounts/protectiongroups/protecteditems\": { \"SingularDisplayName\": \"Commvault.ContentStore cloud accounts protection groups protected item\" }\r\n ,\"commvault.contentstore/cloudaccounts/storages\": { \"SingularDisplayName\": \"Commvault.ContentStore cloud accounts storage\" }\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/assessments\": { \"SingularDisplayName\": \"Microsoft.Advisor assessment\" }\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.advisor/resiliencyreviews\": { \"SingularDisplayName\": \"Microsoft.Advisor resiliency review\" }\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\": \"Agriculture data solutions\" }\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 Local 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/snapshots/controls\": { \"SingularDisplayName\": \"Microsoft.AppComplianceAutomation reports snapshots control\" }\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/appprotectmanagedrulesetmanifests\": { \"SingularDisplayName\": \"Microsoft.AppSecurity app protect managed rule set manifest\" }\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/mysqlserver\": { \"SingularDisplayName\": \"MySql Server - Azure Arc\" }\r\n ,\"microsoft.azurearcdata/postgresinstances\": { \"SingularDisplayName\": \"PostgreSQL server ? Azure Arc\" }\r\n ,\"microsoft.azurearcdata/postgressqlserver\": { \"SingularDisplayName\": \"PostgresSql 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/addressrecords\": { \"SingularDisplayName\": \"Microsoft.AzureCis address record\" }\r\n ,\"microsoft.azurecis/autopilotenvironments\": { \"SingularDisplayName\": \"Microsoft.AzureCis autopilot environment\" }\r\n ,\"microsoft.azurecis/autopilotmachinefunctions\": { \"SingularDisplayName\": \"Microsoft.AzureCis autopilot machine function\" }\r\n ,\"microsoft.azurecis/autopilotsoftwareloadbalancevirtualips\": { \"SingularDisplayName\": \"Microsoft.AzureCis auto pilot software load balance virtual IP\" }\r\n ,\"microsoft.azurecis/canonicalnamerecords\": { \"SingularDisplayName\": \"Microsoft.AzureCis canonical name record\" }\r\n ,\"microsoft.azurecis/dsmsallowlists\": { \"SingularDisplayName\": \"Microsoft.AzureCis ds msallowlist\" }\r\n ,\"microsoft.azurecis/dsmscertificates\": { \"SingularDisplayName\": \"Microsoft.AzureCis dsms certificate\" }\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/pointerrecords\": { \"SingularDisplayName\": \"Microsoft.AzureCis pointer record\" }\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.azurecis/servicerecords\": { \"SingularDisplayName\": \"Microsoft.AzureCis service record\" }\r\n ,\"microsoft.azurecis/sharedconfigvalues\": { \"SingularDisplayName\": \"Microsoft.AzureCis shared config value\" }\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 Local\" }\r\n ,\"microsoft.azurestackhci/devicepools\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI device pool\" }\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/edgemachines\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI edge machine\" }\r\n ,\"microsoft.azurestackhci/edgemachines/jobs\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI edge machines job\" }\r\n ,\"microsoft.azurestackhci/edgenodepools\": { \"SingularDisplayName\": \"Azure Stack\" }\r\n ,\"microsoft.azurestackhci/galleryimages\": { \"SingularDisplayName\": \"Azure Local Gallery image\" }\r\n ,\"microsoft.azurestackhci/logicalnetworks\": { \"SingularDisplayName\": \"Azure Local Logical network\" }\r\n ,\"microsoft.azurestackhci/marketplacegalleryimages\": { \"SingularDisplayName\": \"Azure Local Marketplace Gallery image\" }\r\n ,\"microsoft.azurestackhci/networkinterfaces\": { \"SingularDisplayName\": \"Azure Local VM Network Interface\" }\r\n ,\"microsoft.azurestackhci/networksecuritygroups\": { \"SingularDisplayName\": \"Azure Local Network Security Group\" }\r\n ,\"microsoft.azurestackhci/networksecuritygroups/securityrules\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI network security groups security rule\" }\r\n ,\"microsoft.azurestackhci/storagecontainers\": { \"SingularDisplayName\": \"Azure Local 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 Local 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.baremetal/peeringsettings\": { \"SingularDisplayName\": \"Microsoft.BareMetal peering setting\" }\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/migrations\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts migration\" }\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/edgeactions\": { \"SingularDisplayName\": \"Edge Action\" }\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.changesafety/changestates\": { \"SingularDisplayName\": \"Microsoft.ChangeSafety change state\" }\r\n ,\"microsoft.changesafety/changestates/stageprogressions\": { \"SingularDisplayName\": \"Microsoft.ChangeSafety change states stage progression\" }\r\n ,\"microsoft.changesafety/stagemaps\": { \"SingularDisplayName\": \"Microsoft.ChangeSafety stage map\" }\r\n ,\"microsoft.changesafety/validations\": { \"SingularDisplayName\": \"Microsoft.ChangeSafety validation\" }\r\n ,\"microsoft.changesafety/validators\": { \"SingularDisplayName\": \"Microsoft.ChangeSafety validator\" }\r\n ,\"microsoft.changesafety/validators/versions\": { \"SingularDisplayName\": \"Microsoft.ChangeSafety validators version\" }\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/collaborations\": { \"SingularDisplayName\": \"Microsoft.CleanRoom collaboration\" }\r\n ,\"microsoft.cleanroom/collaborations/contracts\": { \"SingularDisplayName\": \"Microsoft.CleanRoom collaborations contract\" }\r\n ,\"microsoft.cleanroom/consortiums\": { \"SingularDisplayName\": \"Microsoft.CleanRoom consortium\" }\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 })[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.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/computefleetscalesets\": { \"SingularDisplayName\": \"Virtual machine scale set\" }\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 ,\"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.compute/virtualmachinescalesetscomputehub\": { \"SingularDisplayName\": \"Virtual machine scale set\" }\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\": \"Automatic 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\" }\r\n ,\"microsoft.connectedcache/enterprisecustomers\": { \"SingularDisplayName\": \"Connected Cache for Enterprise & Education\" }\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.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/dashboards\": { \"SingularDisplayName\": \"Azure Monitor Dashboard\" }\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/privateendpointconnectionproxies\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults private endpoint connection proxy\" }\r\n ,\"microsoft.datareplication/replicationvaults/privateendpointconnections\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults private endpoint connection\" }\r\n ,\"microsoft.datareplication/replicationvaults/privatelinkresources\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults private link resource\" }\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/templates\": { \"SingularDisplayName\": \"Microsoft.DevHub template\" }\r\n ,\"microsoft.devhub/templates/versions\": { \"SingularDisplayName\": \"Microsoft.DevHub templates version\" }\r\n ,\"microsoft.devhub/workflows\": { \"SingularDisplayName\": \"Microsoft.DevHub workflow\" }\r\n ,\"microsoft.deviceonboarding/discoveryservices\": { \"SingularDisplayName\": \"Microsoft.DeviceOnboarding discovery service\" }\r\n ,\"microsoft.deviceonboarding/discoveryservices/ownershipvoucherpublickeys\": { \"SingularDisplayName\": \"Microsoft.DeviceOnboarding discovery services ownership voucher public key\" }\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\": \"IoT 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/namespaces\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry namespace\" }\r\n ,\"microsoft.deviceregistry/namespaces/assetendpointprofiles\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry namespaces asset endpoint profile\" }\r\n ,\"microsoft.deviceregistry/namespaces/assets\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry namespaces asset\" }\r\n ,\"microsoft.deviceregistry/namespaces/devices\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry namespaces device\" }\r\n ,\"microsoft.deviceregistry/namespaces/discoveredassetendpointprofiles\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry namespaces discovered asset endpoint profile\" }\r\n ,\"microsoft.deviceregistry/namespaces/discoveredassets\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry namespaces discovered asset\" }\r\n ,\"microsoft.deviceregistry/schemaregistries\": { \"SingularDisplayName\": \"IoT 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/fleets\": { \"SingularDisplayName\": \"Cosmos DB Fleet\" }\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\": \"Microsoft.DurableTask namespace\" }\r\n ,\"microsoft.durabletask/namespaces/taskhubs\": { \"SingularDisplayName\": \"Task Hub\" }\r\n ,\"microsoft.durabletask/schedulers\": { \"SingularDisplayName\": \"Durable Task Scheduler\" }\r\n ,\"microsoft.durabletask/schedulers/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/disconnectedoperations\": { \"SingularDisplayName\": \"Azure Local - disconnected operations\" }\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 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\": \"Entra 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/clusterpools/clusters/instanceviews\": { \"SingularDisplayName\": \"Microsoft.HDInsight clusterpools clusters instance view\" }\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.healthplatform/accounts\": { \"SingularDisplayName\": \"Microsoft.HealthPlatform account\" }\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 })[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.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\": \"Firmware analysis 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.iotoperationsmq/mq/broker\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsMQ mq broker\" }\r\n ,\"microsoft.iotoperationsmq/mq/broker/authentication\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsMQ mq broker authentication\" }\r\n ,\"microsoft.iotoperationsmq/mq/broker/authorization\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsMQ mq broker authorization\" }\r\n ,\"microsoft.iotoperationsmq/mq/broker/listener\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsMQ mq broker listener\" }\r\n ,\"microsoft.iotoperationsmq/mq/datalakeconnector\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsMQ mq data lake connector\" }\r\n ,\"microsoft.iotoperationsmq/mq/datalakeconnector/topicmap\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsMQ mq data lake connector topic map\" }\r\n ,\"microsoft.iotoperationsmq/mq/diagnosticservice\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsMQ mq diagnostic service\" }\r\n ,\"microsoft.iotoperationsmq/mq/kafkaconnector\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsMQ mq kafka connector\" }\r\n ,\"microsoft.iotoperationsmq/mq/kafkaconnector/topicmap\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsMQ mq kafka connector topic map\" }\r\n ,\"microsoft.iotoperationsmq/mq/mqttbridgeconnector\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsMQ mq mqtt bridge connector\" }\r\n ,\"microsoft.iotoperationsmq/mq/mqttbridgeconnector/topicmap\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsMQ mq mqtt bridge connector topic map\" }\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 - 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 ,\"microsoft.labservices/labaccounts/labs\": { \"SingularDisplayName\": \"Lab\" }\r\n ,\"microsoft.labservices/labplans\": { \"SingularDisplayName\": \"Lab plan\" }\r\n ,\"microsoft.labservices/labs\": { \"SingularDisplayName\": \"Lab\" }\r\n ,\"microsoft.liftrpilot/organizations\": { \"SingularDisplayName\": \"Microsoft.LiftrPilot organization\" }\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/health\": { \"SingularDisplayName\": \"Microsoft.Logic integration service environments health\" }\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\": \"Machine Learning Studio (classic) web service\" }\r\n ,\"microsoft.machinelearning/workspaces\": { \"SingularDisplayName\": \"Machine Learning Studio (classic) 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 Foundry\" }\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/maintenanceconfigurationsbladeresource\": { \"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/networkmonitors\": { \"SingularDisplayName\": \"Microsoft.ManagedNetworkFabric network monitor\" }\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\": \"Factory Operations Agent in Azure AI Foundry\" }\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/accountfilters\": { \"SingularDisplayName\": \"Microsoft.Media media services account filter\" }\r\n ,\"microsoft.media/mediaservices/assets\": { \"SingularDisplayName\": \"Microsoft.Media media services asset\" }\r\n ,\"microsoft.media/mediaservices/assets/assetfilters\": { \"SingularDisplayName\": \"Microsoft.Media media services assets asset filter\" }\r\n ,\"microsoft.media/mediaservices/assets/tracks\": { \"SingularDisplayName\": \"Microsoft.Media media services assets track\" }\r\n ,\"microsoft.media/mediaservices/assets/tracks/operationresults\": { \"SingularDisplayName\": \"Microsoft.Media media services assets tracks operation result\" }\r\n ,\"microsoft.media/mediaservices/assets/tracks/operationstatuses\": { \"SingularDisplayName\": \"Microsoft.Media media services assets tracks operation statuse\" }\r\n ,\"microsoft.media/mediaservices/contentkeypolicies\": { \"SingularDisplayName\": \"Microsoft.Media media services content key policy\" }\r\n ,\"microsoft.media/mediaservices/liveevents\": { \"SingularDisplayName\": \"Live event\" }\r\n ,\"microsoft.media/mediaservices/liveevents/liveoutputs\": { \"SingularDisplayName\": \"Microsoft.Media mediaservices live events live output\" }\r\n ,\"microsoft.media/mediaservices/privateendpointconnections\": { \"SingularDisplayName\": \"Microsoft.Media mediaservices private endpoint connection\" }\r\n ,\"microsoft.media/mediaservices/privatelinkresources\": { \"SingularDisplayName\": \"Microsoft.Media mediaservices private link resource\" }\r\n ,\"microsoft.media/mediaservices/streamingendpoints\": { \"SingularDisplayName\": \"Streaming Endpoint\" }\r\n ,\"microsoft.media/mediaservices/streaminglocators\": { \"SingularDisplayName\": \"Microsoft.Media media services streaming locator\" }\r\n ,\"microsoft.media/mediaservices/streamingpolicies\": { \"SingularDisplayName\": \"Microsoft.Media media services streaming policy\" }\r\n ,\"microsoft.media/mediaservices/transforms\": { \"SingularDisplayName\": \"Microsoft.Media media services transform\" }\r\n ,\"microsoft.media/mediaservices/transforms/jobs\": { \"SingularDisplayName\": \"Microsoft.Media media services transforms job\" }\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/approvals\": { \"SingularDisplayName\": \"Approval\" }\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/agents\": { \"SingularDisplayName\": \"Microsoft.MySQLDiscovery my sqlsites agent\" }\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 Profile\" }\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\": \"VPN Gateway (Point to Site)\" }\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 (Site to Site)\" }\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/kubernetesclusters/features\": { \"SingularDisplayName\": \"Kubernetes Cluster Feature (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.onlineexperimentation/workspaces\": { \"SingularDisplayName\": \"Online Experimentation Workspace\" }\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 })[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.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.portalservices/settings\": { \"SingularDisplayName\": \"Microsoft.PortalServices setting\" }\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.proposal/proposals\": { \"SingularDisplayName\": \"Microsoft.Proposal proposal\" }\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.recoveryservicesbvtd/vaults\": { \"SingularDisplayName\": \"Recovery Services BVTD\" }\r\n ,\"microsoft.recoveryservicesbvtd2/vaults\": { \"SingularDisplayName\": \"Recovery Services BVTD2\" }\r\n ,\"microsoft.recoveryservicesintd/vaults\": { \"SingularDisplayName\": \"Recovery Services INTD\" }\r\n ,\"microsoft.recoveryservicesintd2/vaults\": { \"SingularDisplayName\": \"Recovery Services INTD2\" }\r\n ,\"microsoft.redhatopenshift/openshiftclusters\": { \"SingularDisplayName\": \"Azure Red Hat OpenShift cluster\" }\r\n ,\"microsoft.relationships/dependencyof\": { \"SingularDisplayName\": \"Dependency Relationship\" }\r\n ,\"microsoft.relationships/servicegroupmember\": { \"SingularDisplayName\": \"Service group member relationship\" }\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 ,\"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\": { \"SingularDisplayName\": \"Microsoft.SaaSHub cloud service\" }\r\n ,\"microsoft.saashub/cloudservices/hidden\": { \"SingularDisplayName\": \"Microsoft SaaS\" }\r\n ,\"microsoft.salescopilot/conversationintelligencerecordingaccounts\": { \"SingularDisplayName\": \"Microsoft.SalesCopilot conversation intelligence recording account\" }\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.storagediscovery/storagediscoveryworkspaces\": { \"SingularDisplayName\": \"Storage Discovery workspace\" }\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\": \"Project Sustainability Calculator\" }\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/diagnostics\": { \"SingularDisplayName\": \"Microsoft.ToolchainOrchestrator diagnostic\" }\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\": \"Windows Push Notification Service\" }\r\n ,\"microsoft.workloadmonitor/monitors\": { \"SingularDisplayName\": \"Microsoft.WorkloadMonitor monitor\" }\r\n ,\"microsoft.workloadmonitor/monitors/history\": { \"SingularDisplayName\": \"Microsoft.WorkloadMonitor monitors history\" }\r\n ,\"microsoft.workloads/configurationvalidationresults\": { \"SingularDisplayName\": \"Microsoft.Workloads configuration validation result\" }\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/instancegroupmonitors\": { \"SingularDisplayName\": \"Microsoft.Workloads instance group monitor\" }\r\n ,\"microsoft.workloads/instancehealthdefinitions\": { \"SingularDisplayName\": \"Microsoft.Workloads instance health definition\" }\r\n ,\"microsoft.workloads/instancehealthdefinitions/signaldefinitions\": { \"SingularDisplayName\": \"Microsoft.Workloads instance health definitions signal definition\" }\r\n ,\"microsoft.workloads/instancemonitors\": { \"SingularDisplayName\": \"Microsoft.Workloads instance monitor\" }\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 ,\"microsoft.workloads/virtualinstances\": { \"SingularDisplayName\": \"Microsoft.Workloads virtual instance\" }\r\n ,\"microsoft.workloads/virtualinstances/components\": { \"SingularDisplayName\": \"Microsoft.Workloads virtual instances component\" }\r\n ,\"microsoft.zerotrustsegmentation/segmentationmanagers\": { \"SingularDisplayName\": \"Segmentation Manager\" }\r\n ,\"mongodb.atlas/organizations\": { \"SingularDisplayName\": \"MongoDB Atlas Organization\" }\r\n ,\"neon.postgres/organizations\": { \"SingularDisplayName\": \"Neon Serverless Postgres Organization\" }\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/exadbvmclusters\": { \"SingularDisplayName\": \"Oracle Exascale VM Cluster\" }\r\n ,\"oracle.database/exascaledbstoragevaults\": { \"SingularDisplayName\": \"Oracle Exascale DB Storage Vault\" }\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 // TODO: Handle 0\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 (for example, \"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 = tolower(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(ListCost < ContractedCost, 'ListCostLessThanContractedCost,', ''),\r\n iff(ContractedCost < EffectiveCost, 'ContractedCostLessThanEffectiveCost,', ''),\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 = tolower(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 = tolower(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 // TODO: Save values before changing -- | extend x_ms_ContractedUnitPrice = ContractedUnitPrice, x_ms_ListUnitPrice = ListUnitPrice, x_ms_ListCost = ListCost, x_ms_ContractedCost = ContractedCost\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 ContractedCost = case(\r\n ContractedCost != 0 or EffectiveCost == 0, ContractedCost,\r\n ContractedUnitPrice == x_EffectiveUnitPrice, EffectiveCost, // Use EffectiveCost if both prices are the same to avoid rounding errors\r\n ContractedUnitPrice != 0, ContractedUnitPrice * PricingQuantity,\r\n ContractedCost == 0 and ContractedUnitPrice == 0, EffectiveCost, // Fall back to EffectiveCost when ContractedCost and ContractedUnitPrice are 0\r\n ContractedCost\r\n )\r\n | extend ListCost = case(\r\n ListCost != 0 or EffectiveCost == 0, ListCost,\r\n ListUnitPrice == ContractedUnitPrice, ContractedCost, // Use ContractedCost if both prices are the same to avoid rounding errors\r\n ListUnitPrice != 0, ListUnitPrice * PricingQuantity,\r\n ListCost == 0 and ListUnitPrice == 0, ContractedCost, // Fall back to ContractedCost when ListCost and ListUnitPrice are 0\r\n ListCost\r\n )\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 CommitmentDiscountType 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 = tolower(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 = tolower(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 CostWithNoReservedInstancesJson: string, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces and flag as JSON\r\n FirstUsageDate: datetime, // MS CM EA/MCA resv reco 2024-05-01 -- Renamed for MCA\r\n InstanceFlexibilityGroup: string, // MS CM EA/MCA resv reco 2024-05-01 -- Renamed for MCA\r\n InstanceFlexibilityRatio: decimal, // MS CM EA/MCA resv reco 2024-05-01 -- Renamed for MCA\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/MCA resv reco 2024-05-01 -- Renamed for MCA\r\n NetSavings: decimal, // MS CM EA resv reco 2024-05-01\r\n NetSavingsJson: string, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces and flag as JSON\r\n NormalizedSize: string, // MS CM EA/MCA resv reco 2024-05-01 -- Renamed for MCA\r\n RecommendedQuantity: decimal, // MS CM EA/MCA resv reco 2024-05-01 -- Renamed for MCA\r\n RecommendedQuantityNormalized: decimal, // MS CM EA/MCA resv reco 2024-05-01 -- Renamed for MCA\r\n ResourceType: string, // MS CM EA+MCA resv reco 2024-05-01\r\n Scope: string, // MS CM EA/MCA resv reco 2024-05-01 -- Renamed for MCA\r\n SKU: string, // MS CM EA resv reco 2024-05-01\r\n SkuName: string, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n SkuProperties: string, // MS CM EA/MCA resv reco 2024-05-01 -- Renamed for MCA\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 TotalCostWithReservedInstancesJson: string, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces and flag as JSON\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\": \"CostWithNoReservedInstancesJson\", \"Properties\": { \"Field\": \"CostWithNoReservedInstancesJson\" } },\r\n { \"Column\": \"FirstUsageDate\", \"Properties\": { \"Field\": \"FirstUsageDate\" } },\r\n { \"Column\": \"InstanceFlexibilityGroup\", \"Properties\": { \"Field\": \"InstanceFlexibilityGroup\" } },\r\n { \"Column\": \"InstanceFlexibilityRatio\", \"Properties\": { \"Field\": \"InstanceFlexibilityRatio\" } },\r\n { \"Column\": \"Location\", \"Properties\": { \"Field\": \"Location\" } },\r\n { \"Column\": \"LookBackPeriod\", \"Properties\": { \"Field\": \"LookBackPeriod\" } },\r\n { \"Column\": \"MeterId\", \"Properties\": { \"Field\": \"MeterId\" } },\r\n { \"Column\": \"NetSavings\", \"Properties\": { \"Field\": \"NetSavings\" } },\r\n { \"Column\": \"NetSavingsJson\", \"Properties\": { \"Field\": \"NetSavingsJson\" } },\r\n { \"Column\": \"NormalizedSize\", \"Properties\": { \"Field\": \"NormalizedSize\" } },\r\n { \"Column\": \"RecommendedQuantity\", \"Properties\": { \"Field\": \"RecommendedQuantity\" } },\r\n { \"Column\": \"RecommendedQuantityNormalized\", \"Properties\": { \"Field\": \"RecommendedQuantityNormalized\" } },\r\n { \"Column\": \"ResourceType\", \"Properties\": { \"Field\": \"ResourceType\" } },\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\": \"SubscriptionId\", \"Properties\": { \"Field\": \"SubscriptionId\" } },\r\n { \"Column\": \"Term\", \"Properties\": { \"Field\": \"Term\" } },\r\n { \"Column\": \"TotalCostWithReservedInstances\", \"Properties\": { \"Field\": \"TotalCostWithReservedInstances\" } },\r\n { \"Column\": \"TotalCostWithReservedInstancesJson\", \"Properties\": { \"Field\": \"TotalCostWithReservedInstancesJson\" } },\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 | extend x_IngestionTime = ingestion_time()\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 // Convert JSON cost columns to decimal\r\n | extend CostWithNoReservedInstances = case(isnotempty(CostWithNoReservedInstances), CostWithNoReservedInstances, isnotempty(CostWithNoReservedInstancesJson), todecimal(extract(@'\"value\":([0-9\\.]+)', 1, CostWithNoReservedInstancesJson)), CostWithNoReservedInstances)\r\n | extend NetSavings = case(isnotempty(NetSavings), NetSavings, isnotempty(NetSavingsJson), todecimal(extract(@'\"value\":([0-9\\.]+)', 1, NetSavingsJson)), NetSavings)\r\n | extend TotalCostWithReservedInstances = case(isnotempty(TotalCostWithReservedInstances), TotalCostWithReservedInstances, isnotempty(TotalCostWithReservedInstancesJson), todecimal(extract(@'\"value\":([0-9\\.]+)', 1, TotalCostWithReservedInstancesJson)), TotalCostWithReservedInstances)\r\n //\r\n // Build recommendation details\r\n | lookup kind=leftouter (database('Ingestion').Regions | summarize RegionName = make_set(RegionName)[0] by Location = RegionId) 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 LookBackPeriod matches regex @'^[0-9]+$', strcat('P', LookBackPeriod, 'D'),\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 | extend x_RecommendationDate = FirstUsageDate + (toint(extract(@'^P([0-9]+)D$', 1, tostring(x_RecommendationDetails.LookbackPeriodDuration))) * 1d)\r\n | extend x_RecommendationDate = iff(x_RecommendationDate > now(), startofday(now()), x_RecommendationDate)\r\n | project\r\n ProviderName,\r\n SubAccountId = iff(isnotempty(SubscriptionId), strcat('/subscriptions/', SubscriptionId), ''),\r\n x_IngestionTime,\r\n x_EffectiveCostAfter = TotalCostWithReservedInstances,\r\n x_EffectiveCostBefore = CostWithNoReservedInstances,\r\n x_EffectiveCostSavings = NetSavings,\r\n x_RecommendationDate,\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 // TODO: Handle 0\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 (for example, \"Costs()\").\r\n// - Every supported version of FOCUS should have a corresponding function (for example, \"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": [ + { + "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": [ + "[resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), 'Ingestion')]" + ] + }, + { + "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": [ + "[resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), 'Ingestion')]" + ] + }, + { + "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": [ + "[resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), 'Ingestion')]" + ] + }, + { + "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": [ + "[resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), 'Ingestion')]" + ] + }, + { + "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": [ + "[resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), 'Ingestion')]", + "[resourceId('Microsoft.Kusto/clusters/databases/scripts', parameters('clusterName'), 'Ingestion', 'OpenDataFunctions_resource_type_1')]", + "[resourceId('Microsoft.Kusto/clusters/databases/scripts', parameters('clusterName'), 'Ingestion', 'OpenDataFunctions_resource_type_2')]", + "[resourceId('Microsoft.Kusto/clusters/databases/scripts', parameters('clusterName'), 'Ingestion', 'OpenDataFunctions_resource_type_3')]", + "[resourceId('Microsoft.Kusto/clusters/databases/scripts', parameters('clusterName'), 'Ingestion', 'OpenDataFunctions_resource_type_4')]" + ] + }, + { + "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": [ + "[resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), 'Ingestion')]", + "[resourceId('Microsoft.Kusto/clusters/databases/scripts', parameters('clusterName'), 'Ingestion', 'OpenDataFunctions')]" + ] + }, + { + "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(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')))]", + "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')]" + ] + }, + { + "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": [ + "[resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), 'Hub')]" + ] + }, + { + "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(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)]", + "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')]" + ] + }, + { + "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]", + "role": "AllDatabasesAdmin" + }, + "dependsOn": [ + "[resourceId('Microsoft.Kusto/clusters', parameters('clusterName'))]" + ] + }, + { + "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'))]" + ] + }, + { + "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')]" + ] + }, + { + "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": { + "enableStreamingIngest": true, + "enableAutoStop": false, + "publicNetworkAccess": "[if(parameters('enablePublicAccess'), 'Enabled', 'Disabled')]" + } + }, + { + "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]", + "principalType": "ServicePrincipal", + "roleDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'ba92f5b4-2d11-453d-a403-e96b0029c9fe')]" + }, + "dependsOn": [ + "[resourceId('Microsoft.Kusto/clusters', parameters('clusterName'))]" + ] + }, + { + "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": {} + }, + { + "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": [ + "[resourceId('Microsoft.Network/privateDnsZones', variables('dataExplorerPrivateDnsZoneName'))]" + ] + }, + { + "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": [ + "[resourceId('Microsoft.Kusto/clusters', parameters('clusterName'))]" + ] + }, + { + "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": [ + "[resourceId('Microsoft.Network/privateEndpoints', format('{0}-ep', parameters('clusterName')))]", + "[resourceId('Microsoft.Network/privateDnsZones', variables('dataExplorerPrivateDnsZoneName'))]" + ] + } + ], + "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(resourceId('Microsoft.Kusto/clusters', parameters('clusterName')), '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(resourceId('Microsoft.Kusto/clusters', parameters('clusterName')), '2023-08-15').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": [ + "[resourceId('Microsoft.DataFactory/factories', variables('dataFactoryName'))]", + "[resourceId('Microsoft.Resources/deployments', 'storage')]", + "[resourceId('Microsoft.Resources/deployments', 'vnet')]" + ] + }, + { + "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(resourceId('Microsoft.Resources/deployments', 'storage'), '2022-09-01').outputs.name.value]" + }, + "exportContainerName": { + "value": "[reference(resourceId('Microsoft.Resources/deployments', 'storage'), '2022-09-01').outputs.exportContainer.value]" + }, + "configContainerName": { + "value": "[reference(resourceId('Microsoft.Resources/deployments', 'storage'), '2022-09-01').outputs.configContainer.value]" + }, + "ingestionContainerName": { + "value": "[reference(resourceId('Microsoft.Resources/deployments', 'storage'), '2022-09-01').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))]", + "keyVaultName": "[if(empty(parameters('remoteHubStorageKey')), createObject('value', ''), createObject('value', reference(resourceId('Microsoft.Resources/deployments', 'keyVault'), '2022-09-01').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": "12998070848171971309" + } + }, + "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'))]" + } + }, + "getExportBodyV2": { + "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" + }, + { + "type": "string", + "name": "recommendationScope" + }, + { + "type": "string", + "name": "recommendationLookbackPeriod" + }, + { + "type": "string", + "name": "resourceType" + } + ], + "output": { + "type": "string", + "value": "[if(equals(toLower(parameters('datasetType')), 'focuscost'), 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/@{{toLower(concat(variables(''finOpsHub''), ''-{9}-costdetails''))}}\", \"name\": \"@{{toLower(concat(variables(''finOpsHub''), ''-{10}-costdetails''))}}\", \"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'), if(parameters('isMonthly'), 'monthly', 'daily'), if(parameters('isMonthly'), 'monthly', 'daily')), if(equals(toLower(parameters('datasetType')), 'reservationdetails'), 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/@{{toLower(concat(variables(''finOpsHub''), ''-{9}-{10}''))}}\", \"name\": \"@{{toLower(concat(variables(''finOpsHub''), ''-{11}-{12}''))}}\", \"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'), if(parameters('isMonthly'), 'monthly', 'daily'), toLower(parameters('datasetType')), if(parameters('isMonthly'), 'monthly', 'daily'), toLower(parameters('datasetType'))), if(or(equals(toLower(parameters('datasetType')), 'pricesheet'), equals(toLower(parameters('datasetType')), 'reservationtransactions')), format('{{ \"properties\": {{ \"definition\": {{ \"dataSet\": {{ \"configuration\": {{ \"dataVersion\": \"{0}\", \"filters\": [] }}}}, \"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/@{{toLower(concat(variables(''finOpsHub''), ''-{9}-{10}''))}}\", \"name\": \"@{{toLower(concat(variables(''finOpsHub''), ''-{11}-{12}''))}}\", \"type\": \"Microsoft.CostManagement/reports\", \"identity\": {{ \"type\": \"systemAssigned\" }}, \"location\": \"global\" }}', parameters('schemaVersion'), if(parameters('isMonthly'), 'TheCurrentMonth', 'MonthToDate'), parameters('datasetType'), parameters('exportContainerName'), if(parameters('isMonthly'), 'Monthly', 'Daily'), parameters('exportFormat'), parameters('partitionData'), parameters('dataOverwriteBehavior'), parameters('compressionMode'), if(parameters('isMonthly'), 'monthly', 'daily'), toLower(parameters('datasetType')), if(parameters('isMonthly'), 'monthly', 'daily'), toLower(parameters('datasetType'))), if(equals(toLower(parameters('datasetType')), 'reservationrecommendations'), format('{{ \"properties\": {{ \"definition\": {{ \"dataSet\": {{ \"configuration\": {{ \"dataVersion\": \"{0}\", \"filters\": [ {{ \"name\": \"reservationScope\", \"value\": \"{1}\" }}, {{ \"name\": \"resourceType\", \"value\": \"{2}\" }}, {{ \"name\": \"lookBackPeriod\", \"value\": \"{3}\" }}] }}}}, \"timeframe\": \"{4}\", \"type\": \"{5}\" }}, \"deliveryInfo\": {{ \"destination\": {{ \"container\": \"{6}\", \"rootFolderPath\": \"@{{if(startswith(item().scope, ''/''), substring(item().scope, 1, sub(length(item().scope), 1)) ,item().scope)}}\", \"type\": \"AzureBlob\", \"resourceId\": \"@{{variables(''storageAccountId'')}}\" }} }}, \"schedule\": {{ \"recurrence\": \"{7}\", \"recurrencePeriod\": {{ \"from\": \"2024-01-01T00:00:00.000Z\", \"to\": \"2050-02-01T00:00:00.000Z\" }}, \"status\": \"Inactive\" }}, \"format\": \"{8}\", \"partitionData\": \"{9}\", \"dataOverwriteBehavior\": \"{10}\", \"compressionMode\": \"{11}\" }}, \"id\": \"@{{variables(''resourceManagementUri'')}}@{{item().scope}}/providers/Microsoft.CostManagement/exports/@{{toLower(concat(variables(''finOpsHub''), ''-{12}-costdetails''))}}\", \"name\": \"@{{toLower(concat(variables(''finOpsHub''), ''-{13}-costdetails''))}}\", \"type\": \"Microsoft.CostManagement/reports\", \"identity\": {{ \"type\": \"systemAssigned\" }}, \"location\": \"global\" }}', parameters('schemaVersion'), parameters('recommendationScope'), parameters('resourceType'), parameters('recommendationLookbackPeriod'), if(parameters('isMonthly'), 'TheLastMonth', 'MonthToDate'), parameters('datasetType'), parameters('exportContainerName'), if(parameters('isMonthly'), 'Monthly', 'Daily'), parameters('exportFormat'), parameters('partitionData'), parameters('dataOverwriteBehavior'), parameters('compressionMode'), if(parameters('isMonthly'), 'monthly', 'daily'), if(parameters('isMonthly'), 'monthly', 'daily')), 'undefined'))))]" + } + } + } + } + ], + "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", + "exportSchemaVersion": "2023-05-01", + "reservationDetailsSchemaVersion": "2023-03-01", + "ftkVersion": "0.9", + "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" + ], + "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": { + "condition": "[not(empty(parameters('remoteHubStorageUri')))]", + "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": "[and(not(empty(parameters('remoteHubStorageUri'))), 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": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Resources/deploymentScripts'), createObject()))]", + "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": { + "condition": "[not(empty(parameters('remoteHubStorageUri')))]", + "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": [ + 2, + 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( startswith(toLower(item().name), toLower(variables('hubName'))), and(contains(string(item().properties.schedule), 'recurrence'), equals(toLower(item().properties.schedule.recurrence), toLower(pipeline().parameters.Recurrence))))", + "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": "Set Export Type", + "type": "SetVariable", + "dependsOn": [], + "policy": { + "secureOutput": false, + "secureInput": false + }, + "userProperties": [], + "typeProperties": { + "variableName": "exportScopeType", + "value": { + "value": "@if(contains(toLower(item().scope), 'providers/microsoft.billing/billingaccounts'), if(contains(toLower(item().scope), ':'), 'mca', 'ea'), if(contains(toLower(item().scope), 'subscriptions/'), 'subscription', 'undefined'))", + "type": "Expression" + } + } + }, + { + "name": "Switch Export Type", + "type": "Switch", + "dependsOn": [ + { + "activity": "Set Export Type", + "dependencyConditions": [ + "Succeeded" + ] + } + ], + "userProperties": [], + "typeProperties": { + "on": { + "value": "@toLower(variables('exportScopeType'))", + "type": "Expression" + }, + "cases": [ + { + "value": "ea", + "activities": [ + { + "name": "EA open month focus export", + "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/@{{toLower(concat(variables(''finOpsHub''), ''-daily-costdetails''))}}?api-version={0}', variables('exportApiVersion'))]", + "type": "Expression" + }, + "method": "PUT", + "body": { + "value": "[__bicep.getExportBodyV2(parameters('exportContainerName'), 'FocusCost', variables('focusSchemaVersion'), false(), 'Parquet', 'Snappy', 'true', 'CreateNewReport', '', '', '')]", + "type": "Expression" + }, + "headers": { + "x-ms-command-name": "[format('FinOpsToolkit.Hubs.config_RunExportJobs.CostsDaily@{0}', variables('ftkVersion'))]", + "ClientType": "[format('FinOpsToolkit.Hubs@{0}', variables('ftkVersion'))]" + }, + "authentication": { + "type": "MSI", + "resource": { + "value": "@variables('resourceManagementUri')", + "type": "Expression" + } + } + } + }, + { + "name": "EA closed month focus export", + "type": "WebActivity", + "dependsOn": [ + { + "activity": "EA open month focus export", + "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/@{{toLower(concat(variables(''finOpsHub''), ''-monthly-costdetails''))}}?api-version={0}', variables('exportApiVersion'))]", + "type": "Expression" + }, + "method": "PUT", + "body": { + "value": "[__bicep.getExportBodyV2(parameters('exportContainerName'), 'FocusCost', variables('focusSchemaVersion'), true(), 'Parquet', 'Snappy', 'true', 'CreateNewReport', '', '', '')]", + "type": "Expression" + }, + "headers": { + "x-ms-command-name": "[format('FinOpsToolkit.Hubs.config_RunExportJobs.CostsMonthly@{0}', variables('ftkVersion'))]", + "ClientType": "[format('FinOpsToolkit.Hubs@{0}', variables('ftkVersion'))]" + }, + "authentication": { + "type": "MSI", + "resource": { + "value": "@variables('resourceManagementUri')", + "type": "Expression" + } + } + } + }, + { + "name": "EA monthly pricesheet export", + "type": "WebActivity", + "dependsOn": [ + { + "activity": "EA closed month focus export", + "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/@{{toLower(concat(variables(''finOpsHub''), ''-monthly-pricesheet''))}}?api-version={0}', variables('exportApiVersion'))]", + "type": "Expression" + }, + "method": "PUT", + "body": { + "value": "[__bicep.getExportBodyV2(parameters('exportContainerName'), 'Pricesheet', variables('exportSchemaVersion'), true(), 'Parquet', 'Snappy', 'true', 'CreateNewReport', '', '', '')]", + "type": "Expression" + }, + "headers": { + "x-ms-command-name": "[format('FinOpsToolkit.Hubs.config_RunExportJobs.Prices@{0}', variables('ftkVersion'))]", + "ClientType": "[format('FinOpsToolkit.Hubs@{0}', variables('ftkVersion'))]" + }, + "authentication": { + "type": "MSI", + "resource": { + "value": "@variables('resourceManagementUri')", + "type": "Expression" + } + } + } + }, + { + "name": "Trigger EA monthly pricesheet export", + "type": "WebActivity", + "dependsOn": [ + { + "activity": "EA monthly pricesheet export", + "dependencyConditions": [ + "Succeeded" + ] + } + ], + "policy": { + "timeout": "0.00:05:00", + "retry": 0, + "retryIntervalInSeconds": 30, + "secureOutput": false, + "secureInput": false + }, + "userProperties": [], + "typeProperties": { + "method": "POST", + "url": { + "value": "[format('@{{variables(''resourceManagementUri'')}}@{{item().scope}}/providers/Microsoft.CostManagement/exports/@{{toLower(concat(variables(''finOpsHub''), ''-monthly-pricesheet''))}}/run?api-version={0}', variables('exportApiVersion'))]", + "type": "Expression" + }, + "headers": { + "x-ms-command-name": "[format('FinOpsToolkit.Hubs.config_RunExportJobs.Prices@{0}', variables('ftkVersion'))]", + "ClientType": "[format('FinOpsToolkit.Hubs@{0}', variables('ftkVersion'))]" + }, + "body": " ", + "authentication": { + "type": "MSI", + "resource": { + "value": "@variables('resourceManagementUri')", + "type": "Expression" + } + } + } + }, + { + "name": "EA daily reservation details export", + "type": "WebActivity", + "dependsOn": [ + { + "activity": "EA monthly pricesheet export", + "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/@{{toLower(concat(variables(''finOpsHub''), ''-daily-reservationdetails''))}}?api-version={0}', variables('exportApiVersion'))]", + "type": "Expression" + }, + "method": "PUT", + "body": { + "value": "[__bicep.getExportBodyV2(parameters('exportContainerName'), 'ReservationDetails', variables('reservationDetailsSchemaVersion'), false(), 'CSV', 'None', 'true', 'CreateNewReport', '', '', '')]", + "type": "Expression" + }, + "headers": { + "x-ms-command-name": "[format('FinOpsToolkit.Hubs.config_RunExportJobs.ReservationDetails@{0}', variables('ftkVersion'))]", + "ClientType": "[format('FinOpsToolkit.Hubs@{0}', variables('ftkVersion'))]" + }, + "authentication": { + "type": "MSI", + "resource": { + "value": "@variables('resourceManagementUri')", + "type": "Expression" + } + } + } + }, + { + "name": "EA daily reservation transactions export", + "type": "WebActivity", + "dependsOn": [ + { + "activity": "EA daily reservation details export", + "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/@{{toLower(concat(variables(''finOpsHub''), ''-daily-reservationtransactions''))}}?api-version={0}', variables('exportApiVersion'))]", + "type": "Expression" + }, + "method": "PUT", + "body": { + "value": "[__bicep.getExportBodyV2(parameters('exportContainerName'), 'ReservationTransactions', variables('exportSchemaVersion'), false(), 'CSV', 'None', 'true', 'CreateNewReport', '', '', '')]", + "type": "Expression" + }, + "headers": { + "x-ms-command-name": "[format('FinOpsToolkit.Hubs.config_RunExportJobs.ReservationTransactions@{0}', variables('ftkVersion'))]", + "ClientType": "[format('FinOpsToolkit.Hubs@{0}', variables('ftkVersion'))]" + }, + "authentication": { + "type": "MSI", + "resource": { + "value": "@variables('resourceManagementUri')", + "type": "Expression" + } + } + } + }, + { + "name": "EA daily shared 30day virtualmachines", + "type": "WebActivity", + "dependsOn": [ + { + "activity": "EA daily reservation transactions export", + "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/@{{toLower(concat(variables(''finOpsHub''), ''-daily-recommendations-shared-last30days-virtualmachines''))}}?api-version={0}', variables('exportApiVersion'))]", + "type": "Expression" + }, + "method": "PUT", + "body": { + "value": "[__bicep.getExportBodyV2(parameters('exportContainerName'), 'ReservationRecommendations', variables('exportSchemaVersion'), false(), 'CSV', 'None', 'true', 'CreateNewReport', 'Shared', 'Last30Days', 'VirtualMachines')]", + "type": "Expression" + }, + "headers": { + "x-ms-command-name": "[format('FinOpsToolkit.Hubs.config_RunExportJobs.ReservationRecommendations.VM.Shared.30d@{0}', variables('ftkVersion'))]", + "ClientType": "[format('FinOpsToolkit.Hubs@{0}', variables('ftkVersion'))]" + }, + "authentication": { + "type": "MSI", + "resource": { + "value": "@variables('resourceManagementUri')", + "type": "Expression" + } + } + } + } + ] + }, + { + "value": "subscription", + "activities": [ + { + "name": "Subscription open month focus export", + "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/@{{toLower(concat(variables(''finOpsHub''), ''-daily-costdetails''))}}?api-version={0}', variables('exportApiVersion'))]", + "type": "Expression" + }, + "method": "PUT", + "body": { + "value": "[__bicep.getExportBodyV2(parameters('exportContainerName'), 'FocusCost', variables('focusSchemaVersion'), false(), 'Parquet', 'Snappy', 'true', 'CreateNewReport', '', '', '')]", + "type": "Expression" + }, + "headers": { + "x-ms-command-name": "[format('FinOpsToolkit.Hubs.config_RunExportJobs.CostsDaily@{0}', variables('ftkVersion'))]", + "ClientType": "[format('FinOpsToolkit.Hubs@{0}', variables('ftkVersion'))]" + }, + "authentication": { + "type": "MSI", + "resource": { + "value": "@variables('resourceManagementUri')", + "type": "Expression" + } + } + } + }, + { + "name": "Subscription closed month focus export", + "type": "WebActivity", + "dependsOn": [ + { + "activity": "Subscription open month focus export", + "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/@{{toLower(concat(variables(''finOpsHub''), ''-monthly-costdetails''))}}?api-version={0}', variables('exportApiVersion'))]", + "type": "Expression" + }, + "method": "PUT", + "body": { + "value": "[__bicep.getExportBodyV2(parameters('exportContainerName'), 'FocusCost', variables('focusSchemaVersion'), true(), 'Parquet', 'Snappy', 'true', 'CreateNewReport', '', '', '')]", + "type": "Expression" + }, + "headers": { + "x-ms-command-name": "[format('FinOpsToolkit.Hubs.config_RunExportJobs.CostsMonthly@{0}', variables('ftkVersion'))]", + "ClientType": "[format('FinOpsToolkit.Hubs@{0}', variables('ftkVersion'))]" + }, + "authentication": { + "type": "MSI", + "resource": { + "value": "@variables('resourceManagementUri')", + "type": "Expression" + } + } + } + } + ] + }, + { + "value": "mca", + "activities": [ + { + "name": "Export Type Unsupported Error", + "type": "Fail", + "dependsOn": [], + "userProperties": [], + "typeProperties": { + "message": { + "value": "@concat('MCA agreements are not supported for managed exports :',variables('exportScope'))", + "type": "Expression" + }, + "errorCode": "ExportTypeUnsupported" + } + } + ] + } + ], + "defaultActivities": [ + { + "name": "Export Type Not Defined Error", + "type": "Fail", + "dependsOn": [], + "userProperties": [], + "typeProperties": { + "message": { + "value": "@concat('Unable to determine the export scope type for :',variables('exportScope'))", + "type": "Expression" + }, + "errorCode": "ExportTypeNotDefined" + } + } + ] + } + } + ] + } + } + ], + "concurrency": 1, + "variables": { + "scopesArray": { + "type": "Array" + }, + "exportName": { + "type": "String" + }, + "exportScope": { + "type": "String" + }, + "exportScopeType": { + "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 supported 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')), if(equals(variables('hubDataset'), 'Recommendations'), activity('Read Manifest').output.firstRow.exportConfig.exportName, '')),'//','/')", + "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": "[and(not(empty(parameters('remoteHubStorageUri'))), 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": "[and(not(empty(parameters('remoteHubStorageUri'))), 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": [ + "[resourceId('Microsoft.Resources/deployments', 'dataExplorer')]", + "[resourceId('Microsoft.DataFactory/factories', variables('dataFactoryName'))]", + "[resourceId('Microsoft.Resources/deployments', 'keyVault')]", + "[resourceId('Microsoft.Resources/deployments', 'storage')]" + ] + }, + { + "condition": "[not(empty(parameters('remoteHubStorageKey')))]", + "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(resourceId('Microsoft.Resources/deployments', 'vnet'), '2022-09-01').outputs.vNetId.value))]", + "privateEndpointSubnetId": "[if(parameters('enablePublicAccess'), createObject('value', ''), createObject('value', reference(resourceId('Microsoft.Resources/deployments', 'vnet'), '2022-09-01').outputs.finopsHubSubnetId.value))]", + "accessPolicies": { + "value": [ + { + "objectId": "[reference(resourceId('Microsoft.DataFactory/factories', variables('dataFactoryName')), '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": [ + "[resourceId('Microsoft.DataFactory/factories', variables('dataFactoryName'))]", + "[resourceId('Microsoft.Resources/deployments', '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(resourceId('Microsoft.Resources/deployments', 'storage'), '2022-09-01').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]" + }, + "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)]" + }, + "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)]" + }, + "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)]" + }, + "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)]" + }, + "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)]" + }, + "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]" + }, + "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": "Name of the resource group." + }, + "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 instance." + }, + "value": "[reference(resourceId('Microsoft.Resources/deployments', 'hub'), '2022-09-01').outputs.dataFactoryName.value]" + }, + "storageAccountId": { + "type": "string", + "metadata": { + "description": "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": "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": "URI of the Data Explorer cluster." + }, + "value": "[reference(resourceId('Microsoft.Resources/deployments', 'hub'), '2022-09-01').outputs.clusterUri.value]" + }, + "ingestionDbName": { + "type": "string", + "metadata": { + "description": "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": "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.9.ui.json b/docs/deploy/finops-hub-0.9.ui.json new file mode 100644 index 000000000..3b92b3ba0 --- /dev/null +++ b/docs/deploy/finops-hub-0.9.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 a80c857f4..aa3459cd2 100644 --- a/docs/deploy/finops-hub-latest.json +++ b/docs/deploy/finops-hub-latest.json @@ -5,7 +5,7 @@ "_generator": { "name": "bicep", "version": "0.33.93.31351", - "templateHash": "13598346182779466463" + "templateHash": "6665130305505342036" } }, "parameters": { @@ -275,13 +275,12 @@ }, "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" + "templateHash": "9032999427449681343" } }, "parameters": { @@ -419,16 +418,6 @@ "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": {}, @@ -501,22 +490,22 @@ } }, "variables": { - "$fxv#0": "0.8", - "finOpsToolkitVersion": "0.8", + "$fxv#0": "0.9", + "finOpsToolkitVersion": "0.9", "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" + "telemetryId": "[join(createArray('00f120b5-2007-6120-0000-40b000000000_', if(or(empty(parameters('remoteHubStorageUri')), empty(parameters('remoteHubStorageKey'))), '', 'R'), substring(split(parameters('storageSku'), '_')[1], 0, 1), if(empty(parameters('dataExplorerName')), '', format('X{0}', substring(parameters('dataExplorerSku'), 0, 1))), if(empty(parameters('dataExplorerName')), '', replace(replace(replace(replace(replace(replace(replace(replace(split(split(parameters('dataExplorerSku'), 'Standard_')[1], '_')[0], 'C', ''), 'D', ''), 'E', ''), 'L', ''), 'a', ''), 'd', ''), 'i', ''), 's', '')), if(or(empty(parameters('dataExplorerName')), equals(parameters('dataExplorerCapacity'), 1)), '', format('x{0}', parameters('dataExplorerCapacity'))), if(parameters('enablePublicAccess'), '', 'P')), '')]" }, - "resources": { - "defaultTelemetry": { + "resources": [ + { "condition": "[parameters('enableDefaultTelemetry')]", "type": "Microsoft.Resources/deployments", "apiVersion": "2022-09-01", - "name": "[format('pid-{0}-{1}', variables('telemetryId'), uniqueString(deployment().name, parameters('location')))]", + "name": "[format('pid-{0}_{1}', variables('telemetryId'), uniqueString(deployment().name, parameters('location')))]", "properties": { "mode": "Incremental", "template": { @@ -532,7 +521,7 @@ } } }, - "dataFactory": { + { "type": "Microsoft.DataFactory/factories", "apiVersion": "2018-06-01", "name": "[variables('dataFactoryName')]", @@ -547,7 +536,7 @@ } } }, - "vnet": { + { "condition": "[not(parameters('enablePublicAccess'))]", "type": "Microsoft.Resources/deployments", "apiVersion": "2022-09-01", @@ -814,7 +803,7 @@ } } }, - "storage": { + { "type": "Microsoft.Resources/deployments", "apiVersion": "2022-09-01", "name": "storage", @@ -860,9 +849,9 @@ "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))]", + "virtualNetworkId": "[if(parameters('enablePublicAccess'), createObject('value', ''), createObject('value', reference(resourceId('Microsoft.Resources/deployments', 'vnet'), '2022-09-01').outputs.vNetId.value))]", + "privateEndpointSubnetId": "[if(parameters('enablePublicAccess'), createObject('value', ''), createObject('value', reference(resourceId('Microsoft.Resources/deployments', 'vnet'), '2022-09-01').outputs.finopsHubSubnetId.value))]", + "scriptSubnetId": "[if(parameters('enablePublicAccess'), createObject('value', ''), createObject('value', reference(resourceId('Microsoft.Resources/deployments', 'vnet'), '2022-09-01').outputs.scriptSubnetId.value))]", "enablePublicAccess": { "value": "[parameters('enablePublicAccess')]" } @@ -874,7 +863,7 @@ "_generator": { "name": "bicep", "version": "0.33.93.31351", - "templateHash": "5620729023118426614" + "templateHash": "4390747260549399432" } }, "parameters": { @@ -991,14 +980,14 @@ "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#10": "0.9", + "$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\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 # Force string array to object array with unique values\r\n if ($json.scopes)\r\n {\r\n Write-Output \" Converting string array to object array...\"\r\n $scopeArray = @()\r\n $json.scopes | Where-Object $validateScopes | ForEach-Object { $scopeArray += $_ } | Select-Object -Unique\r\n $json.scopes = @() + $scopeArray\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 default retention\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\n$json.scopes = (@() + $json.scopes + $newScopes) | Select-Object -Unique\r\nif ($null -eq $json.scopes) { $json.scopes = @() }\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#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\": \"CostWithNoReservedInstancesJson\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"First UsageDate\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"FirstUsageDate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Instance Flexibility Ratio\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"InstanceFlexibilityRatio\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Instance Flexibility Group\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"InstanceFlexibilityGroup\" }\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\": \"String\" },\r\n \"sink\": { \"name\": \"NetSavingsJson\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Normalized Size\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"NormalizedSize\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Recommended Quantity\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"RecommendedQuantity\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Recommended Quantity Normalized\", \"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\": \"SkuName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SkuName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Sku Properties\", \"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\": \"Total Cost With ReservedInstances\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"TotalCostWithReservedInstancesJson\" }\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')), '-', ''), '_', '')]", @@ -1019,7 +1008,6 @@ }, "blobUploadRbacRoles": [ "ba92f5b4-2d11-453d-a403-e96b0029c9fe", - "e40ec5ca-96e0-45a2-b4ff-59039f2c2b59", "69566ab7-960f-475b-8e7c-b3118f30c6bd" ] }, @@ -1460,10 +1448,10 @@ } }, "dependsOn": [ - "vnet" + "[resourceId('Microsoft.Resources/deployments', 'vnet')]" ] }, - "dataExplorer": { + { "condition": "[variables('deployDataExplorer')]", "type": "Microsoft.Resources/deployments", "apiVersion": "2022-09-01", @@ -1483,9 +1471,6 @@ "clusterCapacity": { "value": "[parameters('dataExplorerCapacity')]" }, - "clusterTrustedExternalTenants": { - "value": "[parameters('dataExplorerTrustedExternalTenants')]" - }, "location": { "value": "[parameters('location')]" }, @@ -1501,24 +1486,23 @@ "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))]", + "virtualNetworkId": "[if(parameters('enablePublicAccess'), createObject('value', ''), createObject('value', reference(resourceId('Microsoft.Resources/deployments', 'vnet'), '2022-09-01').outputs.vNetId.value))]", + "privateEndpointSubnetId": "[if(parameters('enablePublicAccess'), createObject('value', ''), createObject('value', reference(resourceId('Microsoft.Resources/deployments', 'vnet'), '2022-09-01').outputs.dataExplorerSubnetId.value))]", "enablePublicAccess": { "value": "[parameters('enablePublicAccess')]" }, "storageAccountName": { - "value": "[reference('storage').outputs.name.value]" + "value": "[reference(resourceId('Microsoft.Resources/deployments', 'storage'), '2022-09-01').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" + "templateHash": "15559057084461761997" } }, "parameters": { @@ -1611,16 +1595,6 @@ "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()]", @@ -1695,16 +1669,16 @@ } }, "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#0": "0.9", + "$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 Arize AI 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 ,\"commvault.contentstore/cloudaccounts\": { \"SingularDisplayName\": \"Commvault Cloud Account\" }\r\n ,\"commvault.contentstore/cloudaccounts/plans\": { \"SingularDisplayName\": \"Commvault.ContentStore cloud accounts plan\" }\r\n ,\"commvault.contentstore/cloudaccounts/protectiongroups\": { \"SingularDisplayName\": \"Commvault.ContentStore cloud accounts protection group\" }\r\n ,\"commvault.contentstore/cloudaccounts/protectiongroups/protecteditems\": { \"SingularDisplayName\": \"Commvault.ContentStore cloud accounts protection groups protected item\" }\r\n ,\"commvault.contentstore/cloudaccounts/storages\": { \"SingularDisplayName\": \"Commvault.ContentStore cloud accounts storage\" }\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/assessments\": { \"SingularDisplayName\": \"Microsoft.Advisor assessment\" }\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.advisor/resiliencyreviews\": { \"SingularDisplayName\": \"Microsoft.Advisor resiliency review\" }\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\": \"Agriculture data solutions\" }\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 Local 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/snapshots/controls\": { \"SingularDisplayName\": \"Microsoft.AppComplianceAutomation reports snapshots control\" }\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/appprotectmanagedrulesetmanifests\": { \"SingularDisplayName\": \"Microsoft.AppSecurity app protect managed rule set manifest\" }\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/mysqlserver\": { \"SingularDisplayName\": \"MySql Server - Azure Arc\" }\r\n ,\"microsoft.azurearcdata/postgresinstances\": { \"SingularDisplayName\": \"PostgreSQL server ? Azure Arc\" }\r\n ,\"microsoft.azurearcdata/postgressqlserver\": { \"SingularDisplayName\": \"PostgresSql 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/addressrecords\": { \"SingularDisplayName\": \"Microsoft.AzureCis address record\" }\r\n ,\"microsoft.azurecis/autopilotenvironments\": { \"SingularDisplayName\": \"Microsoft.AzureCis autopilot environment\" }\r\n ,\"microsoft.azurecis/autopilotmachinefunctions\": { \"SingularDisplayName\": \"Microsoft.AzureCis autopilot machine function\" }\r\n ,\"microsoft.azurecis/autopilotsoftwareloadbalancevirtualips\": { \"SingularDisplayName\": \"Microsoft.AzureCis auto pilot software load balance virtual IP\" }\r\n ,\"microsoft.azurecis/canonicalnamerecords\": { \"SingularDisplayName\": \"Microsoft.AzureCis canonical name record\" }\r\n ,\"microsoft.azurecis/dsmsallowlists\": { \"SingularDisplayName\": \"Microsoft.AzureCis ds msallowlist\" }\r\n ,\"microsoft.azurecis/dsmscertificates\": { \"SingularDisplayName\": \"Microsoft.AzureCis dsms certificate\" }\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/pointerrecords\": { \"SingularDisplayName\": \"Microsoft.AzureCis pointer record\" }\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.azurecis/servicerecords\": { \"SingularDisplayName\": \"Microsoft.AzureCis service record\" }\r\n ,\"microsoft.azurecis/sharedconfigvalues\": { \"SingularDisplayName\": \"Microsoft.AzureCis shared config value\" }\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 Local\" }\r\n ,\"microsoft.azurestackhci/devicepools\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI device pool\" }\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/edgemachines\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI edge machine\" }\r\n ,\"microsoft.azurestackhci/edgemachines/jobs\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI edge machines job\" }\r\n ,\"microsoft.azurestackhci/edgenodepools\": { \"SingularDisplayName\": \"Azure Stack\" }\r\n ,\"microsoft.azurestackhci/galleryimages\": { \"SingularDisplayName\": \"Azure Local Gallery image\" }\r\n ,\"microsoft.azurestackhci/logicalnetworks\": { \"SingularDisplayName\": \"Azure Local Logical network\" }\r\n ,\"microsoft.azurestackhci/marketplacegalleryimages\": { \"SingularDisplayName\": \"Azure Local Marketplace Gallery image\" }\r\n ,\"microsoft.azurestackhci/networkinterfaces\": { \"SingularDisplayName\": \"Azure Local VM Network Interface\" }\r\n ,\"microsoft.azurestackhci/networksecuritygroups\": { \"SingularDisplayName\": \"Azure Local Network Security Group\" }\r\n ,\"microsoft.azurestackhci/networksecuritygroups/securityrules\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI network security groups security rule\" }\r\n ,\"microsoft.azurestackhci/storagecontainers\": { \"SingularDisplayName\": \"Azure Local 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 Local 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.baremetal/peeringsettings\": { \"SingularDisplayName\": \"Microsoft.BareMetal peering setting\" }\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/migrations\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts migration\" }\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/edgeactions\": { \"SingularDisplayName\": \"Edge Action\" }\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.changesafety/changestates\": { \"SingularDisplayName\": \"Microsoft.ChangeSafety change state\" }\r\n ,\"microsoft.changesafety/changestates/stageprogressions\": { \"SingularDisplayName\": \"Microsoft.ChangeSafety change states stage progression\" }\r\n ,\"microsoft.changesafety/stagemaps\": { \"SingularDisplayName\": \"Microsoft.ChangeSafety stage map\" }\r\n ,\"microsoft.changesafety/validations\": { \"SingularDisplayName\": \"Microsoft.ChangeSafety validation\" }\r\n ,\"microsoft.changesafety/validators\": { \"SingularDisplayName\": \"Microsoft.ChangeSafety validator\" }\r\n ,\"microsoft.changesafety/validators/versions\": { \"SingularDisplayName\": \"Microsoft.ChangeSafety validators version\" }\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/collaborations\": { \"SingularDisplayName\": \"Microsoft.CleanRoom collaboration\" }\r\n ,\"microsoft.cleanroom/collaborations/contracts\": { \"SingularDisplayName\": \"Microsoft.CleanRoom collaborations contract\" }\r\n ,\"microsoft.cleanroom/consortiums\": { \"SingularDisplayName\": \"Microsoft.CleanRoom consortium\" }\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 })[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.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/computefleetscalesets\": { \"SingularDisplayName\": \"Virtual machine scale set\" }\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 ,\"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.compute/virtualmachinescalesetscomputehub\": { \"SingularDisplayName\": \"Virtual machine scale set\" }\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\": \"Automatic 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\" }\r\n ,\"microsoft.connectedcache/enterprisecustomers\": { \"SingularDisplayName\": \"Connected Cache for Enterprise & Education\" }\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.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/dashboards\": { \"SingularDisplayName\": \"Azure Monitor Dashboard\" }\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/privateendpointconnectionproxies\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults private endpoint connection proxy\" }\r\n ,\"microsoft.datareplication/replicationvaults/privateendpointconnections\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults private endpoint connection\" }\r\n ,\"microsoft.datareplication/replicationvaults/privatelinkresources\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults private link resource\" }\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/templates\": { \"SingularDisplayName\": \"Microsoft.DevHub template\" }\r\n ,\"microsoft.devhub/templates/versions\": { \"SingularDisplayName\": \"Microsoft.DevHub templates version\" }\r\n ,\"microsoft.devhub/workflows\": { \"SingularDisplayName\": \"Microsoft.DevHub workflow\" }\r\n ,\"microsoft.deviceonboarding/discoveryservices\": { \"SingularDisplayName\": \"Microsoft.DeviceOnboarding discovery service\" }\r\n ,\"microsoft.deviceonboarding/discoveryservices/ownershipvoucherpublickeys\": { \"SingularDisplayName\": \"Microsoft.DeviceOnboarding discovery services ownership voucher public key\" }\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\": \"IoT 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/namespaces\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry namespace\" }\r\n ,\"microsoft.deviceregistry/namespaces/assetendpointprofiles\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry namespaces asset endpoint profile\" }\r\n ,\"microsoft.deviceregistry/namespaces/assets\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry namespaces asset\" }\r\n ,\"microsoft.deviceregistry/namespaces/devices\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry namespaces device\" }\r\n ,\"microsoft.deviceregistry/namespaces/discoveredassetendpointprofiles\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry namespaces discovered asset endpoint profile\" }\r\n ,\"microsoft.deviceregistry/namespaces/discoveredassets\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry namespaces discovered asset\" }\r\n ,\"microsoft.deviceregistry/schemaregistries\": { \"SingularDisplayName\": \"IoT 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/fleets\": { \"SingularDisplayName\": \"Cosmos DB Fleet\" }\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\": \"Microsoft.DurableTask namespace\" }\r\n ,\"microsoft.durabletask/namespaces/taskhubs\": { \"SingularDisplayName\": \"Task Hub\" }\r\n ,\"microsoft.durabletask/schedulers\": { \"SingularDisplayName\": \"Durable Task Scheduler\" }\r\n ,\"microsoft.durabletask/schedulers/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/disconnectedoperations\": { \"SingularDisplayName\": \"Azure Local - disconnected operations\" }\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 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\": \"Entra 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/clusterpools/clusters/instanceviews\": { \"SingularDisplayName\": \"Microsoft.HDInsight clusterpools clusters instance view\" }\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.healthplatform/accounts\": { \"SingularDisplayName\": \"Microsoft.HealthPlatform account\" }\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 })[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.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\": \"Firmware analysis 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.iotoperationsmq/mq/broker\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsMQ mq broker\" }\r\n ,\"microsoft.iotoperationsmq/mq/broker/authentication\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsMQ mq broker authentication\" }\r\n ,\"microsoft.iotoperationsmq/mq/broker/authorization\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsMQ mq broker authorization\" }\r\n ,\"microsoft.iotoperationsmq/mq/broker/listener\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsMQ mq broker listener\" }\r\n ,\"microsoft.iotoperationsmq/mq/datalakeconnector\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsMQ mq data lake connector\" }\r\n ,\"microsoft.iotoperationsmq/mq/datalakeconnector/topicmap\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsMQ mq data lake connector topic map\" }\r\n ,\"microsoft.iotoperationsmq/mq/diagnosticservice\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsMQ mq diagnostic service\" }\r\n ,\"microsoft.iotoperationsmq/mq/kafkaconnector\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsMQ mq kafka connector\" }\r\n ,\"microsoft.iotoperationsmq/mq/kafkaconnector/topicmap\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsMQ mq kafka connector topic map\" }\r\n ,\"microsoft.iotoperationsmq/mq/mqttbridgeconnector\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsMQ mq mqtt bridge connector\" }\r\n ,\"microsoft.iotoperationsmq/mq/mqttbridgeconnector/topicmap\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsMQ mq mqtt bridge connector topic map\" }\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 - 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 ,\"microsoft.labservices/labaccounts/labs\": { \"SingularDisplayName\": \"Lab\" }\r\n ,\"microsoft.labservices/labplans\": { \"SingularDisplayName\": \"Lab plan\" }\r\n ,\"microsoft.labservices/labs\": { \"SingularDisplayName\": \"Lab\" }\r\n ,\"microsoft.liftrpilot/organizations\": { \"SingularDisplayName\": \"Microsoft.LiftrPilot organization\" }\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/health\": { \"SingularDisplayName\": \"Microsoft.Logic integration service environments health\" }\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\": \"Machine Learning Studio (classic) web service\" }\r\n ,\"microsoft.machinelearning/workspaces\": { \"SingularDisplayName\": \"Machine Learning Studio (classic) 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 Foundry\" }\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/maintenanceconfigurationsbladeresource\": { \"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/networkmonitors\": { \"SingularDisplayName\": \"Microsoft.ManagedNetworkFabric network monitor\" }\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\": \"Factory Operations Agent in Azure AI Foundry\" }\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/accountfilters\": { \"SingularDisplayName\": \"Microsoft.Media media services account filter\" }\r\n ,\"microsoft.media/mediaservices/assets\": { \"SingularDisplayName\": \"Microsoft.Media media services asset\" }\r\n ,\"microsoft.media/mediaservices/assets/assetfilters\": { \"SingularDisplayName\": \"Microsoft.Media media services assets asset filter\" }\r\n ,\"microsoft.media/mediaservices/assets/tracks\": { \"SingularDisplayName\": \"Microsoft.Media media services assets track\" }\r\n ,\"microsoft.media/mediaservices/assets/tracks/operationresults\": { \"SingularDisplayName\": \"Microsoft.Media media services assets tracks operation result\" }\r\n ,\"microsoft.media/mediaservices/assets/tracks/operationstatuses\": { \"SingularDisplayName\": \"Microsoft.Media media services assets tracks operation statuse\" }\r\n ,\"microsoft.media/mediaservices/contentkeypolicies\": { \"SingularDisplayName\": \"Microsoft.Media media services content key policy\" }\r\n ,\"microsoft.media/mediaservices/liveevents\": { \"SingularDisplayName\": \"Live event\" }\r\n ,\"microsoft.media/mediaservices/liveevents/liveoutputs\": { \"SingularDisplayName\": \"Microsoft.Media mediaservices live events live output\" }\r\n ,\"microsoft.media/mediaservices/privateendpointconnections\": { \"SingularDisplayName\": \"Microsoft.Media mediaservices private endpoint connection\" }\r\n ,\"microsoft.media/mediaservices/privatelinkresources\": { \"SingularDisplayName\": \"Microsoft.Media mediaservices private link resource\" }\r\n ,\"microsoft.media/mediaservices/streamingendpoints\": { \"SingularDisplayName\": \"Streaming Endpoint\" }\r\n ,\"microsoft.media/mediaservices/streaminglocators\": { \"SingularDisplayName\": \"Microsoft.Media media services streaming locator\" }\r\n ,\"microsoft.media/mediaservices/streamingpolicies\": { \"SingularDisplayName\": \"Microsoft.Media media services streaming policy\" }\r\n ,\"microsoft.media/mediaservices/transforms\": { \"SingularDisplayName\": \"Microsoft.Media media services transform\" }\r\n ,\"microsoft.media/mediaservices/transforms/jobs\": { \"SingularDisplayName\": \"Microsoft.Media media services transforms job\" }\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/approvals\": { \"SingularDisplayName\": \"Approval\" }\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/agents\": { \"SingularDisplayName\": \"Microsoft.MySQLDiscovery my sqlsites agent\" }\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 Profile\" }\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\": \"VPN Gateway (Point to Site)\" }\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 (Site to Site)\" }\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/kubernetesclusters/features\": { \"SingularDisplayName\": \"Kubernetes Cluster Feature (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.onlineexperimentation/workspaces\": { \"SingularDisplayName\": \"Online Experimentation Workspace\" }\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 })[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.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.portalservices/settings\": { \"SingularDisplayName\": \"Microsoft.PortalServices setting\" }\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.proposal/proposals\": { \"SingularDisplayName\": \"Microsoft.Proposal proposal\" }\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.recoveryservicesbvtd/vaults\": { \"SingularDisplayName\": \"Recovery Services BVTD\" }\r\n ,\"microsoft.recoveryservicesbvtd2/vaults\": { \"SingularDisplayName\": \"Recovery Services BVTD2\" }\r\n ,\"microsoft.recoveryservicesintd/vaults\": { \"SingularDisplayName\": \"Recovery Services INTD\" }\r\n ,\"microsoft.recoveryservicesintd2/vaults\": { \"SingularDisplayName\": \"Recovery Services INTD2\" }\r\n ,\"microsoft.redhatopenshift/openshiftclusters\": { \"SingularDisplayName\": \"Azure Red Hat OpenShift cluster\" }\r\n ,\"microsoft.relationships/dependencyof\": { \"SingularDisplayName\": \"Dependency Relationship\" }\r\n ,\"microsoft.relationships/servicegroupmember\": { \"SingularDisplayName\": \"Service group member relationship\" }\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 ,\"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\": { \"SingularDisplayName\": \"Microsoft.SaaSHub cloud service\" }\r\n ,\"microsoft.saashub/cloudservices/hidden\": { \"SingularDisplayName\": \"Microsoft SaaS\" }\r\n ,\"microsoft.salescopilot/conversationintelligencerecordingaccounts\": { \"SingularDisplayName\": \"Microsoft.SalesCopilot conversation intelligence recording account\" }\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.storagediscovery/storagediscoveryworkspaces\": { \"SingularDisplayName\": \"Storage Discovery workspace\" }\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\": \"Project Sustainability Calculator\" }\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/diagnostics\": { \"SingularDisplayName\": \"Microsoft.ToolchainOrchestrator diagnostic\" }\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\": \"Windows Push Notification Service\" }\r\n ,\"microsoft.workloadmonitor/monitors\": { \"SingularDisplayName\": \"Microsoft.WorkloadMonitor monitor\" }\r\n ,\"microsoft.workloadmonitor/monitors/history\": { \"SingularDisplayName\": \"Microsoft.WorkloadMonitor monitors history\" }\r\n ,\"microsoft.workloads/configurationvalidationresults\": { \"SingularDisplayName\": \"Microsoft.Workloads configuration validation result\" }\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/instancegroupmonitors\": { \"SingularDisplayName\": \"Microsoft.Workloads instance group monitor\" }\r\n ,\"microsoft.workloads/instancehealthdefinitions\": { \"SingularDisplayName\": \"Microsoft.Workloads instance health definition\" }\r\n ,\"microsoft.workloads/instancehealthdefinitions/signaldefinitions\": { \"SingularDisplayName\": \"Microsoft.Workloads instance health definitions signal definition\" }\r\n ,\"microsoft.workloads/instancemonitors\": { \"SingularDisplayName\": \"Microsoft.Workloads instance monitor\" }\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 ,\"microsoft.workloads/virtualinstances\": { \"SingularDisplayName\": \"Microsoft.Workloads virtual instance\" }\r\n ,\"microsoft.workloads/virtualinstances/components\": { \"SingularDisplayName\": \"Microsoft.Workloads virtual instances component\" }\r\n ,\"microsoft.zerotrustsegmentation/segmentationmanagers\": { \"SingularDisplayName\": \"Segmentation Manager\" }\r\n ,\"mongodb.atlas/organizations\": { \"SingularDisplayName\": \"MongoDB Atlas Organization\" }\r\n ,\"neon.postgres/organizations\": { \"SingularDisplayName\": \"Neon Serverless Postgres Organization\" }\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/exadbvmclusters\": { \"SingularDisplayName\": \"Oracle Exascale VM Cluster\" }\r\n ,\"oracle.database/exascaledbstoragevaults\": { \"SingularDisplayName\": \"Oracle Exascale DB Storage Vault\" }\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", + "$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 // TODO: Handle 0\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 (for example, \"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 = tolower(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(ListCost < ContractedCost, 'ListCostLessThanContractedCost,', ''),\r\n iff(ContractedCost < EffectiveCost, 'ContractedCostLessThanEffectiveCost,', ''),\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 = tolower(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 = tolower(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 // TODO: Save values before changing -- | extend x_ms_ContractedUnitPrice = ContractedUnitPrice, x_ms_ListUnitPrice = ListUnitPrice, x_ms_ListCost = ListCost, x_ms_ContractedCost = ContractedCost\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 ContractedCost = case(\r\n ContractedCost != 0 or EffectiveCost == 0, ContractedCost,\r\n ContractedUnitPrice == x_EffectiveUnitPrice, EffectiveCost, // Use EffectiveCost if both prices are the same to avoid rounding errors\r\n ContractedUnitPrice != 0, ContractedUnitPrice * PricingQuantity,\r\n ContractedCost == 0 and ContractedUnitPrice == 0, EffectiveCost, // Fall back to EffectiveCost when ContractedCost and ContractedUnitPrice are 0\r\n ContractedCost\r\n )\r\n | extend ListCost = case(\r\n ListCost != 0 or EffectiveCost == 0, ListCost,\r\n ListUnitPrice == ContractedUnitPrice, ContractedCost, // Use ContractedCost if both prices are the same to avoid rounding errors\r\n ListUnitPrice != 0, ListUnitPrice * PricingQuantity,\r\n ListCost == 0 and ListUnitPrice == 0, ContractedCost, // Fall back to ContractedCost when ListCost and ListUnitPrice are 0\r\n ListCost\r\n )\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 CommitmentDiscountType 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 = tolower(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 = tolower(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 CostWithNoReservedInstancesJson: string, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces and flag as JSON\r\n FirstUsageDate: datetime, // MS CM EA/MCA resv reco 2024-05-01 -- Renamed for MCA\r\n InstanceFlexibilityGroup: string, // MS CM EA/MCA resv reco 2024-05-01 -- Renamed for MCA\r\n InstanceFlexibilityRatio: decimal, // MS CM EA/MCA resv reco 2024-05-01 -- Renamed for MCA\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/MCA resv reco 2024-05-01 -- Renamed for MCA\r\n NetSavings: decimal, // MS CM EA resv reco 2024-05-01\r\n NetSavingsJson: string, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces and flag as JSON\r\n NormalizedSize: string, // MS CM EA/MCA resv reco 2024-05-01 -- Renamed for MCA\r\n RecommendedQuantity: decimal, // MS CM EA/MCA resv reco 2024-05-01 -- Renamed for MCA\r\n RecommendedQuantityNormalized: decimal, // MS CM EA/MCA resv reco 2024-05-01 -- Renamed for MCA\r\n ResourceType: string, // MS CM EA+MCA resv reco 2024-05-01\r\n Scope: string, // MS CM EA/MCA resv reco 2024-05-01 -- Renamed for MCA\r\n SKU: string, // MS CM EA resv reco 2024-05-01\r\n SkuName: string, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n SkuProperties: string, // MS CM EA/MCA resv reco 2024-05-01 -- Renamed for MCA\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 TotalCostWithReservedInstancesJson: string, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces and flag as JSON\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\": \"CostWithNoReservedInstancesJson\", \"Properties\": { \"Field\": \"CostWithNoReservedInstancesJson\" } },\r\n { \"Column\": \"FirstUsageDate\", \"Properties\": { \"Field\": \"FirstUsageDate\" } },\r\n { \"Column\": \"InstanceFlexibilityGroup\", \"Properties\": { \"Field\": \"InstanceFlexibilityGroup\" } },\r\n { \"Column\": \"InstanceFlexibilityRatio\", \"Properties\": { \"Field\": \"InstanceFlexibilityRatio\" } },\r\n { \"Column\": \"Location\", \"Properties\": { \"Field\": \"Location\" } },\r\n { \"Column\": \"LookBackPeriod\", \"Properties\": { \"Field\": \"LookBackPeriod\" } },\r\n { \"Column\": \"MeterId\", \"Properties\": { \"Field\": \"MeterId\" } },\r\n { \"Column\": \"NetSavings\", \"Properties\": { \"Field\": \"NetSavings\" } },\r\n { \"Column\": \"NetSavingsJson\", \"Properties\": { \"Field\": \"NetSavingsJson\" } },\r\n { \"Column\": \"NormalizedSize\", \"Properties\": { \"Field\": \"NormalizedSize\" } },\r\n { \"Column\": \"RecommendedQuantity\", \"Properties\": { \"Field\": \"RecommendedQuantity\" } },\r\n { \"Column\": \"RecommendedQuantityNormalized\", \"Properties\": { \"Field\": \"RecommendedQuantityNormalized\" } },\r\n { \"Column\": \"ResourceType\", \"Properties\": { \"Field\": \"ResourceType\" } },\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\": \"SubscriptionId\", \"Properties\": { \"Field\": \"SubscriptionId\" } },\r\n { \"Column\": \"Term\", \"Properties\": { \"Field\": \"Term\" } },\r\n { \"Column\": \"TotalCostWithReservedInstances\", \"Properties\": { \"Field\": \"TotalCostWithReservedInstances\" } },\r\n { \"Column\": \"TotalCostWithReservedInstancesJson\", \"Properties\": { \"Field\": \"TotalCostWithReservedInstancesJson\" } },\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 | extend x_IngestionTime = ingestion_time()\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 // Convert JSON cost columns to decimal\r\n | extend CostWithNoReservedInstances = case(isnotempty(CostWithNoReservedInstances), CostWithNoReservedInstances, isnotempty(CostWithNoReservedInstancesJson), todecimal(extract(@'\"value\":([0-9\\.]+)', 1, CostWithNoReservedInstancesJson)), CostWithNoReservedInstances)\r\n | extend NetSavings = case(isnotempty(NetSavings), NetSavings, isnotempty(NetSavingsJson), todecimal(extract(@'\"value\":([0-9\\.]+)', 1, NetSavingsJson)), NetSavings)\r\n | extend TotalCostWithReservedInstances = case(isnotempty(TotalCostWithReservedInstances), TotalCostWithReservedInstances, isnotempty(TotalCostWithReservedInstancesJson), todecimal(extract(@'\"value\":([0-9\\.]+)', 1, TotalCostWithReservedInstancesJson)), TotalCostWithReservedInstances)\r\n //\r\n // Build recommendation details\r\n | lookup kind=leftouter (database('Ingestion').Regions | summarize RegionName = make_set(RegionName)[0] by Location = RegionId) 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 LookBackPeriod matches regex @'^[0-9]+$', strcat('P', LookBackPeriod, 'D'),\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 | extend x_RecommendationDate = FirstUsageDate + (toint(extract(@'^P([0-9]+)D$', 1, tostring(x_RecommendationDetails.LookbackPeriodDuration))) * 1d)\r\n | extend x_RecommendationDate = iff(x_RecommendationDate > now(), startofday(now()), x_RecommendationDate)\r\n | project\r\n ProviderName,\r\n SubAccountId = iff(isnotempty(SubscriptionId), strcat('/subscriptions/', SubscriptionId), ''),\r\n x_IngestionTime,\r\n x_EffectiveCostAfter = TotalCostWithReservedInstances,\r\n x_EffectiveCostBefore = CostWithNoReservedInstances,\r\n x_EffectiveCostSavings = NetSavings,\r\n x_RecommendationDate,\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 // TODO: Handle 0\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 (for example, \"Costs()\").\r\n// - Every supported version of FOCUS should have a corresponding function (for example, \"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], '')]", @@ -1776,8 +1750,8 @@ "Standard_L32s_v3": 32 } }, - "resources": { - "cluster::ingestionDb::OpenDataFunctions_resource_type_1": { + "resources": [ + { "type": "Microsoft.Kusto/clusters/databases/scripts", "apiVersion": "2023-08-15", "name": "[format('{0}/{1}/{2}', parameters('clusterName'), 'Ingestion', 'OpenDataFunctions_resource_type_1')]", @@ -1787,10 +1761,10 @@ "forceUpdateTag": "[parameters('forceUpdateTag')]" }, "dependsOn": [ - "cluster::ingestionDb" + "[resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), 'Ingestion')]" ] }, - "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')]", @@ -1800,10 +1774,10 @@ "forceUpdateTag": "[parameters('forceUpdateTag')]" }, "dependsOn": [ - "cluster::ingestionDb" + "[resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), 'Ingestion')]" ] }, - "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')]", @@ -1813,10 +1787,10 @@ "forceUpdateTag": "[parameters('forceUpdateTag')]" }, "dependsOn": [ - "cluster::ingestionDb" + "[resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), 'Ingestion')]" ] }, - "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')]", @@ -1826,10 +1800,10 @@ "forceUpdateTag": "[parameters('forceUpdateTag')]" }, "dependsOn": [ - "cluster::ingestionDb" + "[resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), 'Ingestion')]" ] }, - "cluster::ingestionDb::openDataScript": { + { "type": "Microsoft.Kusto/clusters/databases/scripts", "apiVersion": "2023-08-15", "name": "[format('{0}/{1}/{2}', parameters('clusterName'), 'Ingestion', 'OpenDataFunctions')]", @@ -1839,14 +1813,14 @@ "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" + "[resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), 'Ingestion')]", + "[resourceId('Microsoft.Kusto/clusters/databases/scripts', parameters('clusterName'), 'Ingestion', 'OpenDataFunctions_resource_type_1')]", + "[resourceId('Microsoft.Kusto/clusters/databases/scripts', parameters('clusterName'), 'Ingestion', 'OpenDataFunctions_resource_type_2')]", + "[resourceId('Microsoft.Kusto/clusters/databases/scripts', parameters('clusterName'), 'Ingestion', 'OpenDataFunctions_resource_type_3')]", + "[resourceId('Microsoft.Kusto/clusters/databases/scripts', parameters('clusterName'), 'Ingestion', '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')]", @@ -1856,26 +1830,25 @@ "forceUpdateTag": "[parameters('forceUpdateTag')]" }, "dependsOn": [ - "cluster::ingestionDb", - "cluster::ingestionDb::openDataScript" + "[resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), 'Ingestion')]", + "[resourceId('Microsoft.Kusto/clusters/databases/scripts', parameters('clusterName'), 'Ingestion', 'OpenDataFunctions')]" ] }, - "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')))]", + "scriptContent": "[replace(replace(replace(replace(variables('$fxv#7'), '$$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')))]", "continueOnErrors": "[parameters('continueOnErrors')]", "forceUpdateTag": "[parameters('forceUpdateTag')]" }, "dependsOn": [ - "cluster::ingestionDb::commonScript", - "dataFactory", - "cluster::ingestionDb" + "[resourceId('Microsoft.Kusto/clusters/databases/scripts', parameters('clusterName'), 'Ingestion', 'CommonFunctions')]", + "[resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), 'Ingestion')]" ] }, - "cluster::hubDb::commonScript": { + { "type": "Microsoft.Kusto/clusters/databases/scripts", "apiVersion": "2023-08-15", "name": "[format('{0}/{1}/{2}', parameters('clusterName'), 'Hub', 'CommonFunctions')]", @@ -1885,91 +1858,59 @@ "forceUpdateTag": "[parameters('forceUpdateTag')]" }, "dependsOn": [ - "cluster::hubDb" + "[resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), 'Hub')]" ] }, - "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)]", + "scriptContent": "[replace(replace(variables('$fxv#9'), '$$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)]", "continueOnErrors": "[parameters('continueOnErrors')]", "forceUpdateTag": "[parameters('forceUpdateTag')]" }, "dependsOn": [ - "cluster::hubDb::commonScript", - "dataFactory", - "cluster::hubDb" + "[resourceId('Microsoft.Kusto/clusters/databases/scripts', parameters('clusterName'), 'Hub', 'CommonFunctions')]", + "[resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), 'Hub')]" ] }, - "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]", + "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]", "role": "AllDatabasesAdmin" }, "dependsOn": [ - "cluster", - "dataFactory" + "[resourceId('Microsoft.Kusto/clusters', parameters('clusterName'))]" ] }, - "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" + "[resourceId('Microsoft.Kusto/clusters', parameters('clusterName'))]" ] }, - "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" + "[resourceId('Microsoft.Kusto/clusters', parameters('clusterName'))]", + "[resourceId('Microsoft.Kusto/clusters/databases/scripts', parameters('clusterName'), 'Ingestion', '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')]", @@ -1984,36 +1925,27 @@ "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]", + "principalId": "[reference(resourceId('Microsoft.Kusto/clusters', parameters('clusterName')), '2023-08-15', 'full').identity.principalId]", "principalType": "ServicePrincipal", "roleDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'ba92f5b4-2d11-453d-a403-e96b0029c9fe')]" }, "dependsOn": [ - "cluster" + "[resourceId('Microsoft.Kusto/clusters', parameters('clusterName'))]" ] }, - "dataExplorerPrivateDnsZone": { + { "condition": "[not(parameters('enablePublicAccess'))]", "type": "Microsoft.Network/privateDnsZones", "apiVersion": "2024-06-01", @@ -2022,7 +1954,7 @@ "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", @@ -2036,10 +1968,10 @@ "registrationEnabled": false }, "dependsOn": [ - "dataExplorerPrivateDnsZone" + "[resourceId('Microsoft.Network/privateDnsZones', variables('dataExplorerPrivateDnsZoneName'))]" ] }, - "dataExplorerEndpoint": { + { "condition": "[not(parameters('enablePublicAccess'))]", "type": "Microsoft.Network/privateEndpoints", "apiVersion": "2023-11-01", @@ -2063,10 +1995,10 @@ ] }, "dependsOn": [ - "cluster" + "[resourceId('Microsoft.Kusto/clusters', parameters('clusterName'))]" ] }, - "dataExplorerPrivateDnsZoneGroup": { + { "condition": "[not(parameters('enablePublicAccess'))]", "type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups", "apiVersion": "2023-11-01", @@ -2100,11 +2032,11 @@ ] }, "dependsOn": [ - "dataExplorerEndpoint", - "dataExplorerPrivateDnsZone" + "[resourceId('Microsoft.Network/privateEndpoints', format('{0}-ep', parameters('clusterName')))]", + "[resourceId('Microsoft.Network/privateDnsZones', variables('dataExplorerPrivateDnsZoneName'))]" ] } - }, + ], "outputs": { "clusterId": { "type": "string", @@ -2118,7 +2050,7 @@ "metadata": { "description": "The ID of the cluster system assigned managed identity." }, - "value": "[reference('cluster', '2023-08-15', 'full').identity.principalId]" + "value": "[reference(resourceId('Microsoft.Kusto/clusters', parameters('clusterName')), '2023-08-15', 'full').identity.principalId]" }, "clusterName": { "type": "string", @@ -2132,7 +2064,7 @@ "metadata": { "description": "The URI of the cluster." }, - "value": "[reference('cluster').uri]" + "value": "[reference(resourceId('Microsoft.Kusto/clusters', parameters('clusterName')), '2023-08-15').uri]" }, "ingestionDbName": { "type": "string", @@ -2159,12 +2091,12 @@ } }, "dependsOn": [ - "dataFactory", - "storage", - "vnet" + "[resourceId('Microsoft.DataFactory/factories', variables('dataFactoryName'))]", + "[resourceId('Microsoft.Resources/deployments', 'storage')]", + "[resourceId('Microsoft.Resources/deployments', 'vnet')]" ] }, - "dataFactoryResources": { + { "type": "Microsoft.Resources/deployments", "apiVersion": "2022-09-01", "name": "dataFactoryResources", @@ -2190,26 +2122,24 @@ "value": "[parameters('tagsByResource')]" }, "storageAccountName": { - "value": "[reference('storage').outputs.name.value]" + "value": "[reference(resourceId('Microsoft.Resources/deployments', 'storage'), '2022-09-01').outputs.name.value]" }, "exportContainerName": { - "value": "[reference('storage').outputs.exportContainer.value]" + "value": "[reference(resourceId('Microsoft.Resources/deployments', 'storage'), '2022-09-01').outputs.exportContainer.value]" }, "configContainerName": { - "value": "[reference('storage').outputs.configContainer.value]" + "value": "[reference(resourceId('Microsoft.Resources/deployments', 'storage'), '2022-09-01').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]" + "value": "[reference(resourceId('Microsoft.Resources/deployments', 'storage'), '2022-09-01').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))]", + "keyVaultName": "[if(empty(parameters('remoteHubStorageKey')), createObject('value', ''), createObject('value', reference(resourceId('Microsoft.Resources/deployments', 'keyVault'), '2022-09-01').outputs.name.value))]", "remoteHubStorageUri": { "value": "[parameters('remoteHubStorageUri')]" }, @@ -2225,7 +2155,7 @@ "_generator": { "name": "bicep", "version": "0.33.93.31351", - "templateHash": "12735875725202531386" + "templateHash": "12998070848171971309" } }, "functions": [ @@ -2271,6 +2201,58 @@ "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'))]" } + }, + "getExportBodyV2": { + "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" + }, + { + "type": "string", + "name": "recommendationScope" + }, + { + "type": "string", + "name": "recommendationLookbackPeriod" + }, + { + "type": "string", + "name": "resourceType" + } + ], + "output": { + "type": "string", + "value": "[if(equals(toLower(parameters('datasetType')), 'focuscost'), 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/@{{toLower(concat(variables(''finOpsHub''), ''-{9}-costdetails''))}}\", \"name\": \"@{{toLower(concat(variables(''finOpsHub''), ''-{10}-costdetails''))}}\", \"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'), if(parameters('isMonthly'), 'monthly', 'daily'), if(parameters('isMonthly'), 'monthly', 'daily')), if(equals(toLower(parameters('datasetType')), 'reservationdetails'), 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/@{{toLower(concat(variables(''finOpsHub''), ''-{9}-{10}''))}}\", \"name\": \"@{{toLower(concat(variables(''finOpsHub''), ''-{11}-{12}''))}}\", \"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'), if(parameters('isMonthly'), 'monthly', 'daily'), toLower(parameters('datasetType')), if(parameters('isMonthly'), 'monthly', 'daily'), toLower(parameters('datasetType'))), if(or(equals(toLower(parameters('datasetType')), 'pricesheet'), equals(toLower(parameters('datasetType')), 'reservationtransactions')), format('{{ \"properties\": {{ \"definition\": {{ \"dataSet\": {{ \"configuration\": {{ \"dataVersion\": \"{0}\", \"filters\": [] }}}}, \"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/@{{toLower(concat(variables(''finOpsHub''), ''-{9}-{10}''))}}\", \"name\": \"@{{toLower(concat(variables(''finOpsHub''), ''-{11}-{12}''))}}\", \"type\": \"Microsoft.CostManagement/reports\", \"identity\": {{ \"type\": \"systemAssigned\" }}, \"location\": \"global\" }}', parameters('schemaVersion'), if(parameters('isMonthly'), 'TheCurrentMonth', 'MonthToDate'), parameters('datasetType'), parameters('exportContainerName'), if(parameters('isMonthly'), 'Monthly', 'Daily'), parameters('exportFormat'), parameters('partitionData'), parameters('dataOverwriteBehavior'), parameters('compressionMode'), if(parameters('isMonthly'), 'monthly', 'daily'), toLower(parameters('datasetType')), if(parameters('isMonthly'), 'monthly', 'daily'), toLower(parameters('datasetType'))), if(equals(toLower(parameters('datasetType')), 'reservationrecommendations'), format('{{ \"properties\": {{ \"definition\": {{ \"dataSet\": {{ \"configuration\": {{ \"dataVersion\": \"{0}\", \"filters\": [ {{ \"name\": \"reservationScope\", \"value\": \"{1}\" }}, {{ \"name\": \"resourceType\", \"value\": \"{2}\" }}, {{ \"name\": \"lookBackPeriod\", \"value\": \"{3}\" }}] }}}}, \"timeframe\": \"{4}\", \"type\": \"{5}\" }}, \"deliveryInfo\": {{ \"destination\": {{ \"container\": \"{6}\", \"rootFolderPath\": \"@{{if(startswith(item().scope, ''/''), substring(item().scope, 1, sub(length(item().scope), 1)) ,item().scope)}}\", \"type\": \"AzureBlob\", \"resourceId\": \"@{{variables(''storageAccountId'')}}\" }} }}, \"schedule\": {{ \"recurrence\": \"{7}\", \"recurrencePeriod\": {{ \"from\": \"2024-01-01T00:00:00.000Z\", \"to\": \"2050-02-01T00:00:00.000Z\" }}, \"status\": \"Inactive\" }}, \"format\": \"{8}\", \"partitionData\": \"{9}\", \"dataOverwriteBehavior\": \"{10}\", \"compressionMode\": \"{11}\" }}, \"id\": \"@{{variables(''resourceManagementUri'')}}@{{item().scope}}/providers/Microsoft.CostManagement/exports/@{{toLower(concat(variables(''finOpsHub''), ''-{12}-costdetails''))}}\", \"name\": \"@{{toLower(concat(variables(''finOpsHub''), ''-{13}-costdetails''))}}\", \"type\": \"Microsoft.CostManagement/reports\", \"identity\": {{ \"type\": \"systemAssigned\" }}, \"location\": \"global\" }}', parameters('schemaVersion'), parameters('recommendationScope'), parameters('resourceType'), parameters('recommendationLookbackPeriod'), if(parameters('isMonthly'), 'TheLastMonth', 'MonthToDate'), parameters('datasetType'), parameters('exportContainerName'), if(parameters('isMonthly'), 'Monthly', 'Daily'), parameters('exportFormat'), parameters('partitionData'), parameters('dataOverwriteBehavior'), parameters('compressionMode'), if(parameters('isMonthly'), 'monthly', 'daily'), if(parameters('isMonthly'), 'monthly', 'daily')), 'undefined'))))]" + } } } } @@ -2399,7 +2381,9 @@ "$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", + "exportSchemaVersion": "2023-05-01", + "reservationDetailsSchemaVersion": "2023-03-01", + "ftkVersion": "0.9", "exportApiVersion": "2023-07-01-preview", "hubDataExplorerName": "hubDataExplorer", "deployDataExplorer": "[not(empty(parameters('dataExplorerId')))]", @@ -2434,8 +2418,7 @@ "[variables('monthlyTriggerName')]" ], "autoStartRbacRoles": [ - "673868aa-7521-48a0-acc6-0f60742d39f5", - "e40ec5ca-96e0-45a2-b4ff-59039f2c2b59" + "673868aa-7521-48a0-acc6-0f60742d39f5" ], "storageRbacRoles": [ "17d1049b-9a84-46fb-8f53-869881c3d3ab", @@ -2458,6 +2441,7 @@ "name": "[parameters('storageAccountName')]" }, "keyVault": { + "condition": "[not(empty(parameters('remoteHubStorageUri')))]", "existing": true, "type": "Microsoft.KeyVault/vaults", "apiVersion": "2023-02-01", @@ -2526,7 +2510,7 @@ ] }, "keyVaultManagedPrivateEndpoint": { - "condition": "[not(parameters('enablePublicAccess'))]", + "condition": "[and(not(empty(parameters('remoteHubStorageUri'))), not(parameters('enablePublicAccess')))]", "type": "Microsoft.DataFactory/factories/managedVirtualNetworks/managedPrivateEndpoints", "apiVersion": "2018-06-01", "name": "[format('{0}/{1}/{2}', parameters('dataFactoryName'), variables('managedVnetName'), parameters('keyVaultName'))]", @@ -2653,7 +2637,7 @@ } }, "kind": "AzurePowerShell", - "tags": "[parameters('tags')]", + "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Resources/deploymentScripts'), createObject()))]", "properties": { "azPowerShellVersion": "8.0", "retentionInterval": "PT1H", @@ -2685,6 +2669,7 @@ ] }, "linkedService_keyVault": { + "condition": "[not(empty(parameters('remoteHubStorageUri')))]", "type": "Microsoft.DataFactory/factories/linkedservices", "apiVersion": "2018-06-01", "name": "[format('{0}/{1}', parameters('dataFactoryName'), parameters('keyVaultName'))]", @@ -3249,6 +3234,7 @@ "timeZone": "[reference('azuretimezones').outputs.Timezone.value]", "schedule": { "monthDays": [ + 2, 5, 19 ] @@ -4522,7 +4508,7 @@ "userProperties": [], "typeProperties": { "expression": { - "value": "@and(equals(toLower(item().properties.schedule.recurrence), toLower(pipeline().parameters.Recurrence)),startswith(toLower(item().name), toLower(variables('hubName'))))", + "value": "@and( startswith(toLower(item().name), toLower(variables('hubName'))), and(contains(string(item().properties.schedule), 'recurrence'), equals(toLower(item().properties.schedule.recurrence), toLower(pipeline().parameters.Recurrence))))", "type": "Expression" }, "ifTrueActivities": [ @@ -4548,7 +4534,7 @@ "x-ms-command-name": "[format('FinOpsToolkit.Hubs.config_RunExportJobs@{0}', variables('ftkVersion'))]", "ClientType": "[format('FinOpsToolkit.Hubs@{0}', variables('ftkVersion'))]" }, - "body": "{}", + "body": " ", "authentication": { "type": "MSI", "resource": { @@ -4737,45 +4723,7 @@ "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", + "name": "Set Export Type", "type": "SetVariable", "dependsOn": [], "policy": { @@ -4784,73 +4732,436 @@ }, "userProperties": [], "typeProperties": { - "variableName": "exportName", + "variableName": "exportScopeType", "value": { - "value": "@toLower(concat(variables('finOpsHub'), '-daily-costdetails'))", + "value": "@if(contains(toLower(item().scope), 'providers/microsoft.billing/billingaccounts'), if(contains(toLower(item().scope), ':'), 'mca', 'ea'), if(contains(toLower(item().scope), 'subscriptions/'), 'subscription', 'undefined'))", "type": "Expression" } } }, { - "name": "Create or update closed month focus export", - "type": "WebActivity", + "name": "Switch Export Type", + "type": "Switch", "dependsOn": [ { - "activity": "Set closed month focus export name", + "activity": "Set Export Type", "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')]", + "on": { + "value": "@toLower(variables('exportScopeType'))", "type": "Expression" }, - "authentication": { - "type": "MSI", - "resource": { - "value": "@variables('ResourceManagementUri')", - "type": "Expression" + "cases": [ + { + "value": "ea", + "activities": [ + { + "name": "EA open month focus export", + "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/@{{toLower(concat(variables(''finOpsHub''), ''-daily-costdetails''))}}?api-version={0}', variables('exportApiVersion'))]", + "type": "Expression" + }, + "method": "PUT", + "body": { + "value": "[__bicep.getExportBodyV2(parameters('exportContainerName'), 'FocusCost', variables('focusSchemaVersion'), false(), 'Parquet', 'Snappy', 'true', 'CreateNewReport', '', '', '')]", + "type": "Expression" + }, + "headers": { + "x-ms-command-name": "[format('FinOpsToolkit.Hubs.config_RunExportJobs.CostsDaily@{0}', variables('ftkVersion'))]", + "ClientType": "[format('FinOpsToolkit.Hubs@{0}', variables('ftkVersion'))]" + }, + "authentication": { + "type": "MSI", + "resource": { + "value": "@variables('resourceManagementUri')", + "type": "Expression" + } + } + } + }, + { + "name": "EA closed month focus export", + "type": "WebActivity", + "dependsOn": [ + { + "activity": "EA open month focus export", + "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/@{{toLower(concat(variables(''finOpsHub''), ''-monthly-costdetails''))}}?api-version={0}', variables('exportApiVersion'))]", + "type": "Expression" + }, + "method": "PUT", + "body": { + "value": "[__bicep.getExportBodyV2(parameters('exportContainerName'), 'FocusCost', variables('focusSchemaVersion'), true(), 'Parquet', 'Snappy', 'true', 'CreateNewReport', '', '', '')]", + "type": "Expression" + }, + "headers": { + "x-ms-command-name": "[format('FinOpsToolkit.Hubs.config_RunExportJobs.CostsMonthly@{0}', variables('ftkVersion'))]", + "ClientType": "[format('FinOpsToolkit.Hubs@{0}', variables('ftkVersion'))]" + }, + "authentication": { + "type": "MSI", + "resource": { + "value": "@variables('resourceManagementUri')", + "type": "Expression" + } + } + } + }, + { + "name": "EA monthly pricesheet export", + "type": "WebActivity", + "dependsOn": [ + { + "activity": "EA closed month focus export", + "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/@{{toLower(concat(variables(''finOpsHub''), ''-monthly-pricesheet''))}}?api-version={0}', variables('exportApiVersion'))]", + "type": "Expression" + }, + "method": "PUT", + "body": { + "value": "[__bicep.getExportBodyV2(parameters('exportContainerName'), 'Pricesheet', variables('exportSchemaVersion'), true(), 'Parquet', 'Snappy', 'true', 'CreateNewReport', '', '', '')]", + "type": "Expression" + }, + "headers": { + "x-ms-command-name": "[format('FinOpsToolkit.Hubs.config_RunExportJobs.Prices@{0}', variables('ftkVersion'))]", + "ClientType": "[format('FinOpsToolkit.Hubs@{0}', variables('ftkVersion'))]" + }, + "authentication": { + "type": "MSI", + "resource": { + "value": "@variables('resourceManagementUri')", + "type": "Expression" + } + } + } + }, + { + "name": "Trigger EA monthly pricesheet export", + "type": "WebActivity", + "dependsOn": [ + { + "activity": "EA monthly pricesheet export", + "dependencyConditions": [ + "Succeeded" + ] + } + ], + "policy": { + "timeout": "0.00:05:00", + "retry": 0, + "retryIntervalInSeconds": 30, + "secureOutput": false, + "secureInput": false + }, + "userProperties": [], + "typeProperties": { + "method": "POST", + "url": { + "value": "[format('@{{variables(''resourceManagementUri'')}}@{{item().scope}}/providers/Microsoft.CostManagement/exports/@{{toLower(concat(variables(''finOpsHub''), ''-monthly-pricesheet''))}}/run?api-version={0}', variables('exportApiVersion'))]", + "type": "Expression" + }, + "headers": { + "x-ms-command-name": "[format('FinOpsToolkit.Hubs.config_RunExportJobs.Prices@{0}', variables('ftkVersion'))]", + "ClientType": "[format('FinOpsToolkit.Hubs@{0}', variables('ftkVersion'))]" + }, + "body": " ", + "authentication": { + "type": "MSI", + "resource": { + "value": "@variables('resourceManagementUri')", + "type": "Expression" + } + } + } + }, + { + "name": "EA daily reservation details export", + "type": "WebActivity", + "dependsOn": [ + { + "activity": "EA monthly pricesheet export", + "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/@{{toLower(concat(variables(''finOpsHub''), ''-daily-reservationdetails''))}}?api-version={0}', variables('exportApiVersion'))]", + "type": "Expression" + }, + "method": "PUT", + "body": { + "value": "[__bicep.getExportBodyV2(parameters('exportContainerName'), 'ReservationDetails', variables('reservationDetailsSchemaVersion'), false(), 'CSV', 'None', 'true', 'CreateNewReport', '', '', '')]", + "type": "Expression" + }, + "headers": { + "x-ms-command-name": "[format('FinOpsToolkit.Hubs.config_RunExportJobs.ReservationDetails@{0}', variables('ftkVersion'))]", + "ClientType": "[format('FinOpsToolkit.Hubs@{0}', variables('ftkVersion'))]" + }, + "authentication": { + "type": "MSI", + "resource": { + "value": "@variables('resourceManagementUri')", + "type": "Expression" + } + } + } + }, + { + "name": "EA daily reservation transactions export", + "type": "WebActivity", + "dependsOn": [ + { + "activity": "EA daily reservation details export", + "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/@{{toLower(concat(variables(''finOpsHub''), ''-daily-reservationtransactions''))}}?api-version={0}', variables('exportApiVersion'))]", + "type": "Expression" + }, + "method": "PUT", + "body": { + "value": "[__bicep.getExportBodyV2(parameters('exportContainerName'), 'ReservationTransactions', variables('exportSchemaVersion'), false(), 'CSV', 'None', 'true', 'CreateNewReport', '', '', '')]", + "type": "Expression" + }, + "headers": { + "x-ms-command-name": "[format('FinOpsToolkit.Hubs.config_RunExportJobs.ReservationTransactions@{0}', variables('ftkVersion'))]", + "ClientType": "[format('FinOpsToolkit.Hubs@{0}', variables('ftkVersion'))]" + }, + "authentication": { + "type": "MSI", + "resource": { + "value": "@variables('resourceManagementUri')", + "type": "Expression" + } + } + } + }, + { + "name": "EA daily shared 30day virtualmachines", + "type": "WebActivity", + "dependsOn": [ + { + "activity": "EA daily reservation transactions export", + "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/@{{toLower(concat(variables(''finOpsHub''), ''-daily-recommendations-shared-last30days-virtualmachines''))}}?api-version={0}', variables('exportApiVersion'))]", + "type": "Expression" + }, + "method": "PUT", + "body": { + "value": "[__bicep.getExportBodyV2(parameters('exportContainerName'), 'ReservationRecommendations', variables('exportSchemaVersion'), false(), 'CSV', 'None', 'true', 'CreateNewReport', 'Shared', 'Last30Days', 'VirtualMachines')]", + "type": "Expression" + }, + "headers": { + "x-ms-command-name": "[format('FinOpsToolkit.Hubs.config_RunExportJobs.ReservationRecommendations.VM.Shared.30d@{0}', variables('ftkVersion'))]", + "ClientType": "[format('FinOpsToolkit.Hubs@{0}', variables('ftkVersion'))]" + }, + "authentication": { + "type": "MSI", + "resource": { + "value": "@variables('resourceManagementUri')", + "type": "Expression" + } + } + } + } + ] + }, + { + "value": "subscription", + "activities": [ + { + "name": "Subscription open month focus export", + "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/@{{toLower(concat(variables(''finOpsHub''), ''-daily-costdetails''))}}?api-version={0}', variables('exportApiVersion'))]", + "type": "Expression" + }, + "method": "PUT", + "body": { + "value": "[__bicep.getExportBodyV2(parameters('exportContainerName'), 'FocusCost', variables('focusSchemaVersion'), false(), 'Parquet', 'Snappy', 'true', 'CreateNewReport', '', '', '')]", + "type": "Expression" + }, + "headers": { + "x-ms-command-name": "[format('FinOpsToolkit.Hubs.config_RunExportJobs.CostsDaily@{0}', variables('ftkVersion'))]", + "ClientType": "[format('FinOpsToolkit.Hubs@{0}', variables('ftkVersion'))]" + }, + "authentication": { + "type": "MSI", + "resource": { + "value": "@variables('resourceManagementUri')", + "type": "Expression" + } + } + } + }, + { + "name": "Subscription closed month focus export", + "type": "WebActivity", + "dependsOn": [ + { + "activity": "Subscription open month focus export", + "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/@{{toLower(concat(variables(''finOpsHub''), ''-monthly-costdetails''))}}?api-version={0}', variables('exportApiVersion'))]", + "type": "Expression" + }, + "method": "PUT", + "body": { + "value": "[__bicep.getExportBodyV2(parameters('exportContainerName'), 'FocusCost', variables('focusSchemaVersion'), true(), 'Parquet', 'Snappy', 'true', 'CreateNewReport', '', '', '')]", + "type": "Expression" + }, + "headers": { + "x-ms-command-name": "[format('FinOpsToolkit.Hubs.config_RunExportJobs.CostsMonthly@{0}', variables('ftkVersion'))]", + "ClientType": "[format('FinOpsToolkit.Hubs@{0}', variables('ftkVersion'))]" + }, + "authentication": { + "type": "MSI", + "resource": { + "value": "@variables('resourceManagementUri')", + "type": "Expression" + } + } + } + } + ] + }, + { + "value": "mca", + "activities": [ + { + "name": "Export Type Unsupported Error", + "type": "Fail", + "dependsOn": [], + "userProperties": [], + "typeProperties": { + "message": { + "value": "@concat('MCA agreements are not supported for managed exports :',variables('exportScope'))", + "type": "Expression" + }, + "errorCode": "ExportTypeUnsupported" + } + } + ] } - } - } - }, - { - "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" - } + ], + "defaultActivities": [ + { + "name": "Export Type Not Defined Error", + "type": "Fail", + "dependsOn": [], + "userProperties": [], + "typeProperties": { + "message": { + "value": "@concat('Unable to determine the export scope type for :',variables('exportScope'))", + "type": "Expression" + }, + "errorCode": "ExportTypeNotDefined" + } + } + ] } } ] @@ -4868,6 +5179,9 @@ "exportScope": { "type": "String" }, + "exportScopeType": { + "type": "String" + }, "storageAccountId": { "type": "String", "defaultValue": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]" @@ -4894,7 +5208,7 @@ "dataset_config" ], "metadata": { - "description": "Creates Cost Management exports for all scopes." + "description": "Creates Cost Management exports for supported scopes." } }, "pipeline_ExecuteExportsETL": { @@ -5538,7 +5852,7 @@ "typeProperties": { "variableName": "destinationFolder", "value": { - "value": "@replace(concat(variables('hubDataset'),'/',substring(variables('date'), 0, 4),'/',substring(variables('date'), 4, 2),'/',toLower(variables('scope'))),'//','/')", + "value": "@replace(concat(variables('hubDataset'),'/',substring(variables('date'), 0, 4),'/',substring(variables('date'), 4, 2),'/',toLower(variables('scope')), if(equals(variables('hubDataset'), 'Recommendations'), activity('Read Manifest').output.firstRow.exportConfig.exportName, '')),'//','/')", "type": "Expression" } } @@ -7390,7 +7704,7 @@ ] }, "getKeyVaultPrivateEndpointConnections": { - "condition": "[not(parameters('enablePublicAccess'))]", + "condition": "[and(not(empty(parameters('remoteHubStorageUri'))), not(parameters('enablePublicAccess')))]", "type": "Microsoft.Resources/deployments", "apiVersion": "2022-09-01", "name": "GetKeyVaultPrivateEndpointConnections", @@ -7460,7 +7774,7 @@ ] }, "approveKeyVaultPrivateEndpointConnections": { - "condition": "[not(parameters('enablePublicAccess'))]", + "condition": "[and(not(empty(parameters('remoteHubStorageUri'))), not(parameters('enablePublicAccess')))]", "type": "Microsoft.Resources/deployments", "apiVersion": "2022-09-01", "name": "ApproveKeyVaultPrivateEndpointConnections", @@ -7695,13 +8009,14 @@ } }, "dependsOn": [ - "dataExplorer", - "dataFactory", - "keyVault", - "storage" + "[resourceId('Microsoft.Resources/deployments', 'dataExplorer')]", + "[resourceId('Microsoft.DataFactory/factories', variables('dataFactoryName'))]", + "[resourceId('Microsoft.Resources/deployments', 'keyVault')]", + "[resourceId('Microsoft.Resources/deployments', 'storage')]" ] }, - "keyVault": { + { + "condition": "[not(empty(parameters('remoteHubStorageKey')))]", "type": "Microsoft.Resources/deployments", "apiVersion": "2022-09-01", "name": "keyVault", @@ -7732,12 +8047,12 @@ "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))]", + "virtualNetworkId": "[if(parameters('enablePublicAccess'), createObject('value', ''), createObject('value', reference(resourceId('Microsoft.Resources/deployments', 'vnet'), '2022-09-01').outputs.vNetId.value))]", + "privateEndpointSubnetId": "[if(parameters('enablePublicAccess'), createObject('value', ''), createObject('value', reference(resourceId('Microsoft.Resources/deployments', 'vnet'), '2022-09-01').outputs.finopsHubSubnetId.value))]", "accessPolicies": { "value": [ { - "objectId": "[reference('dataFactory', '2018-06-01', 'full').identity.principalId]", + "objectId": "[reference(resourceId('Microsoft.DataFactory/factories', variables('dataFactoryName')), '2018-06-01', 'full').identity.principalId]", "tenantId": "[subscription().tenantId]", "permissions": { "secrets": [ @@ -8010,11 +8325,11 @@ } }, "dependsOn": [ - "dataFactory", - "vnet" + "[resourceId('Microsoft.DataFactory/factories', variables('dataFactoryName'))]", + "[resourceId('Microsoft.Resources/deployments', 'vnet')]" ] } - }, + ], "outputs": { "name": { "type": "string", @@ -8042,56 +8357,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('storage').outputs.resourceId.value]" + "value": "[reference(resourceId('Microsoft.Resources/deployments', 'storage'), '2022-09-01').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]" + "value": "[reference(resourceId('Microsoft.Resources/deployments', 'storage'), '2022-09-01').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)]" + "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)]" }, "clusterId": { "type": "string", "metadata": { "description": "The resource ID of the Data Explorer cluster." }, - "value": "[if(not(variables('deployDataExplorer')), '', reference('dataExplorer').outputs.clusterId.value)]" + "value": "[if(not(variables('deployDataExplorer')), '', reference(resourceId('Microsoft.Resources/deployments', 'dataExplorer'), '2022-09-01').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)]" + "value": "[if(not(variables('deployDataExplorer')), '', reference(resourceId('Microsoft.Resources/deployments', 'dataExplorer'), '2022-09-01').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)]" + "value": "[if(not(variables('deployDataExplorer')), '', reference(resourceId('Microsoft.Resources/deployments', 'dataExplorer'), '2022-09-01').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)]" + "value": "[if(not(variables('deployDataExplorer')), '', reference(resourceId('Microsoft.Resources/deployments', 'dataExplorer'), '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('dataFactory', '2018-06-01', 'full').identity.principalId]" + "value": "[reference(resourceId('Microsoft.DataFactory/factories', variables('dataFactoryName')), '2018-06-01', 'full').identity.principalId]" }, "managedIdentityTenantId": { "type": "string", @@ -8109,28 +8424,28 @@ "name": { "type": "string", "metadata": { - "description": "The name of the resource group." + "description": "Name of the resource group." }, "value": "[parameters('hubName')]" }, "location": { "type": "string", "metadata": { - "description": "The location the resources wer deployed to." + "description": "Azure resource location resources were deployed to." }, "value": "[parameters('location')]" }, "dataFactoryName": { "type": "string", "metadata": { - "description": "Name of the Data Factory." + "description": "Name of the Data Factory instance." }, "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." + "description": "Resource ID of the deployed storage account." }, "value": "[reference(resourceId('Microsoft.Resources/deployments', 'hub'), '2022-09-01').outputs.storageAccountId.value]" }, @@ -8151,28 +8466,28 @@ "clusterId": { "type": "string", "metadata": { - "description": "The resource ID of the Data Explorer cluster." + "description": "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." + "description": "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." + "description": "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." + "description": "Name of the Data Explorer database used for querying data." }, "value": "[reference(resourceId('Microsoft.Resources/deployments', 'hub'), '2022-09-01').outputs.hubDbName.value]" }, diff --git a/docs/deploy/finops-workbooks-0.9.json b/docs/deploy/finops-workbooks-0.9.json new file mode 100644 index 000000000..0bc028dba --- /dev/null +++ b/docs/deploy/finops-workbooks-0.9.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": "11991660695586825676" + } + }, + "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.9", + "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": "1125613636439918208" + } + }, + "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.9", + "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": "258776034749682521" + } + }, + "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.9", + "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.9.ui.json b/docs/deploy/finops-workbooks-0.9.ui.json new file mode 100644 index 000000000..adf646b7a --- /dev/null +++ b/docs/deploy/finops-workbooks-0.9.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 (for example, '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 a55d7e08f..0bc028dba 100644 --- a/docs/deploy/finops-workbooks-latest.json +++ b/docs/deploy/finops-workbooks-latest.json @@ -5,7 +5,7 @@ "_generator": { "name": "bicep", "version": "0.33.93.31351", - "templateHash": "12338140091055370020" + "templateHash": "11991660695586825676" } }, "parameters": { @@ -61,7 +61,7 @@ }, "variables": { "telemetryId": "00f120b5-2007-6120-0000-a7730126b006", - "finOpsToolkitVersion": "0.8", + "finOpsToolkitVersion": "0.9", "resourceTags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Insights/workbooks'), createObject()), createObject('ftk-version', variables('finOpsToolkitVersion'), 'ftk-tool', 'FinOps workbooks'))]" }, "resources": [ @@ -116,7 +116,7 @@ "_generator": { "name": "bicep", "version": "0.33.93.31351", - "templateHash": "10544991197071991923" + "templateHash": "1125613636439918208" } }, "parameters": { @@ -12575,7 +12575,7 @@ "workbookJson": "[string(variables('$fxv#0'))]", "workbookId": "0b2", "telemetryId": "[format('00f120b5-2007-6120-0000-{0}30126b006', variables('workbookId'))]", - "finOpsToolkitVersion": "0.8", + "finOpsToolkitVersion": "0.9", "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": [ @@ -12666,7 +12666,7 @@ "_generator": { "name": "bicep", "version": "0.33.93.31351", - "templateHash": "10054098441393474777" + "templateHash": "258776034749682521" } }, "parameters": { @@ -20839,7 +20839,7 @@ "workbookJson": "[string(variables('$fxv#0'))]", "workbookId": "907", "telemetryId": "[format('00f120b5-2007-6120-0000-{0}30126b006', variables('workbookId'))]", - "finOpsToolkitVersion": "0.8", + "finOpsToolkitVersion": "0.9", "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/finops-workbooks-latest.ui.json b/docs/deploy/finops-workbooks-latest.ui.json index 0c6148af6..adf646b7a 100644 --- a/docs/deploy/finops-workbooks-latest.ui.json +++ b/docs/deploy/finops-workbooks-latest.ui.json @@ -19,7 +19,7 @@ "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').", + "toolTip": "Prefix to use for each of the workbook names (for example, 'FinOps-Optimization', 'FinOps-Governance').", "constraints": { "required": true, "regex": "^.{1,220}$", diff --git a/docs/deploy/governance-workbook-0.9.json b/docs/deploy/governance-workbook-0.9.json new file mode 100644 index 000000000..598257e59 --- /dev/null +++ b/docs/deploy/governance-workbook-0.9.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": "258776034749682521" + } + }, + "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.9", + "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.9.ui.json b/docs/deploy/governance-workbook-0.9.ui.json new file mode 100644 index 000000000..6646035df --- /dev/null +++ b/docs/deploy/governance-workbook-0.9.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 b02d65cc5..598257e59 100644 --- a/docs/deploy/governance-workbook-latest.json +++ b/docs/deploy/governance-workbook-latest.json @@ -5,7 +5,7 @@ "_generator": { "name": "bicep", "version": "0.33.93.31351", - "templateHash": "10054098441393474777" + "templateHash": "258776034749682521" } }, "parameters": { @@ -8178,7 +8178,7 @@ "workbookJson": "[string(variables('$fxv#0'))]", "workbookId": "907", "telemetryId": "[format('00f120b5-2007-6120-0000-{0}30126b006', variables('workbookId'))]", - "finOpsToolkitVersion": "0.8", + "finOpsToolkitVersion": "0.9", "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.9/azuredeploy-nested.bicep b/docs/deploy/optimization-engine/0.9/azuredeploy-nested.bicep new file mode 100644 index 000000000..d05e2408a --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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 (for example, 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.9/azuredeploy.bicep b/docs/deploy/optimization-engine/0.9/azuredeploy.bicep new file mode 100644 index 000000000..0a09fce3b --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/data-collection/Export-AADObjectsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/data-collection/Export-AADObjectsToBlobStorage.ps1 new file mode 100644 index 000000000..8bc12d759 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/data-collection/Export-ARGAppGatewayPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/data-collection/Export-ARGAppGatewayPropertiesToBlobStorage.ps1 new file mode 100644 index 000000000..39e908398 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/data-collection/Export-ARGAppServicePlanPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/data-collection/Export-ARGAppServicePlanPropertiesToBlobStorage.ps1 new file mode 100644 index 000000000..7e54b8420 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/data-collection/Export-ARGAvailabilitySetPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/data-collection/Export-ARGAvailabilitySetPropertiesToBlobStorage.ps1 new file mode 100644 index 000000000..b8d1cf9c9 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/data-collection/Export-ARGLoadBalancerPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/data-collection/Export-ARGLoadBalancerPropertiesToBlobStorage.ps1 new file mode 100644 index 000000000..54602655e --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/data-collection/Export-ARGManagedDisksPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/data-collection/Export-ARGManagedDisksPropertiesToBlobStorage.ps1 new file mode 100644 index 000000000..d6bd5d086 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/data-collection/Export-ARGNICPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/data-collection/Export-ARGNICPropertiesToBlobStorage.ps1 new file mode 100644 index 000000000..547876357 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/data-collection/Export-ARGNSGPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/data-collection/Export-ARGNSGPropertiesToBlobStorage.ps1 new file mode 100644 index 000000000..ea8b4e6c6 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/data-collection/Export-ARGPublicIpPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/data-collection/Export-ARGPublicIpPropertiesToBlobStorage.ps1 new file mode 100644 index 000000000..ebc543003 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/data-collection/Export-ARGResourceContainersPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/data-collection/Export-ARGResourceContainersPropertiesToBlobStorage.ps1 new file mode 100644 index 000000000..70be047cb --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/data-collection/Export-ARGSqlDatabasePropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/data-collection/Export-ARGSqlDatabasePropertiesToBlobStorage.ps1 new file mode 100644 index 000000000..62b041de4 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/data-collection/Export-ARGUnmanagedDisksPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/data-collection/Export-ARGUnmanagedDisksPropertiesToBlobStorage.ps1 new file mode 100644 index 000000000..92bf715bf --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/data-collection/Export-ARGVMSSPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/data-collection/Export-ARGVMSSPropertiesToBlobStorage.ps1 new file mode 100644 index 000000000..0fc85a46d --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/data-collection/Export-ARGVNetPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/data-collection/Export-ARGVNetPropertiesToBlobStorage.ps1 new file mode 100644 index 000000000..2d905ce03 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/data-collection/Export-ARGVirtualMachinesPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/data-collection/Export-ARGVirtualMachinesPropertiesToBlobStorage.ps1 new file mode 100644 index 000000000..5ba0ddbfa --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/data-collection/Export-AdvisorRecommendationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/data-collection/Export-AdvisorRecommendationsToBlobStorage.ps1 new file mode 100644 index 000000000..68acb0c85 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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 (for example, 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.9/runbooks/data-collection/Export-AzMonitorMetricsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/data-collection/Export-AzMonitorMetricsToBlobStorage.ps1 new file mode 100644 index 000000000..0297b5842 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/data-collection/Export-ConsumptionToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/data-collection/Export-ConsumptionToBlobStorage.ps1 new file mode 100644 index 000000000..11dabcb0d --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/data-collection/Export-PolicyComplianceToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/data-collection/Export-PolicyComplianceToBlobStorage.ps1 new file mode 100644 index 000000000..f8493abf5 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/data-collection/Export-PriceSheetToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/data-collection/Export-PriceSheetToBlobStorage.ps1 new file mode 100644 index 000000000..5d042a2f8 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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 (for example, "Virtual Machines,Storage") + + [Parameter(Mandatory = $false)] + [string] $meterRegions # comma-separated billing meter regions (for example, "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.9/runbooks/data-collection/Export-RBACAssignmentsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/data-collection/Export-RBACAssignmentsToBlobStorage.ps1 new file mode 100644 index 000000000..e21b1b2c9 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/data-collection/Export-ReservationsPriceToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/data-collection/Export-ReservationsPriceToBlobStorage.ps1 new file mode 100644 index 000000000..675c0b37f --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/data-collection/Export-ReservationsUsageToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/data-collection/Export-ReservationsUsageToBlobStorage.ps1 new file mode 100644 index 000000000..c51d78fc3 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/data-collection/Export-SavingsPlansUsageToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/data-collection/Export-SavingsPlansUsageToBlobStorage.ps1 new file mode 100644 index 000000000..b48856f2c --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/data-collection/Ingest-OptimizationCSVExportsToLogAnalytics.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/data-collection/Ingest-OptimizationCSVExportsToLogAnalytics.ps1 new file mode 100644 index 000000000..b3be2d52f --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/maintenance/CleanUp-OlderRecommendationsFromSqlServer.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/maintenance/CleanUp-OlderRecommendationsFromSqlServer.ps1 new file mode 100644 index 000000000..e86f49753 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/recommendations/Ingest-RecommendationsToLogAnalytics.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/recommendations/Ingest-RecommendationsToLogAnalytics.ps1 new file mode 100644 index 000000000..f6ff02274 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/recommendations/Ingest-RecommendationsToSQLServer.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/recommendations/Ingest-RecommendationsToSQLServer.ps1 new file mode 100644 index 000000000..eb9d9e963 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/recommendations/Ingest-SuppressionsToLogAnalytics.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/recommendations/Ingest-SuppressionsToLogAnalytics.ps1 new file mode 100644 index 000000000..b37ea56da --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/recommendations/Recommend-AADExpiringCredentialsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/recommendations/Recommend-AADExpiringCredentialsToBlobStorage.ps1 new file mode 100644 index 000000000..8873f6f81 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/recommendations/Recommend-ARMOptimizationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/recommendations/Recommend-ARMOptimizationsToBlobStorage.ps1 new file mode 100644 index 000000000..31d803150 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/recommendations/Recommend-AdvisorAsIsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/recommendations/Recommend-AdvisorAsIsToBlobStorage.ps1 new file mode 100644 index 000000000..c47bb3b39 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/recommendations/Recommend-AdvisorCostAugmentedToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/recommendations/Recommend-AdvisorCostAugmentedToBlobStorage.ps1 new file mode 100644 index 000000000..85399b202 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/recommendations/Recommend-AppServiceOptimizationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/recommendations/Recommend-AppServiceOptimizationsToBlobStorage.ps1 new file mode 100644 index 000000000..ed8e1fe5d --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/recommendations/Recommend-DiskOptimizationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/recommendations/Recommend-DiskOptimizationsToBlobStorage.ps1 new file mode 100644 index 000000000..86a484745 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/recommendations/Recommend-SqlDbOptimizationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/recommendations/Recommend-SqlDbOptimizationsToBlobStorage.ps1 new file mode 100644 index 000000000..dcb3aae36 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/recommendations/Recommend-StorageAccountOptimizationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/recommendations/Recommend-StorageAccountOptimizationsToBlobStorage.ps1 new file mode 100644 index 000000000..431ab4b49 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/runbooks/recommendations/Recommend-StorageAccountOptimizationsToBlobStorage.ps1 @@ -0,0 +1,330 @@ +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) +| summarize arg_max(todatetime(Date_s), Tags_s) by ResourceId; +$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 +| extend Tags_s = iif(Tags_s !startswith "{", strcat('{', Tags_s, '}'), Tags_s) +| extend Tags_s = parse_json(tolower(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] + 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.9/runbooks/recommendations/Recommend-UnattachedDisksToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/recommendations/Recommend-UnattachedDisksToBlobStorage.ps1 new file mode 100644 index 000000000..b2de201b2 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/recommendations/Recommend-UnusedAppGWsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/recommendations/Recommend-UnusedAppGWsToBlobStorage.ps1 new file mode 100644 index 000000000..a1708c117 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/recommendations/Recommend-UnusedLoadBalancersToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/recommendations/Recommend-UnusedLoadBalancersToBlobStorage.ps1 new file mode 100644 index 000000000..ccd2ebe37 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/recommendations/Recommend-VMOptimizationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/recommendations/Recommend-VMOptimizationsToBlobStorage.ps1 new file mode 100644 index 000000000..b09e8490c --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/recommendations/Recommend-VMSSOptimizationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/recommendations/Recommend-VMSSOptimizationsToBlobStorage.ps1 new file mode 100644 index 000000000..2b478d142 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/recommendations/Recommend-VMsHighAvailabilityToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/recommendations/Recommend-VMsHighAvailabilityToBlobStorage.ps1 new file mode 100644 index 000000000..8716e24a8 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/recommendations/Recommend-VNetOptimizationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/recommendations/Recommend-VNetOptimizationsToBlobStorage.ps1 new file mode 100644 index 000000000..52ead6cb6 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/remediations/Remediate-AdvisorRightSizeFiltered.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/remediations/Remediate-AdvisorRightSizeFiltered.ps1 new file mode 100644 index 000000000..314dc522c --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/remediations/Remediate-LongDeallocatedVMsFiltered.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/remediations/Remediate-LongDeallocatedVMsFiltered.ps1 new file mode 100644 index 000000000..3c816924d --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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.9/runbooks/remediations/Remediate-UnattachedDisksFiltered.ps1 b/docs/deploy/optimization-engine/0.9/runbooks/remediations/Remediate-UnattachedDisksFiltered.ps1 new file mode 100644 index 000000000..edb361930 --- /dev/null +++ b/docs/deploy/optimization-engine/0.9/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-engine/latest/azuredeploy-nested.bicep b/docs/deploy/optimization-engine/latest/azuredeploy-nested.bicep index 8267b138f..d05e2408a 100644 --- a/docs/deploy/optimization-engine/latest/azuredeploy-nested.bicep +++ b/docs/deploy/optimization-engine/latest/azuredeploy-nested.bicep @@ -1238,7 +1238,7 @@ var runbooks = [ var automationVariables = [ { name: 'AzureOptimization_CloudEnvironment' - description: 'Azure Cloud environment (e.g., AzureCloud, AzureChinaCloud, etc.)' + description: 'Azure Cloud environment (for example, AzureCloud, AzureChinaCloud, etc.)' value: '"${cloudEnvironment}"' } { diff --git a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-AADObjectsToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-AADObjectsToBlobStorage.ps1 index 1347d081e..8bc12d759 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-AADObjectsToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-AADObjectsToBlobStorage.ps1 @@ -21,7 +21,7 @@ function Build-CredObjectWithDates { param ( [object] $appObject ) - + $credObjects = @() foreach ($obj in $appObject.KeyCredentials) @@ -33,7 +33,7 @@ function Build-CredObjectWithDates { 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 + $credObjects += $credObject } foreach ($obj in $appObject.PasswordCredentials) @@ -45,7 +45,7 @@ function Build-CredObjectWithDates { 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 + $credObjects += $credObject } return $credObjects @@ -55,7 +55,7 @@ function Build-PrincipalNames { param ( [object] $appObject ) - + $principalNames = @() if ($appObject.Web.HomePageUrl) @@ -102,7 +102,7 @@ $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSi $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { - $storageAccountSinkEnv = $cloudEnvironment + $storageAccountSinkEnv = $cloudEnvironment } $storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue $storageAccountSinkKey = $null @@ -145,12 +145,12 @@ if (-not([string]::IsNullOrEmpty($externalCredentialName))) "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -158,7 +158,7 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else @@ -170,8 +170,8 @@ else if (-not([string]::IsNullOrEmpty($externalCredentialName))) { "Logging in to Azure with $externalCredentialName external credential..." - Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential - $cloudEnvironment = $externalCloudEnvironment + Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential + $cloudEnvironment = $externalCloudEnvironment } $tenantId = (Get-AzContext).Tenant.Id @@ -189,15 +189,15 @@ Import-Module Microsoft.Graph.Applications Import-Module Microsoft.Graph.Groups switch ($cloudEnvironment) { - "AzureUSGovernment" { + "AzureUSGovernment" { $graphEnvironment = "USGov" break } - "AzureChinaCloud" { + "AzureChinaCloud" { $graphEnvironment = "China" break } - "AzureGermanCloud" { + "AzureGermanCloud" { $graphEnvironment = "Germany" break } @@ -216,7 +216,7 @@ else "Logging in to Microsoft Graph with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-MgGraph -Identity -ClientId $uamiClientID -Environment $graphEnvironment -NoWelcome break } @@ -226,7 +226,7 @@ else } } } - + $datetime = (get-date).ToUniversalTime() $timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z") @@ -275,36 +275,36 @@ if ("Application" -in $aadObjectsTypes) CreatedDate = $createdDate DeletedDate = $deletedDate } - $aadObjects += $aadObject - } + $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 + + 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..." - + "[$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..." + "[$now] Removed $jsonExportPath from local disk..." } if ("ServicePrincipal" -in $aadObjectsTypes) @@ -314,7 +314,7 @@ if ("ServicePrincipal" -in $aadObjectsTypes) "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 @@ -342,36 +342,36 @@ if ("ServicePrincipal" -in $aadObjectsTypes) Owners = $owners DeletedDate = $deletedDate } - $aadObjects += $aadObject + $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 + + 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..." - + "[$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..." + "[$now] Removed $jsonExportPath from local disk..." } if ("User" -in $aadObjectsTypes) @@ -381,15 +381,15 @@ if ("User" -in $aadObjectsTypes) if ([string]::IsNullOrEmpty($userFilter)) { "Getting AAD users..." - $users = Get-MgUser -All -Property Id,AccountEnabled,DisplayName,UserPrincipalName,UserType,CreatedDateTime,DeletedDateTime + $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 + $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 @@ -415,27 +415,27 @@ if ("User" -in $aadObjectsTypes) CreatedDate = $createdDate DeletedDate = $deletedDate } - $aadObjects += $aadObject + $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 + + 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..." + "[$now] Removed $csvExportPath from local disk..." } if ("Group" -in $aadObjectsTypes) @@ -453,7 +453,7 @@ if ("Group" -in $aadObjectsTypes) $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 @@ -484,36 +484,36 @@ if ("Group" -in $aadObjectsTypes) CreatedDate = $createdDate DeletedDate = $deletedDate } - $aadObjects += $aadObject + $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 + + 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..." - + "[$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..." + "[$now] Removed $jsonExportPath from local disk..." } "DONE!" \ No newline at end of file diff --git a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGAppGatewayPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGAppGatewayPropertiesToBlobStorage.ps1 index 5be7b1c69..39e908398 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGAppGatewayPropertiesToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGAppGatewayPropertiesToBlobStorage.ps1 @@ -35,7 +35,7 @@ $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSi $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { - $storageAccountSinkEnv = $cloudEnvironment + $storageAccountSinkEnv = $cloudEnvironment } $storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue $storageAccountSinkKey = $null @@ -61,12 +61,12 @@ $ARGPageSize = 1000 "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -74,7 +74,7 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else @@ -88,9 +88,9 @@ $cloudSuffix = "" if (-not([string]::IsNullOrEmpty($externalCredentialName))) { "Logging in to Azure with $externalCredentialName external credential..." - Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential + Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential $cloudSuffix = $externalCloudEnvironment.ToLower() + "-" - $cloudEnvironment = $externalCloudEnvironment + $cloudEnvironment = $externalCloudEnvironment } $tenantId = (Get-AzContext).Tenant.Id @@ -164,7 +164,7 @@ do Write-Output "Found $($appGWsTotal.Count) Application Gateway entries" <# - Building CSV entries + Building CSV entries #> $datetime = (get-date).ToUniversalTime() @@ -203,7 +203,7 @@ foreach ($appGW in $appGWsTotal) StatusDate = $statusDate Tags = $appGW.tags } - + $allAppGWs += $logentry } @@ -228,4 +228,4 @@ 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 +Write-Output "[$now] Removed $csvExportPath from local disk..." \ No newline at end of file diff --git a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGAppServicePlanPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGAppServicePlanPropertiesToBlobStorage.ps1 index 8e4fed27d..7e54b8420 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGAppServicePlanPropertiesToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGAppServicePlanPropertiesToBlobStorage.ps1 @@ -40,7 +40,7 @@ $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSi $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { - $storageAccountSinkEnv = $cloudEnvironment + $storageAccountSinkEnv = $cloudEnvironment } $storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue $storageAccountSinkKey = $null @@ -66,12 +66,12 @@ $ARGPageSize = 1000 "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -79,7 +79,7 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else @@ -93,9 +93,9 @@ $cloudSuffix = "" if (-not([string]::IsNullOrEmpty($externalCredentialName))) { "Logging in to Azure with $externalCredentialName external credential..." - Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential + Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential $cloudSuffix = $externalCloudEnvironment.ToLower() + "-" - $cloudEnvironment = $externalCloudEnvironment + $cloudEnvironment = $externalCloudEnvironment } $tenantId = (Get-AzContext).Tenant.Id @@ -183,7 +183,7 @@ foreach ($asplan in $aspTotal) Tags = $asplan.tags StatusDate = $statusDate } - + $allasp += $logentry } @@ -206,4 +206,4 @@ 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 +Write-Output "[$now] Removed $csvExportPath from local disk..." \ No newline at end of file diff --git a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGAvailabilitySetPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGAvailabilitySetPropertiesToBlobStorage.ps1 index f62883987..b8d1cf9c9 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGAvailabilitySetPropertiesToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGAvailabilitySetPropertiesToBlobStorage.ps1 @@ -35,7 +35,7 @@ $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSi $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { - $storageAccountSinkEnv = $cloudEnvironment + $storageAccountSinkEnv = $cloudEnvironment } $storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue $storageAccountSinkKey = $null @@ -61,12 +61,12 @@ $ARGPageSize = 1000 "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -74,7 +74,7 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else @@ -88,9 +88,9 @@ $cloudSuffix = "" if (-not([string]::IsNullOrEmpty($externalCredentialName))) { "Logging in to Azure with $externalCredentialName external credential..." - Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential + Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential $cloudSuffix = $externalCloudEnvironment.ToLower() + "-" - $cloudEnvironment = $externalCloudEnvironment + $cloudEnvironment = $externalCloudEnvironment } $tenantId = (Get-AzContext).Tenant.Id @@ -144,7 +144,7 @@ do Write-Output "Found $($avSetsTotal.Count) Availability Set entries" <# - Building CSV entries + Building CSV entries #> $datetime = (get-date).ToUniversalTime() @@ -170,7 +170,7 @@ foreach ($avSet in $avSetsTotal) Tags = $avSet.tags Zones = $avSet.zones } - + $allAvSets += $logentry } @@ -195,4 +195,4 @@ 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 +Write-Output "[$now] Removed $csvExportPath from local disk..." \ No newline at end of file diff --git a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGLoadBalancerPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGLoadBalancerPropertiesToBlobStorage.ps1 index f1eadfc1b..54602655e 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGLoadBalancerPropertiesToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGLoadBalancerPropertiesToBlobStorage.ps1 @@ -35,7 +35,7 @@ $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSi $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { - $storageAccountSinkEnv = $cloudEnvironment + $storageAccountSinkEnv = $cloudEnvironment } $storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue $storageAccountSinkKey = $null @@ -61,12 +61,12 @@ $ARGPageSize = 1000 "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -74,7 +74,7 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else @@ -88,9 +88,9 @@ $cloudSuffix = "" if (-not([string]::IsNullOrEmpty($externalCredentialName))) { "Logging in to Azure with $externalCredentialName external credential..." - Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential + Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential $cloudSuffix = $externalCloudEnvironment.ToLower() + "-" - $cloudEnvironment = $externalCloudEnvironment + $cloudEnvironment = $externalCloudEnvironment } $tenantId = (Get-AzContext).Tenant.Id @@ -161,7 +161,7 @@ do Write-Output "Found $($LBsTotal.Count) Load Balancer entries" <# - Building CSV entries + Building CSV entries #> $datetime = (get-date).ToUniversalTime() @@ -194,7 +194,7 @@ foreach ($lb in $LBsTotal) StatusDate = $statusDate Tags = $lb.tags } - + $allLBs += $logentry } @@ -219,4 +219,4 @@ 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 +Write-Output "[$now] Removed $csvExportPath from local disk..." \ No newline at end of file diff --git a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGManagedDisksPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGManagedDisksPropertiesToBlobStorage.ps1 index 1fd66721f..d6bd5d086 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGManagedDisksPropertiesToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGManagedDisksPropertiesToBlobStorage.ps1 @@ -35,7 +35,7 @@ $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSi $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { - $storageAccountSinkEnv = $cloudEnvironment + $storageAccountSinkEnv = $cloudEnvironment } $storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue $storageAccountSinkKey = $null @@ -61,12 +61,12 @@ $ARGPageSize = 1000 "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -74,7 +74,7 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else @@ -88,9 +88,9 @@ $cloudSuffix = "" if (-not([string]::IsNullOrEmpty($externalCredentialName))) { "Logging in to Azure with $externalCredentialName external credential..." - Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential + Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential $cloudSuffix = $externalCloudEnvironment.ToLower() + "-" - $cloudEnvironment = $externalCloudEnvironment + $cloudEnvironment = $externalCloudEnvironment } $tenantId = (Get-AzContext).Tenant.Id @@ -119,25 +119,25 @@ $resultsSoFar = 0 Write-Output "Querying for ARM Managed Disks properties" $argQuery = @" - resources - | where type =~ 'Microsoft.Compute/disks' - | extend DiskId = tolower(id), OwnerVmId = tolower(managedBy) + 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 + 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' + 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 + ) on OwnerVmId, DiskId + | project-away OwnerVmId, DiskId, OwnerVmId1, DiskId1 | order by id asc "@ @@ -164,7 +164,7 @@ do Write-Output "Found $($mdisksTotal.Count) Managed Disk entries" <# - Building CSV entries + Building CSV entries #> $datetime = (get-date).ToUniversalTime() @@ -191,20 +191,20 @@ foreach ($disk in $mdisksTotal) OwnerVMId = $ownerVmId DeploymentModel = "Managed" DiskType = $disk.diskType - TimeCreated = $disk.properties.timeCreated - DiskIOPS = $disk.properties.diskIOPSReadWrite + 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 + Caching = $disk.diskCaching DiskSizeGB = $disk.properties.diskSizeGB SKU = $disk.sku.name StatusDate = $statusDate Tags = $disk.tags } - + $alldisks += $logentry } @@ -229,4 +229,4 @@ 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 "[$now] Removed $csvExportPath from local disk..." diff --git a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGNICPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGNICPropertiesToBlobStorage.ps1 index d5b91b94c..547876357 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGNICPropertiesToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGNICPropertiesToBlobStorage.ps1 @@ -40,7 +40,7 @@ $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSi $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { - $storageAccountSinkEnv = $cloudEnvironment + $storageAccountSinkEnv = $cloudEnvironment } $storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue $storageAccountSinkKey = $null @@ -66,12 +66,12 @@ $ARGPageSize = 1000 "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -79,7 +79,7 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else @@ -93,9 +93,9 @@ $cloudSuffix = "" if (-not([string]::IsNullOrEmpty($externalCredentialName))) { "Logging in to Azure with $externalCredentialName external credential..." - Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential + Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential $cloudSuffix = $externalCloudEnvironment.ToLower() + "-" - $cloudEnvironment = $externalCloudEnvironment + $cloudEnvironment = $externalCloudEnvironment } $tenantId = (Get-AzContext).Tenant.Id @@ -209,7 +209,7 @@ foreach ($nic in $nicsTotal) Tags = $nic.tags StatusDate = $statusDate } - + $allnics += $logentry } @@ -232,4 +232,4 @@ 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 +Write-Output "[$now] Removed $csvExportPath from local disk..." \ No newline at end of file diff --git a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGNSGPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGNSGPropertiesToBlobStorage.ps1 index b5da838ea..ea8b4e6c6 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGNSGPropertiesToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGNSGPropertiesToBlobStorage.ps1 @@ -40,7 +40,7 @@ $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSi $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { - $storageAccountSinkEnv = $cloudEnvironment + $storageAccountSinkEnv = $cloudEnvironment } $storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue $storageAccountSinkKey = $null @@ -66,12 +66,12 @@ $ARGPageSize = 1000 "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -79,7 +79,7 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else @@ -93,9 +93,9 @@ $cloudSuffix = "" if (-not([string]::IsNullOrEmpty($externalCredentialName))) { "Logging in to Azure with $externalCredentialName external credential..." - Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential + Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential $cloudSuffix = $externalCloudEnvironment.ToLower() + "-" - $cloudEnvironment = $externalCloudEnvironment + $cloudEnvironment = $externalCloudEnvironment } $tenantId = (Get-AzContext).Tenant.Id @@ -122,7 +122,7 @@ Write-Output "Querying for NSG properties" $argQuery = @" resources -| where type =~ 'Microsoft.Network/networkSecurityGroups' +| 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 @@ -191,7 +191,7 @@ foreach ($nsgRule in $nsgRulesTotal) Tags = $nsgRule.tags StatusDate = $statusDate } - + $allnsgRules += $logentry } @@ -214,4 +214,4 @@ 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 +Write-Output "[$now] Removed $csvExportPath from local disk..." \ No newline at end of file diff --git a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGPublicIpPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGPublicIpPropertiesToBlobStorage.ps1 index 063d03cb2..ebc543003 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGPublicIpPropertiesToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGPublicIpPropertiesToBlobStorage.ps1 @@ -40,7 +40,7 @@ $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSi $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { - $storageAccountSinkEnv = $cloudEnvironment + $storageAccountSinkEnv = $cloudEnvironment } $storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue $storageAccountSinkKey = $null @@ -66,12 +66,12 @@ $ARGPageSize = 1000 "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -79,7 +79,7 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else @@ -93,9 +93,9 @@ $cloudSuffix = "" if (-not([string]::IsNullOrEmpty($externalCredentialName))) { "Logging in to Azure with $externalCredentialName external credential..." - Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential + Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential $cloudSuffix = $externalCloudEnvironment.ToLower() + "-" - $cloudEnvironment = $externalCloudEnvironment + $cloudEnvironment = $externalCloudEnvironment } $tenantId = (Get-AzContext).Tenant.Id @@ -184,7 +184,7 @@ foreach ($pip in $pipsTotal) Tags = $pip.tags StatusDate = $statusDate } - + $allpips += $logentry } @@ -249,7 +249,7 @@ foreach ($pip in $pipsTotal) IPAddress = $pip.ipAddress StatusDate = $statusDate } - + $allpips += $logentry } @@ -272,4 +272,4 @@ 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 +Write-Output "[$now] Removed $csvExportPath from local disk..." \ No newline at end of file diff --git a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGResourceContainersPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGResourceContainersPropertiesToBlobStorage.ps1 index 329b5031c..70be047cb 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGResourceContainersPropertiesToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGResourceContainersPropertiesToBlobStorage.ps1 @@ -40,7 +40,7 @@ $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSi $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { - $storageAccountSinkEnv = $cloudEnvironment + $storageAccountSinkEnv = $cloudEnvironment } $storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue $storageAccountSinkKey = $null @@ -66,12 +66,12 @@ $ARGPageSize = 1000 "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -79,7 +79,7 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else @@ -93,9 +93,9 @@ $cloudSuffix = "" if (-not([string]::IsNullOrEmpty($externalCredentialName))) { "Logging in to Azure with $externalCredentialName external credential..." - Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential + Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential $cloudSuffix = $externalCloudEnvironment.ToLower() + "-" - $cloudEnvironment = $externalCloudEnvironment + $cloudEnvironment = $externalCloudEnvironment } $tenantId = (Get-AzContext).Tenant.Id @@ -212,7 +212,7 @@ foreach ($rg in $rgsTotal) Tags = $rg.tags StatusDate = $statusDate } - + $allResourceContainers += $logentry } @@ -235,7 +235,7 @@ foreach ($sub in $subsTotal) Tags = $sub.tags StatusDate = $statusDate } - + $allResourceContainers += $logentry } @@ -264,9 +264,9 @@ 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 "[$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 +Write-Output "[$now] Removed $jsonExportPath from local disk..." \ No newline at end of file diff --git a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGSqlDatabasePropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGSqlDatabasePropertiesToBlobStorage.ps1 index cdb1e3b36..62b041de4 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGSqlDatabasePropertiesToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGSqlDatabasePropertiesToBlobStorage.ps1 @@ -40,7 +40,7 @@ $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSi $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { - $storageAccountSinkEnv = $cloudEnvironment + $storageAccountSinkEnv = $cloudEnvironment } $storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue $storageAccountSinkKey = $null @@ -66,12 +66,12 @@ $ARGPageSize = 1000 "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -79,7 +79,7 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else @@ -93,9 +93,9 @@ $cloudSuffix = "" if (-not([string]::IsNullOrEmpty($externalCredentialName))) { "Logging in to Azure with $externalCredentialName external credential..." - Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential + Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential $cloudSuffix = $externalCloudEnvironment.ToLower() + "-" - $cloudEnvironment = $externalCloudEnvironment + $cloudEnvironment = $externalCloudEnvironment } $tenantId = (Get-AzContext).Tenant.Id @@ -121,7 +121,7 @@ $resultsSoFar = 0 Write-Output "Querying for SQL Databases properties" $argQuery = @" - resources + 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 @@ -178,7 +178,7 @@ foreach ($db in $dbsTotal) Tags = $db.tags StatusDate = $statusDate } - + $alldbs += $logentry } @@ -201,4 +201,4 @@ 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 +Write-Output "[$now] Removed $csvExportPath from local disk..." \ No newline at end of file diff --git a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGUnmanagedDisksPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGUnmanagedDisksPropertiesToBlobStorage.ps1 index 734e05a02..92bf715bf 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGUnmanagedDisksPropertiesToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGUnmanagedDisksPropertiesToBlobStorage.ps1 @@ -35,7 +35,7 @@ $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSi $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { - $storageAccountSinkEnv = $cloudEnvironment + $storageAccountSinkEnv = $cloudEnvironment } $storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue $storageAccountSinkKey = $null @@ -61,12 +61,12 @@ $ARGPageSize = 1000 "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -74,7 +74,7 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else @@ -88,9 +88,9 @@ $cloudSuffix = "" if (-not([string]::IsNullOrEmpty($externalCredentialName))) { "Logging in to Azure with $externalCredentialName external credential..." - Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential + Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential $cloudSuffix = $externalCloudEnvironment.ToLower() + "-" - $cloudEnvironment = $externalCloudEnvironment + $cloudEnvironment = $externalCloudEnvironment } $tenantId = (Get-AzContext).Tenant.Id @@ -182,7 +182,7 @@ do Write-Output "Found overall $($mdisksTotal.Count) Unmanaged Disk entries" <# - Building CSV entries + Building CSV entries #> $datetime = (get-date).ToUniversalTime() @@ -202,13 +202,13 @@ foreach ($disk in $mdisksTotal) OwnerVMId = $disk.id.ToLower() Location = $disk.location DeploymentModel = "Unmanaged" - DiskType = $disk.diskType - Caching = $disk.diskCaching + DiskType = $disk.diskType + Caching = $disk.diskCaching DiskSizeGB = $disk.diskSize StatusDate = $statusDate Tags = $disk.tags } - + $alldisks += $logentry } @@ -233,4 +233,4 @@ 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 +Write-Output "[$now] Removed $csvExportPath from local disk..." \ No newline at end of file diff --git a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGVMSSPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGVMSSPropertiesToBlobStorage.ps1 index 6a2878c3b..0fc85a46d 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGVMSSPropertiesToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGVMSSPropertiesToBlobStorage.ps1 @@ -40,7 +40,7 @@ $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSi $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { - $storageAccountSinkEnv = $cloudEnvironment + $storageAccountSinkEnv = $cloudEnvironment } $storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue $storageAccountSinkKey = $null @@ -66,12 +66,12 @@ $ARGPageSize = 1000 "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -79,7 +79,7 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else @@ -96,9 +96,9 @@ $cloudSuffix = "" if (-not([string]::IsNullOrEmpty($externalCredentialName))) { "Logging in to Azure with $externalCredentialName external credential..." - Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential + Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential $cloudSuffix = $externalCloudEnvironment.ToLower() + "-" - $cloudEnvironment = $externalCloudEnvironment + $cloudEnvironment = $externalCloudEnvironment } $tenantId = (Get-AzContext).Tenant.Id @@ -154,7 +154,7 @@ do } else { - $armVmss = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -Subscription $subscriptions + $armVmss = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -Subscription $subscriptions } if ($armVmss -and $armVmss.GetType().Name -eq "PSResourceGraphResponse") @@ -213,7 +213,7 @@ foreach ($vmss in $armVmssTotal) ImageVersion = $vmss.imageVersion ImageExactVersion = $vmss.imageExactVersion } - + $allvmss += $logentry } @@ -236,4 +236,4 @@ 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 +Write-Output "[$now] Removed $csvExportPath from local disk..." \ No newline at end of file diff --git a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGVNetPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGVNetPropertiesToBlobStorage.ps1 index 0a252e721..2d905ce03 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGVNetPropertiesToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGVNetPropertiesToBlobStorage.ps1 @@ -40,7 +40,7 @@ $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSi $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { - $storageAccountSinkEnv = $cloudEnvironment + $storageAccountSinkEnv = $cloudEnvironment } $storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue $storageAccountSinkKey = $null @@ -66,12 +66,12 @@ $ARGPageSize = 1000 "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -79,7 +79,7 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else @@ -93,9 +93,9 @@ $cloudSuffix = "" if (-not([string]::IsNullOrEmpty($externalCredentialName))) { "Logging in to Azure with $externalCredentialName external credential..." - Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential + Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential $cloudSuffix = $externalCloudEnvironment.ToLower() + "-" - $cloudEnvironment = $externalCloudEnvironment + $cloudEnvironment = $externalCloudEnvironment } $tenantId = (Get-AzContext).Tenant.Id @@ -189,7 +189,7 @@ foreach ($subnet in $subnetsTotal) Tags = $subnet.tags StatusDate = $statusDate } - + $allsubnets += $logentry } @@ -282,7 +282,7 @@ foreach ($subnet in $subnetsTotal) SubnetUsedIPs = $subnet.subnetUsedIPs StatusDate = $statusDate } - + $allsubnets += $logentry } @@ -305,4 +305,4 @@ 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 +Write-Output "[$now] Removed $csvExportPath from local disk..." \ No newline at end of file diff --git a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGVirtualMachinesPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGVirtualMachinesPropertiesToBlobStorage.ps1 index 1a761c8d5..5ba0ddbfa 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGVirtualMachinesPropertiesToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ARGVirtualMachinesPropertiesToBlobStorage.ps1 @@ -40,7 +40,7 @@ $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSi $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { - $storageAccountSinkEnv = $cloudEnvironment + $storageAccountSinkEnv = $cloudEnvironment } $storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue $storageAccountSinkKey = $null @@ -66,12 +66,12 @@ $ARGPageSize = 1000 "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -79,7 +79,7 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else @@ -97,9 +97,9 @@ $cloudSuffix = "" if (-not([string]::IsNullOrEmpty($externalCredentialName))) { "Logging in to Azure with $externalCredentialName external credential..." - Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential + Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential $cloudSuffix = $externalCloudEnvironment.ToLower() + "-" - $cloudEnvironment = $externalCloudEnvironment + $cloudEnvironment = $externalCloudEnvironment } $tenantId = (Get-AzContext).Tenant.Id @@ -131,13 +131,13 @@ 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) + | 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 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) @@ -178,8 +178,8 @@ 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) + | 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) @@ -210,7 +210,7 @@ do } while ($resultsCount -eq $ARGPageSize) <# - Merging ARM + Classic VMs, enriching VM size details and building CSV entries + Merging ARM + Classic VMs, enriching VM size details and building CSV entries #> $datetime = (Get-Date).ToUniversalTime() @@ -262,7 +262,7 @@ foreach ($vm in $armVmsTotal) OSVersion = $vm.osVersion Tags = $vm.tags } - + $allvms += $logentry } @@ -310,7 +310,7 @@ foreach ($vm in $classicVmsTotal) OSVersion = $vm.osVersion Tags = $null } - + $allvms += $logentry } @@ -337,4 +337,4 @@ 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 +Write-Output "[$now] Removed $csvExportPath from local disk..." \ No newline at end of file diff --git a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-AdvisorRecommendationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-AdvisorRecommendationsToBlobStorage.ps1 index 0f4a9903b..68acb0c85 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-AdvisorRecommendationsToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-AdvisorRecommendationsToBlobStorage.ps1 @@ -35,7 +35,7 @@ $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSi $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { - $storageAccountSinkEnv = $cloudEnvironment + $storageAccountSinkEnv = $cloudEnvironment } $storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue $storageAccountSinkKey = $null @@ -66,12 +66,12 @@ if (-not([string]::IsNullOrEmpty($externalCredentialName))) "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -79,7 +79,7 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else @@ -91,8 +91,8 @@ else if (-not([string]::IsNullOrEmpty($externalCredentialName))) { "Logging in to Azure with $externalCredentialName external credential..." - Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential - $cloudEnvironment = $externalCloudEnvironment + Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential + $cloudEnvironment = $externalCloudEnvironment } Write-Output "Getting subscriptions target $TargetSubscription" @@ -132,7 +132,7 @@ if (-not([string]::IsNullOrEmpty($CategoryFilter))) for ($i = 0; $i -lt $categories.Count; $i++) { $categories[$i] = "'" + $categories[$i] + "'" - } + } $FinalCategoryFilter = " and properties.category in (" + ($categories -join ",") + ")" } @@ -186,7 +186,7 @@ foreach ($advisorRecommendation in $recommendationsARG) } else { - # otherwise it is not a resource-specific recommendation (e.g., reservations) + # otherwise it is not a resource-specific recommendation (for example, reservations) $resourceGroup = "notavailable" $instanceId = $advisorRecommendation.id.ToLower() $subscriptionId = $resourceIdParts[2] @@ -200,7 +200,7 @@ foreach ($advisorRecommendation in $recommendationsARG) { $additionalInfo = $null } - + $recommendation = New-Object PSObject -Property @{ Timestamp = $timestamp Cloud = $cloudEnvironment @@ -219,7 +219,7 @@ foreach ($advisorRecommendation in $recommendationsARG) TenantGuid = $tenantId } - $recommendations += $recommendation + $recommendations += $recommendation } Write-Output "Found $($recommendations.Count) ($CategoryFilter) recommendations..." @@ -242,6 +242,6 @@ 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 "[$now] Removed $csvExportPath from local disk..." Write-Output "DONE!" \ No newline at end of file diff --git a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-AzMonitorMetricsToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-AzMonitorMetricsToBlobStorage.ps1 index eae6d89b1..0297b5842 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-AzMonitorMetricsToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-AzMonitorMetricsToBlobStorage.ps1 @@ -58,7 +58,7 @@ $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSi $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { - $storageAccountSinkEnv = $cloudEnvironment + $storageAccountSinkEnv = $cloudEnvironment } $storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue $storageAccountSinkKey = $null @@ -84,12 +84,12 @@ $ARGPageSize = 1000 "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -97,7 +97,7 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else @@ -111,9 +111,9 @@ $cloudSuffix = "" if (-not([string]::IsNullOrEmpty($externalCredentialName))) { "Logging in to Azure with $externalCredentialName external credential..." - Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential + Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential $cloudSuffix = $externalCloudEnvironment.ToLower() + "-" - $cloudEnvironment = $externalCloudEnvironment + $cloudEnvironment = $externalCloudEnvironment } $tenantId = (Get-AzContext).Tenant.Id @@ -144,9 +144,9 @@ if (-not([string]::IsNullOrEmpty($ARGFilter))) } $argQuery = @" -resources +resources | where type =~ '$ResourceType'$argWhere -| project id, name, subscriptionId, resourceGroup, tenantId +| project id, name, subscriptionId, resourceGroup, tenantId | order by id asc "@ @@ -202,12 +202,12 @@ foreach ($resource in $allResources) { $valuesAggregation += $metricValues.Data."$AggregationType" } } - } + } } - + if (-not($metricValues.Id)) { - $foundResource = $false + $foundResource = $false } } @@ -235,7 +235,7 @@ foreach ($resource in $allResources) { } } } - + $customMetric = New-Object PSObject -Property @{ Timestamp = $utcNow Cloud = $cloudEnvironment @@ -251,7 +251,7 @@ foreach ($resource in $allResources) { TimeGrain = $TimeGrain TimeSpan = $TimeSpan } - + $customMetrics += $customMetric } } @@ -273,7 +273,7 @@ $csvExportPath = "$metricMoment-metrics-$ResourceTypeName-$MetricName-$Aggregati $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" + Write-Output "Current culture ($($ci.Name)) does not use . as decimal separator" $ci.NumberFormat.NumberDecimalSeparator = '.' [System.Threading.Thread]::CurrentThread.CurrentCulture = $ci } diff --git a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ConsumptionToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ConsumptionToBlobStorage.ps1 index 0c68d965d..11dabcb0d 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ConsumptionToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ConsumptionToBlobStorage.ps1 @@ -11,10 +11,10 @@ param( [Parameter(Mandatory = $false)] [string] $externalCredentialName, - [Parameter(Mandatory = $false)] + [Parameter(Mandatory = $false)] [string] $targetStartDate, # YYYY-MM-DD format - [Parameter(Mandatory = $false)] + [Parameter(Mandatory = $false)] [string] $targetEndDate # YYYY-MM-DD format ) @@ -26,25 +26,25 @@ function Authenticate-AzureWithOption { param ( [string] $authOption = "ManagedIdentity", [string] $cloudEnv = "AzureCloud", - [string] $clientID + [string] $clientID ) switch ($authOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnv -AccountId $clientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnv + Connect-AzAccount -Identity -EnvironmentName $cloudEnv break } } } function Generate-CostDetails { - param ( + param ( [string] $ScopeId, - [string] $ScopeName + [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 @@ -73,7 +73,7 @@ function Generate-CostDetails { { $tries++ Write-Output "Checking whether export is ready (try $tries)..." - + Start-Sleep -Seconds $sleepSeconds $downloadResult = Invoke-AzRestMethod -Method GET -Path $requestResultPath @@ -175,24 +175,24 @@ function Generate-CostDetails { } } $r.Dispose() - $w.Close() + $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..." + 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..." + Write-Output "[$now] Removed $finalCsvExportPath from local disk..." } $requestSuccess = $true @@ -216,10 +216,10 @@ function Generate-CostDetails { Authenticate-AzureWithOption -authOption $authenticationOption -cloudEnv $cloudEnvironment -clientID $uamiClientID } else - { + { Authenticate-AzureWithOption -authOption $authenticationOption -cloudEnv $cloudEnvironment } - + $sleepSeconds = 2 } else @@ -228,7 +228,7 @@ function Generate-CostDetails { $global:scopesWithErrors += $ScopeName Write-Warning "Got an unexpected response code: $($downloadResult.StatusCode)" } - } + } while (-not($requestSuccess) -and $tries -lt $MaxTries) if (-not($requestSuccess)) @@ -241,7 +241,7 @@ function Generate-CostDetails { } else { - Write-Warning "Error returned by the Download Cost Details API. Status Code: $($downloadResult.StatusCode). Message: $($downloadResult.Content)" + Write-Warning "Error returned by the Download Cost Details API. Status Code: $($downloadResult.StatusCode). Message: $($downloadResult.Content)" } } else @@ -285,7 +285,7 @@ $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSi $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { - $storageAccountSinkEnv = $cloudEnvironment + $storageAccountSinkEnv = $cloudEnvironment } $storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue $storageAccountSinkKey = $null @@ -331,13 +331,13 @@ else "Consumption Scope is $consumptionScope" if ($consumptionScope -eq "BillingAccount") { - $BillingAccountID = Get-AutomationVariable -Name "AzureOptimization_BillingAccountID" + $BillingAccountID = Get-AutomationVariable -Name "AzureOptimization_BillingAccountID" } else { if ($consumptionScope -eq "BillingProfile") { - $BillingAccountID = Get-AutomationVariable -Name "AzureOptimization_BillingAccountID" + $BillingAccountID = Get-AutomationVariable -Name "AzureOptimization_BillingAccountID" $BillingProfileID = Get-AutomationVariable -Name "AzureOptimization_BillingProfileID" } else @@ -352,7 +352,7 @@ else if ($cloudEnvironment -eq "AzureChinaCloud") { - $chinaEAEnrollment = Get-AutomationVariable -Name "AzureOptimization_AzureChinaEAEnrollment" -ErrorAction SilentlyContinue + $chinaEAEnrollment = Get-AutomationVariable -Name "AzureOptimization_AzureChinaEAEnrollment" -ErrorAction SilentlyContinue $chinaEAKey = Get-AutomationVariable -Name "AzureOptimization_AzureChinaEAKey" -ErrorAction SilentlyContinue } @@ -363,14 +363,14 @@ 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 @@ -382,8 +382,8 @@ else if (-not([string]::IsNullOrEmpty($externalCredentialName))) { "Logging in to Azure with $externalCredentialName external credential..." - Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential - $cloudEnvironment = $externalCloudEnvironment + Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential + $cloudEnvironment = $externalCloudEnvironment } # compute start+end dates @@ -391,7 +391,7 @@ if (-not([string]::IsNullOrEmpty($externalCredentialName))) if ([string]::IsNullOrEmpty($targetStartDate) -or [string]::IsNullOrEmpty($targetEndDate)) { $targetStartDate = (Get-Date).Date.AddDays($consumptionOffsetDays * -1).ToString("yyyy-MM-dd") - $targetEndDate = $targetStartDate + $targetEndDate = $targetStartDate } if ($consumptionScope -eq "Subscription") @@ -403,7 +403,7 @@ if ($consumptionScope -eq "Subscription") else { $subscriptions = Get-AzSubscription | Where-Object { $_.State -eq "Enabled" } - } + } "Exporting consumption data from $targetStartDate to $targetEndDate for $($subscriptions.Count) subscriptions..." } else @@ -422,27 +422,27 @@ if ($cloudEnvironment -eq "AzureChinaCloud" -and -not([string]::IsNullOrEmpty($c $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..." - + + Write-Output "Removed pricesheet-$targetMonth.csv from local disk..." + $csvFile2 = $csvFile[2..($csvFile.Count-1)] $headerLine = $csvFile2[0] $columnHeaders = $headerLine.Split(",") @@ -454,31 +454,31 @@ if ($cloudEnvironment -eq "AzureChinaCloud" -and -not([string]::IsNullOrEmpty($c } } $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 + 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..." - + + Write-Output "Removed usagedetails-$targetStartDate.csv from local disk..." + $csvFile2 = $csvFile[2..($csvFile.Count-1)] $headerLine = $csvFile2[0] $columnHeaders = $headerLine.Split(",") @@ -490,31 +490,31 @@ if ($cloudEnvironment -eq "AzureChinaCloud" -and -not([string]::IsNullOrEmpty($c } } $csvFile2[0] = $columnHeaders -join "," - + Write-Output "Removed first 2 lines and replaced header." - - $consumption = $csvFile2 | ConvertFrom-Csv + + $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 + 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 @@ -525,24 +525,24 @@ if ($cloudEnvironment -eq "AzureChinaCloud" -and -not([string]::IsNullOrEmpty($c $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 + + $convertedCost = 0.0 if ([double]$consumptionLine.ExtendedCost -ne 0) { $convertedCost = [double]$consumptionLine.ExtendedCost } - $convertedPrice = 0.0 + $convertedPrice = 0.0 if ([double]$consumptionLine.ResourceRate -ne 0) { $convertedPrice = [double]$consumptionLine.ResourceRate } - + $unitPrice = 0.0 $partNumber = "N/A" foreach ($priceItem in $pricesheet) @@ -558,16 +558,16 @@ if ($cloudEnvironment -eq "AzureChinaCloud" -and -not([string]::IsNullOrEmpty($c if ($currentUnitHours -gt 0) { $unitPrice = [double] ($tempUnitPrice / $currentUnitHours) - } + } } else { - $unitPrice = $convertedPrice + $unitPrice = $convertedPrice } break } } - + $billingEntry = New-Object PSObject -Property @{ Timestamp = $timestamp SubscriptionId = $consumptionLine.SubscriptionGuid @@ -595,31 +595,31 @@ if ($cloudEnvironment -eq "AzureChinaCloud" -and -not([string]::IsNullOrEmpty($c ResourceLocation = $consumptionLine.'Resource Location' AccountOwnerId = $consumptionLine.AccountOwnerId } - - $billingEntries += $billingEntry + + $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..." + + Write-Output "Removed $csvExportPath from local disk..." } else { @@ -627,20 +627,20 @@ else { $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))) @@ -649,20 +649,20 @@ else } $tries = 0 $requestSuccess = $false - do - { + do + { try { $tries++ - $consumption = (Invoke-AzRestMethod -Path $ConsumptionApiPath -Method GET).Content | ConvertFrom-Json + $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 + 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) @@ -679,7 +679,7 @@ else if ([string]::IsNullOrEmpty($consumptionLine.properties.billingProfileId)) { # legacy consumption schema - + $billingEntry = New-Object PSObject -Property @{ Timestamp = $timestamp AccountName = $consumptionLine.properties.accountName @@ -731,7 +731,7 @@ else Term = $consumptionLine.properties.term UnitOfMeasure = $consumptionLine.properties.meterDetails.unitOfMeasure UnitPrice = $consumptionLine.properties.unitPrice - } + } } else { @@ -795,43 +795,43 @@ else Term = $consumptionLine.properties.term UnitOfMeasure = $consumptionLine.properties.unitOfMeasure UnitPrice = $consumptionLine.properties.unitPrice - } + } } - $billingEntries += $billingEntry + $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" + "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 - + + $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..." + "[$now] Removed $csvExportPath from local disk..." } else { @@ -851,21 +851,21 @@ else $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(":","_") + 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 + Generate-CostDetails -ScopeId "/providers/Microsoft.Billing/billingAccounts/$BillingAccountID/billingProfiles/$BillingProfileID" -ScopeName $BillingProfileID } - } + } } if ($global:hadErrors) diff --git a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-PolicyComplianceToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-PolicyComplianceToBlobStorage.ps1 index ea6177169..f8493abf5 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-PolicyComplianceToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-PolicyComplianceToBlobStorage.ps1 @@ -44,7 +44,7 @@ $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSi $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { - $storageAccountSinkEnv = $cloudEnvironment + $storageAccountSinkEnv = $cloudEnvironment } $storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue $storageAccountSinkKey = $null @@ -70,12 +70,12 @@ $ARGPageSize = 1000 "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -83,7 +83,7 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else @@ -97,9 +97,9 @@ $cloudSuffix = "" if (-not([string]::IsNullOrEmpty($externalCredentialName))) { "Logging in to Azure with $externalCredentialName external credential..." - Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential + Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential $cloudSuffix = $externalCloudEnvironment.ToLower() + "-" - $cloudEnvironment = $externalCloudEnvironment + $cloudEnvironment = $externalCloudEnvironment } $tenantId = (Get-AzContext).Tenant.Id @@ -339,7 +339,7 @@ if ($PolicyStatesEndpoint -eq "ARG") | extend initiativeId = tolower(properties.policySetDefinitionId) | summarize StatesCount = count() by tenantId, subscriptionId, complianceState, effect, assignmentId, definitionReferenceId, definitionId, initiativeId ) - | join kind=leftouter ( + | join kind=leftouter ( resources | project resourceId=tolower(id), tags ) on resourceId @@ -396,7 +396,7 @@ else evaluatedOn = $policyState.Timestamp StatesCount = 1 } - $policyStatesTotal += $policyStateObject + $policyStatesTotal += $policyStateObject } $compliantStates = $policyStates | Where-Object { $_.ComplianceState -eq "Compliant" } ` @@ -415,7 +415,7 @@ else { $initiativeId = $compliantStateProps[4].Trim().ToLower() } - + $policyStateObject = New-Object PSObject -Property @{ tenantId = $tenantId subscriptionId = $sub @@ -427,9 +427,9 @@ else initiativeId = $initiativeId StatesCount = $policyState.Count } - $policyStatesTotal += $policyStateObject + $policyStatesTotal += $policyStateObject } - } + } Write-Output "Building $($policyStatesTotal.Count) policyState entries" } @@ -478,7 +478,7 @@ foreach ($policyState in $policyStatesTotal) Tags = $tags StatusDate = $statusDate } - + $allpolicyStates += $logentry } @@ -493,7 +493,7 @@ if ($PolicyStatesEndpoint -eq "ARG") | mv-expand notScope = properties.notScopes | extend policyAssignmentId = tolower(id) | extend assignmentPolicyDefinitionId = tolower(properties.policyDefinitionId) - | join kind=leftouter ( + | join kind=leftouter ( policyresources | where type =~ 'microsoft.authorization/policysetdefinitions' | mv-expand policyDefinition = properties.policyDefinitions @@ -556,12 +556,12 @@ if ($PolicyStatesEndpoint -eq "ARG") DefinitionName = $policyDefinitions[$definitionId] DefinitionReferenceId = $definitionReferenceId StatusDate = $statusDate - } + } $allpolicyStates += $logentry } } -else +else { Write-Output "Adding excluded scopes from $($excludedAssignmentScopes.Count) assignments" @@ -616,7 +616,7 @@ else DefinitionName = $policyDefinitions[$definitionId] DefinitionReferenceId = $definitionReferenceId StatusDate = $statusDate - } + } $allpolicyStates += $logentry } @@ -641,4 +641,4 @@ 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 +Write-Output "Removed $csvExportPath from local disk..." \ No newline at end of file diff --git a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-PriceSheetToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-PriceSheetToBlobStorage.ps1 index 13f0f9e4f..5d042a2f8 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-PriceSheetToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-PriceSheetToBlobStorage.ps1 @@ -14,14 +14,14 @@ param( [Parameter(Mandatory = $false)] [string] $externalCredentialName, - [Parameter(Mandatory = $false)] + [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] $meterCategories, # comma-separated meter categories (for example, "Virtual Machines,Storage") - [Parameter(Mandatory = $false)] - [string] $meterRegions # comma-separated billing meter regions (e.g., "EU North,EU West") + [Parameter(Mandatory = $false)] + [string] $meterRegions # comma-separated billing meter regions (for example, "EU North,EU West") ) $ErrorActionPreference = "Stop" @@ -30,16 +30,16 @@ function Authenticate-AzureWithOption { param ( [string] $authOption = "ManagedIdentity", [string] $cloudEnv = "AzureCloud", - [string] $clientID + [string] $clientID ) switch ($authOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnv -AccountId $clientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnv + Connect-AzAccount -Identity -EnvironmentName $cloudEnv break } } @@ -66,7 +66,7 @@ $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSi $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { - $storageAccountSinkEnv = $cloudEnvironment + $storageAccountSinkEnv = $cloudEnvironment } $storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue $storageAccountSinkKey = $null @@ -100,14 +100,14 @@ 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 @@ -119,8 +119,8 @@ else if (-not([string]::IsNullOrEmpty($externalCredentialName))) { "Logging in to Azure with $externalCredentialName external credential..." - Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential - $cloudEnvironment = $externalCloudEnvironment + Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential + $cloudEnvironment = $externalCloudEnvironment } # compute billing period @@ -187,7 +187,7 @@ if (-not([string]::IsNullOrEmpty($meterRegions))) } function Generate-Pricesheet { - param ( + param ( [string] $InputCSVPath, [string] $OutputCSVPath, [string] $HeaderLine @@ -264,7 +264,7 @@ function Generate-Pricesheet { $categoryWriteLine = $true break } - } + } foreach ($meterRegion in $meterRegionFilters) { @@ -273,7 +273,7 @@ function Generate-Pricesheet { $regionWriteLine = $true break } - } + } if ($categoryWriteLine -eq $true -and $regionWriteLine -eq $true) { @@ -288,19 +288,19 @@ function Generate-Pricesheet { $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..." + 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 "[$now] Removed $OutputCSVPath from local disk..." } Write-Output "Starting pricesheet export process for $billingPeriod billing period for Billing Account $BillingAccountID..." @@ -338,7 +338,7 @@ if ($result.StatusCode -in (200,202)) { $tries++ Write-Output "Checking whether export is ready (try $tries)..." - + Start-Sleep -Seconds $sleepSeconds $downloadResult = Invoke-AzRestMethod -Method GET -Path $requestResultPath @@ -375,10 +375,10 @@ if ($result.StatusCode -in (200,202)) $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..." + Write-Output "[$now] Removed $zipExportPath from local disk..." } else { @@ -390,7 +390,7 @@ if ($result.StatusCode -in (200,202)) Write-Output "Blob downloaded to $csvExportPath successfully." Generate-Pricesheet -InputCSVPath $csvExportPath -OutputCSVPath $finalCsvExportPath -HeaderLine 3 } - + $requestSuccess = $true } elseif ($downloadResult.StatusCode -eq 202) @@ -412,17 +412,17 @@ if ($result.StatusCode -in (200,202)) 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) diff --git a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-RBACAssignmentsToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-RBACAssignmentsToBlobStorage.ps1 index 64be55332..e21b1b2c9 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-RBACAssignmentsToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-RBACAssignmentsToBlobStorage.ps1 @@ -32,7 +32,7 @@ $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSi $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { - $storageAccountSinkEnv = $cloudEnvironment + $storageAccountSinkEnv = $cloudEnvironment } $storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue $storageAccountSinkKey = $null @@ -56,12 +56,12 @@ if (-not([string]::IsNullOrEmpty($externalCredentialName))) "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -69,7 +69,7 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else @@ -81,8 +81,8 @@ else if (-not([string]::IsNullOrEmpty($externalCredentialName))) { "Logging in to Azure with $externalCredentialName external credential..." - Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential - $cloudEnvironment = $externalCloudEnvironment + Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential + $cloudEnvironment = $externalCloudEnvironment } $tenantId = (Get-AzContext).Tenant.Id @@ -114,7 +114,7 @@ foreach ($subscription in $subscriptions) { Scope = $assignment.Scope RoleDefinition = $assignment.RoleDefinitionName } - $roleAssignments += $assignmentEntry + $roleAssignments += $assignmentEntry } else { @@ -130,10 +130,10 @@ foreach ($subscription in $subscriptions) { Scope = $assignment.Scope RoleDefinition = $assignment.RoleDefinitionName } - $roleAssignments += $assignmentEntry + $roleAssignments += $assignmentEntry } } - } + } } $fileDate = $datetime.ToString("yyyyMMdd") @@ -158,12 +158,12 @@ $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'ff 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..." +"[$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..." +"[$now] Removed $jsonExportPath from local disk..." $roleAssignments = @() @@ -179,15 +179,15 @@ if (-not(get-item "$localPath\.graph\" -ErrorAction SilentlyContinue)) Import-Module Microsoft.Graph.Identity.DirectoryManagement switch ($cloudEnvironment) { - "AzureUSGovernment" { + "AzureUSGovernment" { $graphEnvironment = "USGov" break } - "AzureChinaCloud" { + "AzureChinaCloud" { $graphEnvironment = "China" break } - "AzureGermanCloud" { + "AzureGermanCloud" { $graphEnvironment = "Germany" break } @@ -206,7 +206,7 @@ else "Logging in to Microsoft Graph with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-MgGraph -Identity -ClientId $uamiClientID -Environment $graphEnvironment -NoWelcome break } @@ -234,7 +234,7 @@ foreach ($role in $roles) Scope = $domainName RoleDefinition = $role.DisplayName } - $roleAssignments += $assignmentEntry + $roleAssignments += $assignmentEntry } } @@ -252,7 +252,7 @@ $rbacObjectsJson | Export-Csv -NoTypeInformation -Path $csvExportPath $csvBlobName = $csvExportPath $csvProperties = @{"ContentType" = "text/csv"}; -Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force +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..." @@ -260,9 +260,9 @@ $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'ff 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..." +"[$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..." +"[$now] Removed $jsonExportPath from local disk..." diff --git a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ReservationsPriceToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ReservationsPriceToBlobStorage.ps1 index 95201d301..675c0b37f 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ReservationsPriceToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ReservationsPriceToBlobStorage.ps1 @@ -1,5 +1,5 @@ param( - [Parameter(Mandatory = $false)] + [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' ) @@ -9,16 +9,16 @@ function Authenticate-AzureWithOption { param ( [string] $authOption = "ManagedIdentity", [string] $cloudEnv = "AzureCloud", - [string] $clientID + [string] $clientID ) switch ($authOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnv -AccountId $clientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnv + Connect-AzAccount -Identity -EnvironmentName $cloudEnv break } } @@ -45,7 +45,7 @@ $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSi $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { - $storageAccountSinkEnv = $cloudEnvironment + $storageAccountSinkEnv = $cloudEnvironment } $storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue $storageAccountSinkKey = $null @@ -71,14 +71,14 @@ 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 @@ -90,8 +90,8 @@ else if (-not([string]::IsNullOrEmpty($externalCredentialName))) { "Logging in to Azure with $externalCredentialName external credential..." - Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential - $cloudEnvironment = $externalCloudEnvironment + Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential + $cloudEnvironment = $externalCloudEnvironment } if (-not([string]::IsNullOrEmpty($filterVar))) @@ -124,13 +124,13 @@ $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" + 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 @@ -143,4 +143,4 @@ 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 "[$now] Removed $csvExportPath from local disk..." diff --git a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ReservationsUsageToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ReservationsUsageToBlobStorage.ps1 index 540bfe5bf..c51d78fc3 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ReservationsUsageToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-ReservationsUsageToBlobStorage.ps1 @@ -17,10 +17,10 @@ param( [Parameter(Mandatory = $false)] [string] $externalCredentialName, - [Parameter(Mandatory = $false)] + [Parameter(Mandatory = $false)] [string] $targetStartDate, # YYYY-MM-DD format - [Parameter(Mandatory = $false)] + [Parameter(Mandatory = $false)] [string] $targetEndDate # YYYY-MM-DD format ) @@ -47,7 +47,7 @@ $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSi $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { - $storageAccountSinkEnv = $cloudEnvironment + $storageAccountSinkEnv = $cloudEnvironment } $storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue $storageAccountSinkKey = $null @@ -89,12 +89,12 @@ $mcaBillingProfileIdRegex = "([A-Za-z0-9]+(-[A-Za-z0-9]+)+)" "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -102,7 +102,7 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else @@ -114,8 +114,8 @@ else if (-not([string]::IsNullOrEmpty($externalCredentialName))) { "Logging in to Azure with $externalCredentialName external credential..." - Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential - $cloudEnvironment = $externalCloudEnvironment + Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential + $cloudEnvironment = $externalCloudEnvironment } $tenantId = (Get-AzContext).Tenant.Id @@ -125,7 +125,7 @@ $tenantId = (Get-AzContext).Tenant.Id if ([string]::IsNullOrEmpty($targetStartDate) -or [string]::IsNullOrEmpty($targetEndDate)) { $targetStartDate = (Get-Date).Date.AddDays($consumptionOffsetDays * -1).ToString("yyyy-MM-dd") - $targetEndDate = $targetStartDate + $targetEndDate = $targetStartDate } if (-not([string]::IsNullOrEmpty($TargetScope))) @@ -271,7 +271,7 @@ Write-Output "[$now] Generated $($reservations.Count) entries..." if ($BillingAccountID -match $mcaBillingAccountIdRegex) { - $csvExportPath = "$targetStartDate-$BillingProfileID.csv" + $csvExportPath = "$targetStartDate-$BillingProfileID.csv" } else { @@ -284,7 +284,7 @@ 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" + Write-Output "Current culture ($($ci.Name)) does not use . as decimal separator" $ci.NumberFormat.NumberDecimalSeparator = '.' [System.Threading.Thread]::CurrentThread.CurrentCulture = $ci } @@ -294,11 +294,11 @@ $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 +Write-Output "[$now] Removed $csvExportPath from local disk..." \ No newline at end of file diff --git a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-SavingsPlansUsageToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-SavingsPlansUsageToBlobStorage.ps1 index 43d751691..b48856f2c 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-SavingsPlansUsageToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Export-SavingsPlansUsageToBlobStorage.ps1 @@ -41,7 +41,7 @@ $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSi $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { - $storageAccountSinkEnv = $cloudEnvironment + $storageAccountSinkEnv = $cloudEnvironment } $storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue $storageAccountSinkKey = $null @@ -81,12 +81,12 @@ $mcaBillingProfileIdRegex = "([A-Za-z0-9]+(-[A-Za-z0-9]+)+)" "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -94,7 +94,7 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else @@ -106,8 +106,8 @@ else if (-not([string]::IsNullOrEmpty($externalCredentialName))) { "Logging in to Azure with $externalCredentialName external credential..." - Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential - $cloudEnvironment = $externalCloudEnvironment + Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential + $cloudEnvironment = $externalCloudEnvironment } $tenantId = (Get-AzContext).Tenant.Id @@ -230,7 +230,7 @@ $targetDate = $datetime.ToString("yyyy-MM-dd") if ($BillingAccountID -match $mcaBillingAccountIdRegex) { - $csvExportPath = "$targetDate-$BillingProfileID.csv" + $csvExportPath = "$targetDate-$BillingProfileID.csv" } else { @@ -243,7 +243,7 @@ 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" + Write-Output "Current culture ($($ci.Name)) does not use . as decimal separator" $ci.NumberFormat.NumberDecimalSeparator = '.' [System.Threading.Thread]::CurrentThread.CurrentCulture = $ci } @@ -253,11 +253,11 @@ $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 +Write-Output "[$now] Removed $csvExportPath from local disk..." \ No newline at end of file diff --git a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Ingest-OptimizationCSVExportsToLogAnalytics.ps1 b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Ingest-OptimizationCSVExportsToLogAnalytics.ps1 index a162e9931..b3be2d52f 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/data-collection/Ingest-OptimizationCSVExportsToLogAnalytics.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/data-collection/Ingest-OptimizationCSVExportsToLogAnalytics.ps1 @@ -54,12 +54,12 @@ $LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl" "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -95,7 +95,7 @@ Function Post-OMSData($workspaceId, $sharedKey, $body, $logType, $TimeStampField -method $method ` -contentType $contentType ` -resource $resource - + $uri = "https://" + $workspaceId + ".ods.opinsights.azure.com" + $resource + "?api-version=2016-04-01" if ($AzureEnvironment -eq "AzureChinaCloud") { @@ -122,7 +122,7 @@ Function Post-OMSData($workspaceId, $sharedKey, $body, $logType, $TimeStampField $response = Invoke-WebRequest -Uri $uri -Method POST -ContentType $contentType -Headers $OMSheaders -Body $body -UseBasicParsing -TimeoutSec 1000 } catch { - if ($_.Exception.Response.StatusCode.Value__ -eq 401) { + if ($_.Exception.Response.StatusCode.Value__ -eq 401) { "REAUTHENTICATING" $response = Invoke-WebRequest -Uri $uri -Method POST -ContentType $contentType -Headers $OMSheaders -Body $body -UseBasicParsing -TimeoutSec 1000 @@ -133,7 +133,7 @@ Function Post-OMSData($workspaceId, $sharedKey, $body, $logType, $TimeStampField } } - return $response.StatusCode + return $response.StatusCode } #endregion Functions @@ -163,14 +163,14 @@ 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $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 @@ -181,7 +181,7 @@ do { 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)) @@ -189,8 +189,8 @@ if (-not($connectionSuccess)) throw "Could not establish connection to SQL." } -$Conn.Close() -$Conn.Dispose() +$Conn.Close() +$Conn.Dispose() if ($controlRows.Count -eq 0 -or -not($controlRows[0].LastProcessedDateTime)) { @@ -234,7 +234,7 @@ foreach ($blob in $unprocessedBlobs) { $lineCounter = 0 $chunkLines = @() - while ($r.Peek() -ge 0) + while ($r.Peek() -ge 0) { $line = $r.ReadLine() if ($lineCounter -eq 0) @@ -244,7 +244,7 @@ foreach ($blob in $unprocessedBlobs) { } else { - $linesProcessed++ + $linesProcessed++ } if ($lastProcessedLine -lt $linesProcessed -and $lineCounter -gt 0) { @@ -258,12 +258,12 @@ foreach ($blob in $unprocessedBlobs) { 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) + + if ($res -ge 200 -and $res -lt 300) { - Write-Output "Succesfully uploaded $lineCounter $LogAnalyticsSuffix rows to Log Analytics" + Write-Output "Succesfully uploaded $lineCounter $LogAnalyticsSuffix rows to Log Analytics" } - else + else { Write-Warning "Failed to upload $lineCounter $LogAnalyticsSuffix rows. Error code: $res" $r.Dispose() @@ -277,12 +277,12 @@ foreach ($blob in $unprocessedBlobs) { } if ($r.Peek() -lt 0) { - $lastProcessedLine = -1 + $lastProcessedLine = -1 } else { - $lastProcessedLine = $linesProcessed - 1 + $lastProcessedLine = $linesProcessed - 1 } - + $updatedLastProcessedLine = $lastProcessedLine $updatedLastProcessedDateTime = $lastProcessedDateTime if ($r.Peek() -lt 0) { @@ -292,16 +292,16 @@ foreach ($blob in $unprocessedBlobs) { 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $Conn.Open() $Cmd=new-object system.Data.SqlClient.SqlCommand $Cmd.Connection = $Conn $Cmd.CommandText = $sqlStatement $Cmd.CommandTimeout = $SqlTimeout $Cmd.ExecuteReader() - $Conn.Close() - $Conn.Dispose() + $Conn.Close() + $Conn.Dispose() $chunkLines = @() $chunkLines += $header @@ -310,34 +310,34 @@ foreach ($blob in $unprocessedBlobs) { else { $lineCounter++ - } + } } $r.Dispose() if ($linesProcessed -eq 0) { Write-Output "No rows found" - $updatedLastProcessedLine = -1 + $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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $Conn.Open() $Cmd=new-object system.Data.SqlClient.SqlCommand $Cmd.Connection = $Conn $Cmd.CommandText = $sqlStatement $Cmd.CommandTimeout = $SqlTimeout $Cmd.ExecuteReader() - $Conn.Close() - $Conn.Dispose() + $Conn.Close() + $Conn.Dispose() } else { - Write-Output "Processed $linesProcessed row(s) in total." + Write-Output "Processed $linesProcessed row(s) in total." } - + Remove-Item -Path $blobFilePath -Force } diff --git a/docs/deploy/optimization-engine/latest/runbooks/maintenance/CleanUp-OlderRecommendationsFromSqlServer.ps1 b/docs/deploy/optimization-engine/latest/runbooks/maintenance/CleanUp-OlderRecommendationsFromSqlServer.ps1 index 89b399917..e86f49753 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/maintenance/CleanUp-OlderRecommendationsFromSqlServer.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/maintenance/CleanUp-OlderRecommendationsFromSqlServer.ps1 @@ -33,12 +33,12 @@ $SqlTimeout = 120 "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -55,14 +55,14 @@ 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $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() + $DeletedRows = $Cmd.ExecuteNonQuery() $connectionSuccess = $true } catch { @@ -71,9 +71,9 @@ do { Start-Sleep -Seconds ($tries * 20) } finally { - $Conn.Close() - $Conn.Dispose() - } + $Conn.Close() + $Conn.Dispose() + } } while (-not($connectionSuccess) -and $tries -lt 3) if (-not($connectionSuccess)) diff --git a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Ingest-RecommendationsToLogAnalytics.ps1 b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Ingest-RecommendationsToLogAnalytics.ps1 index 4580d5902..f6ff02274 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Ingest-RecommendationsToLogAnalytics.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Ingest-RecommendationsToLogAnalytics.ps1 @@ -81,7 +81,7 @@ Function Post-OMSData($workspaceId, $sharedKey, $body, $logType, $TimeStampField -method $method ` -contentType $contentType ` -resource $resource - + $uri = "https://" + $workspaceId + ".ods.opinsights.azure.com" + $resource + "?api-version=2016-04-01" if ($AzureEnvironment -eq "AzureChinaCloud") { @@ -108,7 +108,7 @@ Function Post-OMSData($workspaceId, $sharedKey, $body, $logType, $TimeStampField $response = Invoke-WebRequest -Uri $uri -Method POST -ContentType $contentType -Headers $OMSheaders -Body $body -UseBasicParsing -TimeoutSec 1000 } catch { - if ($_.Exception.Response.StatusCode.Value__ -eq 401) { + if ($_.Exception.Response.StatusCode.Value__ -eq 401) { "REAUTHENTICATING" $response = Invoke-WebRequest -Uri $uri -Method POST -ContentType $contentType -Headers $OMSheaders -Body $body -UseBasicParsing -TimeoutSec 1000 @@ -119,7 +119,7 @@ Function Post-OMSData($workspaceId, $sharedKey, $body, $logType, $TimeStampField } } - return $response.StatusCode + return $response.StatusCode } #endregion Functions @@ -127,12 +127,12 @@ Function Post-OMSData($workspaceId, $sharedKey, $body, $logType, $TimeStampField "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -164,14 +164,14 @@ 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $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 @@ -182,7 +182,7 @@ do { 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)) @@ -190,8 +190,8 @@ if (-not($connectionSuccess)) throw "Could not establish connection to SQL." } -$Conn.Close() -$Conn.Dispose() +$Conn.Close() +$Conn.Dispose() if ($controlRows.Count -eq 0 -or -not($controlRows[0].LastProcessedDateTime)) { @@ -240,7 +240,7 @@ foreach ($blob in $unprocessedBlobs) { } else { - $recCount = $jsonObject.Count + $recCount = $jsonObject.Count } $linesProcessed = 0 @@ -256,9 +256,9 @@ foreach ($blob in $unprocessedBlobs) { { $jsonObjectArray = @() $jsonObjectArray += $jsonObject - $jsonObjectSplitted += , $jsonObjectArray + $jsonObjectSplitted += , $jsonObjectArray } - + for ($j = 0; $j -lt $jsonObjectSplitted.Count; $j++) { if ($jsonObjectSplitted[$j]) @@ -269,23 +269,23 @@ foreach ($blob in $unprocessedBlobs) { 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].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] + + $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" + Write-Output "Succesfully uploaded $currentObjectLines $LogAnalyticsSuffix rows to Log Analytics" $linesProcessed += $currentObjectLines if ($j -eq ($jsonObjectSplitted.Count - 1)) { - $lastProcessedLine = -1 + $lastProcessedLine = -1 } else { - $lastProcessedLine = $linesProcessed - 1 + $lastProcessedLine = $linesProcessed - 1 } - + $updatedLastProcessedLine = $lastProcessedLine $updatedLastProcessedDateTime = $lastProcessedDateTime if ($j -eq ($jsonObjectSplitted.Count - 1)) { @@ -295,16 +295,16 @@ foreach ($blob in $unprocessedBlobs) { 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $Conn.Open() $Cmd=new-object system.Data.SqlClient.SqlCommand $Cmd.Connection = $Conn $Cmd.CommandText = $sqlStatement $Cmd.CommandTimeout = $SqlTimeout $Cmd.ExecuteReader() - $Conn.Close() - $Conn.Dispose() + $Conn.Close() + $Conn.Dispose() } Else { $linesProcessed += $currentObjectLines @@ -314,8 +314,8 @@ foreach ($blob in $unprocessedBlobs) { } else { - $linesProcessed += $currentObjectLines - } + $linesProcessed += $currentObjectLines + } } } diff --git a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Ingest-RecommendationsToSQLServer.ps1 b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Ingest-RecommendationsToSQLServer.ps1 index 8772352d1..eb9d9e963 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Ingest-RecommendationsToSQLServer.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Ingest-RecommendationsToSQLServer.ps1 @@ -44,12 +44,12 @@ if (-not($StorageBlobsPageSize -gt 0)) "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -85,25 +85,25 @@ 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $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 + $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)) @@ -116,12 +116,12 @@ if ($controlRows.Count -eq 0) throw "Could not find a control row for $storageAccountSinkContainer container and $recommendationsTable table." } -$controlRow = $controlRows[0] +$controlRow = $controlRows[0] $lastProcessedLine = $controlRow.LastProcessedLine $lastProcessedDateTime = $controlRow.LastProcessedDateTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") -$Conn.Close() -$Conn.Dispose() +$Conn.Close() +$Conn.Dispose() Write-Output "Processing blobs modified after $lastProcessedDateTime (line $lastProcessedLine) and ingesting them into the Recommendations SQL table..." @@ -159,7 +159,7 @@ foreach ($blob in $unprocessedBlobs) { } else { - $recCount = $jsonObject.Count + $recCount = $jsonObject.Count } $linesProcessed = 0 @@ -175,9 +175,9 @@ foreach ($blob in $unprocessedBlobs) { { $jsonObjectArray = @() $jsonObjectArray += $jsonObject - $jsonObjectSplitted += , $jsonObjectArray + $jsonObjectSplitted += , $jsonObjectArray } - + for ($j = 0; $j -lt $jsonObjectSplitted.Count; $j++) { if ($jsonObjectSplitted[$j]) @@ -192,11 +192,11 @@ foreach ($blob in $unprocessedBlobs) { 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].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" @@ -230,10 +230,10 @@ foreach ($blob in $unprocessedBlobs) { } $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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn2.AccessToken = $dbToken.Token - $Conn2.Open() - + $Conn2.Open() + $Cmd=new-object system.Data.SqlClient.SqlCommand $Cmd.Connection = $Conn2 $Cmd.CommandText = $sqlStatement @@ -247,18 +247,18 @@ foreach ($blob in $unprocessedBlobs) { Write-Output "Failed statement: $sqlStatement" throw } - - $Conn2.Close() - + + $Conn2.Close() + $linesProcessed += $currentObjectLines Write-Output "Processed $linesProcessed lines..." if ($j -eq ($jsonObjectSplitted.Count - 1)) { - $lastProcessedLine = -1 + $lastProcessedLine = -1 } else { - $lastProcessedLine = $linesProcessed - 1 + $lastProcessedLine = $linesProcessed - 1 } - + $updatedLastProcessedLine = $lastProcessedLine $updatedLastProcessedDateTime = $lastProcessedDateTime if ($j -eq ($jsonObjectSplitted.Count - 1)) { @@ -268,20 +268,20 @@ foreach ($blob in $unprocessedBlobs) { 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $Conn.Open() $Cmd=new-object system.Data.SqlClient.SqlCommand $Cmd.Connection = $Conn $Cmd.CommandText = $sqlStatement - $Cmd.CommandTimeout = $SqlTimeout + $Cmd.CommandTimeout = $SqlTimeout $Cmd.ExecuteReader() $Conn.Close() } else { - $linesProcessed += $currentObjectLines - } + $linesProcessed += $currentObjectLines + } } } diff --git a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Ingest-SuppressionsToLogAnalytics.ps1 b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Ingest-SuppressionsToLogAnalytics.ps1 index 84725c4fc..b37ea56da 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Ingest-SuppressionsToLogAnalytics.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Ingest-SuppressionsToLogAnalytics.ps1 @@ -70,7 +70,7 @@ Function Post-OMSData($workspaceId, $sharedKey, $body, $logType, $TimeStampField -method $method ` -contentType $contentType ` -resource $resource - + $uri = "https://" + $workspaceId + ".ods.opinsights.azure.com" + $resource + "?api-version=2016-04-01" if ($AzureEnvironment -eq "AzureChinaCloud") { @@ -97,7 +97,7 @@ Function Post-OMSData($workspaceId, $sharedKey, $body, $logType, $TimeStampField $response = Invoke-WebRequest -Uri $uri -Method POST -ContentType $contentType -Headers $OMSheaders -Body $body -UseBasicParsing -TimeoutSec 1000 } catch { - if ($_.Exception.Response.StatusCode.Value__ -eq 401) { + if ($_.Exception.Response.StatusCode.Value__ -eq 401) { "REAUTHENTICATING" $response = Invoke-WebRequest -Uri $uri -Method POST -ContentType $contentType -Headers $OMSheaders -Body $body -UseBasicParsing -TimeoutSec 1000 @@ -108,19 +108,19 @@ Function Post-OMSData($workspaceId, $sharedKey, $body, $logType, $TimeStampField } } - return $response.StatusCode + return $response.StatusCode } #endregion Functions "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -136,25 +136,25 @@ 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $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 + $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)) @@ -162,8 +162,8 @@ if (-not($connectionSuccess)) throw "Could not establish connection to SQL." } -$Conn.Close() -$Conn.Dispose() +$Conn.Close() +$Conn.Dispose() $datetime = (get-date).ToUniversalTime() $timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z") @@ -209,7 +209,7 @@ foreach ($filter in $filters) $instanceId = $null $instanceName = $null - $ObjectGuid = [System.Guid]::empty + $ObjectGuid = [System.Guid]::empty if ([System.Guid]::TryParse($filter.InstanceId, [System.Management.Automation.PSReference]$ObjectGuid)) { $instanceId = $filter.InstanceId @@ -241,7 +241,7 @@ $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" + Write-Output "Succesfully uploaded $($filterObjects.Count) $LogAnalyticsSuffix rows to Log Analytics" } Else { Write-Warning "Failed to upload $($filterObjects.Count) $LogAnalyticsSuffix rows. Error code: $res" diff --git a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-AADExpiringCredentialsToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-AADExpiringCredentialsToBlobStorage.ps1 index 8bd5f2f45..8873f6f81 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-AADExpiringCredentialsToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-AADExpiringCredentialsToBlobStorage.ps1 @@ -23,7 +23,7 @@ $workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogA $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue +$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" } @@ -52,12 +52,12 @@ $LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl" "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -73,25 +73,25 @@ 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $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 + $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)) @@ -103,8 +103,8 @@ $aadObjectsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.Collec Write-Output "Will run query against tables $aadObjectsTableName" -$Conn.Close() -$Conn.Dispose() +$Conn.Close() +$Conn.Dispose() $recommendationSearchTimeSpan = 1 @@ -122,7 +122,7 @@ $recommendationsErrors = 0 # Execute the expiring creds recommendation query against Log Analytics -$baseQuery = @" +$baseQuery = @" let expiryInterval = $($expiringCredsDays)d; let AppsAndKeys = materialize ($aadObjectsTableName | where TimeGenerated > ago(1d) @@ -133,7 +133,7 @@ $baseQuery = @" | project-away Keys_s | mv-expand Keys | evaluate bag_unpack(Keys) - | union ( + | union ( $aadObjectsTableName | where TimeGenerated > ago(1d) | where ObjectType_s in ('Application','ServicePrincipal') @@ -170,7 +170,7 @@ try } catch { - Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" + Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -251,7 +251,7 @@ Write-Output "[$now] Removed $jsonExportPath from local disk..." # Execute the not expiring in less than X years creds recommendation query against Log Analytics -$baseQuery = @" +$baseQuery = @" let expiryInterval = $($notExpiringCredsDays)d; let AppsAndKeys = materialize ($aadObjectsTableName | where TimeGenerated > ago(1d) @@ -261,7 +261,7 @@ $baseQuery = @" | project-away Keys_s | mv-expand Keys | evaluate bag_unpack(Keys) - | union ( + | union ( $aadObjectsTableName | where TimeGenerated > ago(1d) | where ObjectSubType_s != 'ManagedIdentity' @@ -286,7 +286,7 @@ try } catch { - Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" + Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } diff --git a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-ARMOptimizationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-ARMOptimizationsToBlobStorage.ps1 index 555950094..31d803150 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-ARMOptimizationsToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-ARMOptimizationsToBlobStorage.ps1 @@ -23,7 +23,7 @@ $workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogA $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue +$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" } @@ -102,12 +102,12 @@ $LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl" "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -123,25 +123,25 @@ 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $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 + $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)) @@ -154,8 +154,8 @@ $subscriptionsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.Col Write-Output "Will run query against tables $rbacTableName and $subscriptionsTableName" -$Conn.Close() -$Conn.Dispose() +$Conn.Close() +$Conn.Dispose() $recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart @@ -180,13 +180,13 @@ $baseQuery = @" | 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 ( + | join kind=leftouter ( $subscriptionsTableName | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s, Tags_s, InstanceId_s + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s, Tags_s, InstanceId_s ) on SubscriptionGuid_g - | where AssignmentsCount >= $assignmentsThreshold + | where AssignmentsCount >= $assignmentsThreshold "@ try @@ -194,12 +194,12 @@ 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) + $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 "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -245,7 +245,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } @@ -302,7 +302,7 @@ $baseQuery = @" | 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 + | where AssignmentsCount >= $assignmentsThreshold "@ try @@ -310,12 +310,12 @@ 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) + $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 "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -396,15 +396,15 @@ Write-Output "Looking for subscriptions with more than $rgPercentageThreshold% o $baseQuery = @" $subscriptionsTableName | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions/resourceGroups' + | where ContainerType_s =~ 'microsoft.resources/subscriptions/resourceGroups' | summarize RGCount=count() by SubscriptionGuid_g, TenantGuid_g, Cloud_s - | join kind=leftouter ( + | join kind=leftouter ( $subscriptionsTableName | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s, Tags_s, InstanceId_s + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s, Tags_s, InstanceId_s ) on SubscriptionGuid_g - | where RGCount >= $rgThreshold + | where RGCount >= $rgThreshold "@ try @@ -412,12 +412,12 @@ 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) + $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 "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -463,7 +463,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } diff --git a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-AdvisorAsIsToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-AdvisorAsIsToBlobStorage.ps1 index f37a76767..c47bb3b39 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-AdvisorAsIsToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-AdvisorAsIsToBlobStorage.ps1 @@ -21,7 +21,7 @@ $workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogA $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue +$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" } @@ -60,12 +60,12 @@ $FiltersTable = "Filters" "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -81,25 +81,25 @@ 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $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 + $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)) @@ -112,8 +112,8 @@ $subscriptionsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.Col Write-Output "Will run query against tables $subscriptionsTableName and $advisorTableName" -$Conn.Close() -$Conn.Dispose() +$Conn.Close() +$Conn.Dispose() Write-Output "Getting excluded recommendation sub-type IDs..." @@ -123,25 +123,25 @@ 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $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 + $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)) @@ -149,8 +149,8 @@ if (-not($connectionSuccess)) throw "Could not establish connection to SQL." } -$Conn.Close() -$Conn.Dispose() +$Conn.Close() +$Conn.Dispose() # Grab a context reference to the Storage Account where the recommendations file will be stored @@ -172,28 +172,28 @@ if (-not([string]::IsNullOrEmpty($CategoryFilter))) for ($i = 0; $i -lt $categories.Count; $i++) { $categories[$i] = "'" + $categories[$i] + "'" - } + } $FinalCategoryFilter = " and Category in (" + ($categories -join ",") + ")" } $baseQuery = @" let advisorInterval = $($daysBackwards)d; -$advisorTableName +$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 ( +| join kind=leftouter ( $subscriptionsTableName - | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + | 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 +try { $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $daysBackwards) -Wait 600 -IncludeStatistics if ($queryResults) @@ -203,7 +203,7 @@ try } catch { - Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" + Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] throw "Execution aborted" } @@ -220,7 +220,7 @@ $timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z") Write-Output "Generating fit score..." -foreach ($result in $results) { +foreach ($result in $results) { if ($filters | Where-Object { $_.RecommendationSubTypeId -eq $result.RecommendationTypeId_g}) { @@ -239,7 +239,7 @@ foreach ($result in $results) { { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } @@ -249,7 +249,7 @@ foreach ($result in $results) { { ($result.AdditionalInfo_s | ConvertFrom-Json).PsObject.Properties | ForEach-Object { $additionalInfoDictionary[$_.Name] = $_.Value } } - + $fitScore = 5 $queryInstanceId = $result.InstanceId_s @@ -289,7 +289,7 @@ foreach ($result in $results) { DetailsURL = $detailsURL } - $recommendations += $recommendation + $recommendations += $recommendation } # Export the recommendations as JSON to blob storage diff --git a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-AdvisorCostAugmentedToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-AdvisorCostAugmentedToBlobStorage.ps1 index d5e11aef1..85399b202 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-AdvisorCostAugmentedToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-AdvisorCostAugmentedToBlobStorage.ps1 @@ -19,7 +19,7 @@ function Find-SkuHourlyPrice { $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] @@ -28,22 +28,22 @@ function Find-SkuHourlyPrice { { $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] @@ -53,13 +53,13 @@ function Find-SkuHourlyPrice { $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 @@ -101,7 +101,7 @@ $workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyti $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue +$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" } @@ -202,12 +202,12 @@ $FiltersTable = "Filters" "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -223,25 +223,25 @@ 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $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 + $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)) @@ -257,8 +257,8 @@ $pricesheetTableName = $lognamePrefix + ($controlRows | Where-Object { $_.Collec Write-Output "Will run query against tables $vmsTableName, $subscriptionsTableName, $advisorTableName, $pricesheetTableName and $consumptionTableName" -$Conn.Close() -$Conn.Dispose() +$Conn.Close() +$Conn.Dispose() Write-Output "Getting excluded recommendation sub-type IDs..." @@ -268,25 +268,25 @@ 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $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 + $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)) @@ -294,8 +294,8 @@ if (-not($connectionSuccess)) throw "Could not establish connection to SQL." } -$Conn.Close() -$Conn.Dispose() +$Conn.Close() +$Conn.Dispose() $recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart @@ -321,7 +321,7 @@ if ($cloudEnvironment -eq "AzureCloud") $pricesheetRegion = "EU West" } -try +try { $pricesheetEntries = @() @@ -330,17 +330,17 @@ try | 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)" + + 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 "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..." } @@ -356,44 +356,44 @@ if ($additionalPerfWorkspaces) foreach ($additionalWorkspace in $additionalWorkspaces) { $additionalWorkspace = $additionalWorkspace.Trim() $linuxMemoryPerfAdditionalWorkspaces += @" - | union ( workspace('$additionalWorkspace').Perf - | where TimeGenerated > ago(perfInterval) and _ResourceId in (RightSizeInstanceIds) + | union ( workspace('$additionalWorkspace').Perf + | where TimeGenerated > ago(perfInterval) and _ResourceId in (RightSizeInstanceIds) | where CounterName == '% Used Memory' - | extend WorkspaceId = TenantId + | 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 + | 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 + | 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 + | 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 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 + | 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), + | 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) "@ } @@ -411,52 +411,52 @@ 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 +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 +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 +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 +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 +| 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 +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 +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 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 +| 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), +| 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 +$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])) @@ -471,10 +471,10 @@ $advisorTableName | summarize Last30DaysCost = sum(FinalCost), Last30DaysQuantity = sum(VMConsumedQuantity) by InstanceId_s ) on InstanceId_s | join kind=leftouter ( - $vmsTableName - | where TimeGenerated > ago(1d) + $vmsTableName + | where TimeGenerated > ago(1d) | distinct InstanceId_s, NicCount_s, DataDiskCount_s -) on InstanceId_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 @@ -483,11 +483,11 @@ $advisorTableName | 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 ( +| join kind=leftouter ( $subscriptionsTableName | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s ) on SubscriptionGuid_g "@ @@ -495,7 +495,7 @@ Write-Output "Will run the following query (use this query against the LA worksp Write-Output "Getting cost recommendations for $($daysBackwards)d Advisor and $($perfDaysBackwards)d Perf history and a $perfTimeGrain time grain..." -try +try { $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics if ($queryResults) @@ -505,7 +505,7 @@ try } catch { - Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" + Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] throw "Execution aborted" } @@ -524,7 +524,7 @@ $skuPricesFound = @{} Write-Output "Generating fit score..." -foreach ($result in $results) { +foreach ($result in $results) { if ($filters | Where-Object { $_.RecommendationSubTypeId -eq $result.RecommendationTypeId_g}) { @@ -545,17 +545,17 @@ foreach ($result in $results) { { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $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"]))) { @@ -570,7 +570,7 @@ foreach ($result in $results) { $additionalInfoDictionary["displaySKU"] = $additionalInfoDictionary["vmSize"] } - $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost + $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost $fitScore = 5 $hasCpuRamPerfMetrics = $false @@ -636,7 +636,7 @@ foreach ($result in $results) { if (-not([string]::isNullOrEmpty($result.MaxPIOPS))) { if ([double]$result.MaxPIOPS -ge [double]$targetUncachedDiskIOPS) { $fitScore -= 1 - $additionalInfoDictionary["SupportsIOPS"] = "false:needs$($result.MaxPIOPS)-max$targetUncachedDiskIOPS" + $additionalInfoDictionary["SupportsIOPS"] = "false:needs$($result.MaxPIOPS)-max$targetUncachedDiskIOPS" } } else { @@ -646,14 +646,14 @@ foreach ($result in $results) { } else { $fitScore -= 1 - $additionalInfoDictionary["SupportsIOPS"] = "unknown:needs$($result.MaxPIOPS)" + $additionalInfoDictionary["SupportsIOPS"] = "unknown:needs$($result.MaxPIOPS)" } $targetUncachedDiskMiBps = [double]([int]($targetSku.Capabilities | Where-Object { $_.Name -eq 'UncachedDiskBytesPerSecond' }).Value) / 1024 / 1024 - if ($targetUncachedDiskMiBps -gt 0) { + 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" + $fitScore -= 1 + $additionalInfoDictionary["SupportsMiBps"] = "false:needs$($result.MaxPMiBps)-max$targetUncachedDiskMiBps" } } else { @@ -674,7 +674,7 @@ foreach ($result in $results) { else { $targetSkuSavingsMonthly = [double]$result.Last30DaysCost / 2 - } + } if ($targetSku -and $null -eq $skuPricesFound[$targetSku.Name]) { @@ -685,7 +685,7 @@ foreach ($result in $results) { if ($targetSku -and $skuPricesFound[$targetSku.Name] -gt 0 -and $skuPricesFound[$targetSku.Name] -lt [double]::MaxValue) { - $targetSkuPrice = $skuPricesFound[$targetSku.Name] + $targetSkuPrice = $skuPricesFound[$targetSku.Name] if ($null -eq $skuPricesFound[$currentSku.Name]) { @@ -694,12 +694,12 @@ foreach ($result in $results) { if ($skuPricesFound[$currentSku.Name] -gt 0) { - $currentSkuPrice = $skuPricesFound[$currentSku.Name] - $tentativeTargetSkuSavingsMonthly = ($currentSkuPrice * [double] $result.Last30DaysQuantity) - ($targetSkuPrice * [double] $result.Last30DaysQuantity) + $currentSkuPrice = $skuPricesFound[$currentSku.Name] + $tentativeTargetSkuSavingsMonthly = ($currentSkuPrice * [double] $result.Last30DaysQuantity) - ($targetSkuPrice * [double] $result.Last30DaysQuantity) } else { - $tentativeTargetSkuSavingsMonthly = [double]$result.Last30DaysCost - ($targetSkuPrice * [double] $result.Last30DaysQuantity) + $tentativeTargetSkuSavingsMonthly = [double]$result.Last30DaysCost - ($targetSkuPrice * [double] $result.Last30DaysQuantity) } } @@ -707,12 +707,12 @@ foreach ($result in $results) { { $targetSkuSavingsMonthly = $tentativeTargetSkuSavingsMonthly } - + if ($targetSkuSavingsMonthly -eq [double]::PositiveInfinity) { $targetSkuSavingsMonthly = [double] $result.Last30DaysCost / 2 } - + $savingsMonthly = $targetSkuSavingsMonthly } @@ -732,8 +732,8 @@ foreach ($result in $results) { if (-not([string]::isNullOrEmpty($result.PCPUPercentage))) { if ([double]$result.PCPUPercentage -ge [double]$cpuThreshold) { - $fitScore -= 0.5 - $additionalInfoDictionary["BelowCPUThreshold"] = "false:needs$($result.PCPUPercentage)-max$cpuThreshold" + $fitScore -= 0.5 + $additionalInfoDictionary["BelowCPUThreshold"] = "false:needs$($result.PCPUPercentage)-max$cpuThreshold" } $hasCpuRamPerfMetrics = $true } @@ -743,8 +743,8 @@ foreach ($result in $results) { } if (-not([string]::isNullOrEmpty($result.PMemoryPercentage))) { if ([double]$result.PMemoryPercentage -ge [double]$memoryThreshold) { - $fitScore -= 0.5 - $additionalInfoDictionary["BelowMemoryThreshold"] = "false:needs$($result.PMemoryPercentage)-max$memoryThreshold" + $fitScore -= 0.5 + $additionalInfoDictionary["BelowMemoryThreshold"] = "false:needs$($result.PMemoryPercentage)-max$memoryThreshold" } $hasCpuRamPerfMetrics = $true } @@ -754,8 +754,8 @@ foreach ($result in $results) { } if (-not([string]::isNullOrEmpty($result.PNetworkMbps))) { if ([double]$result.PNetworkMbps -ge [double]$networkThreshold) { - $fitScore -= 0.1 - $additionalInfoDictionary["BelowNetworkThreshold"] = "false:needs$($result.PNetworkMbps)-max$networkThreshold" + $fitScore -= 0.1 + $additionalInfoDictionary["BelowNetworkThreshold"] = "false:needs$($result.PNetworkMbps)-max$networkThreshold" } } else { @@ -775,16 +775,16 @@ foreach ($result in $results) { { if ($result.RecommendationTypeId_g -eq $rightSizeRecommendationId) { - $savingsMonthly = [double] $result.Last30DaysCost + $savingsMonthly = [double] $result.Last30DaysCost } else { $savingsMonthly = 0.0 # unknown } - } + } } - $additionalInfoDictionary["savingsAmount"] = [double] $savingsMonthly + $additionalInfoDictionary["savingsAmount"] = [double] $savingsMonthly $queryInstanceId = $result.InstanceId_s if (-not($hasCpuRamPerfMetrics)) @@ -796,7 +796,7 @@ foreach ($result in $results) { "AzureUSGovernment" { $azureTld = "us" } default { $azureTld = "com" } } - + $detailsURL = "https://portal.azure.$azureTld/#@$($result.TenantGuid_g)/resource/$queryInstanceId/overview" } else @@ -811,28 +811,28 @@ foreach ($result in $results) { let perfInterval = $($perfDaysBackwards)d; let armId = tolower(`'$queryInstanceId`'); let gInt = $perfTimeGrain; - let LinuxMemoryPerf = $($queryWorkspace)Perf - | where TimeGenerated > ago(perfInterval) + 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) + | 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) + | extend MemoryAvailableMBs = CounterValue, InstanceId = tolower(_ResourceId) | project TimeGenerated, MemoryAvailableMBs, InstanceId; let MemoryPerf = WindowsMemoryPerf | join kind=inner ( - $vmsTableName + $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 + | 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) + 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 @@ -851,7 +851,7 @@ foreach ($result in $results) { $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" + $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 @{ diff --git a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-AppServiceOptimizationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-AppServiceOptimizationsToBlobStorage.ps1 index 2fb7f26b7..ed8e1fe5d 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-AppServiceOptimizationsToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-AppServiceOptimizationsToBlobStorage.ps1 @@ -26,7 +26,7 @@ $workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyti $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue +$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" } @@ -100,12 +100,12 @@ $LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl" "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -121,25 +121,25 @@ 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $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 + $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)) @@ -154,8 +154,8 @@ $subscriptionsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.Col Write-Output "Will run query against tables $appServicePlansTableName, $subscriptionsTableName, $metricsTableName and $consumptionTableName" -$Conn.Close() -$Conn.Dispose() +$Conn.Close() +$Conn.Dispose() $recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart @@ -175,51 +175,51 @@ $recommendationsErrors = 0 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 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 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 + 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) + 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) + 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 + + $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=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 ( + | join kind=leftouter ( $subscriptionsTableName | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionId = SubscriptionGuid_g, SubscriptionName = ContainerName_s + | 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 +try { $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics if ($queryResults) @@ -229,7 +229,7 @@ try } catch { - Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" + Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -248,18 +248,18 @@ foreach ($result in $results) { $queryInstanceId = $result.InstanceId_s $queryText = @" -let perfInterval = $($perfDaysBackwards)d; +let perfInterval = $($perfDaysBackwards)d; let armId = `'$queryInstanceId`'; let gInt = $perfTimeGrain; -let MemoryPerf = $metricsTableName -| where TimeGenerated > ago(perfInterval) +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) +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' @@ -288,7 +288,7 @@ MemoryPerf $additionalInfoDictionary["InstanceCount"] = [int] $result.NumberOfWorkers_s $additionalInfoDictionary["MetricCPUPercentage"] = "$($result.PCPUPercentage)" $additionalInfoDictionary["MetricMemoryPercentage"] = "$($result.PMemoryPercentage)" - $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost + $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost $additionalInfoDictionary["savingsAmount"] = ([double] $result.Last30DaysCost / 2) $fitScore = 5 @@ -305,7 +305,7 @@ MemoryPerf { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } @@ -357,46 +357,46 @@ 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 perfInterval = $($perfDaysBackwards)d; - let MemoryPerf = $metricsTableName - | where TimeGenerated > ago(perfInterval) + 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) + + 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) + 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 + $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 ( + | join kind=leftouter ( $subscriptionsTableName | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionId = SubscriptionGuid_g, SubscriptionName = ContainerName_s + | 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 +try { $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics if ($queryResults) @@ -406,7 +406,7 @@ try } catch { - Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" + Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -425,25 +425,25 @@ foreach ($result in $results) { $queryInstanceId = $result.InstanceId_s $queryText = @" -let perfInterval = $($perfDaysBackwards)d; +let perfInterval = $($perfDaysBackwards)d; let armId = `'$queryInstanceId`'; let gInt = $perfTimeGrain; -let MemoryPerf = $metricsTableName -| where TimeGenerated > ago(perfInterval) +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) +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) +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' @@ -481,7 +481,7 @@ MemoryPerf { $fitScore = 4 } - + $tags = @{} if (-not([string]::IsNullOrEmpty($result.Tags_s))) @@ -494,7 +494,7 @@ MemoryPerf { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } @@ -547,26 +547,26 @@ 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; +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 +| 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 ( +| join kind=leftouter ( $subscriptionsTableName - | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + | where TimeGenerated > ago(1d) + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s ) on SubscriptionGuid_g "@ -try +try { $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics if ($queryResults) @@ -576,7 +576,7 @@ try } catch { - Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" + Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -623,8 +623,8 @@ foreach ($result in $results) $additionalInfoDictionary["currentSku"] = $result.SkuSize_s $additionalInfoDictionary["InstanceCount"] = $result.NumberOfWorkers_s - $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost - $additionalInfoDictionary["savingsAmount"] = [double] $result.Last30DaysCost + $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost + $additionalInfoDictionary["savingsAmount"] = [double] $result.Last30DaysCost $fitScore = 5 @@ -640,7 +640,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } diff --git a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-DiskOptimizationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-DiskOptimizationsToBlobStorage.ps1 index a92155592..86a484745 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-DiskOptimizationsToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-DiskOptimizationsToBlobStorage.ps1 @@ -41,7 +41,7 @@ $workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyti $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue +$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" } @@ -95,12 +95,12 @@ $LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl" "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -116,25 +116,25 @@ 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $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 + $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)) @@ -151,8 +151,8 @@ $pricesheetTableName = $lognamePrefix + ($controlRows | Where-Object { $_.Collec Write-Output "Will run query against tables $disksTableName, $metricsTableName, $subscriptionsTableName, $pricesheetTableName and $consumptionTableName" -$Conn.Close() -$Conn.Dispose() +$Conn.Close() +$Conn.Dispose() $recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart @@ -177,7 +177,7 @@ if ($cloudEnvironment -eq "AzureCloud") $pricesheetRegion = "EU West" } -try +try { $pricesheetEntries = @() @@ -186,17 +186,17 @@ try | 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)" + + 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 "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..." } @@ -207,9 +207,9 @@ Write-Output "Looking for underutilized Disks, with less than $iopsPercentageThr $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 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' @@ -222,7 +222,7 @@ $baseQuery = @" $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 ( + | 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])) @@ -235,7 +235,7 @@ $baseQuery = @" $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 ( + | 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])) @@ -246,11 +246,11 @@ $baseQuery = @" | where MBsPercentage < $mbsPercentageThreshold ) on ResourceId | join kind=inner ( BilledDisks ) on ResourceId - | join kind=leftouter ( + | join kind=leftouter ( $subscriptionsTableName | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionId = SubscriptionGuid_g, SubscriptionName = ContainerName_s + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionId = SubscriptionGuid_g, SubscriptionName = ContainerName_s ) on SubscriptionId "@ @@ -259,12 +259,12 @@ 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) + $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 "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] throw "Execution aborted" } @@ -303,13 +303,13 @@ foreach ($result in $results) { $skuPricesFound[$sku.Size] = Find-DiskMonthlyPrice -DiskSizeTier $skuSize -SKUPriceSheet $pricesheetEntries } - + $currentSkuCandidate = New-Object PSObject -Property @{ Name = $skuSize MaxSizeGB = $skuMaxSizeGB - } + } - $currentSkuCandidates += $currentSkuCandidate + $currentSkuCandidates += $currentSkuCandidate } } $currentDiskTier = ($currentSkuCandidates | Sort-Object -Property MaxSizeGB | Select-Object -First 1).Name @@ -355,7 +355,7 @@ foreach ($result in $results) MaxMBps = $skuMaxBandwidthMBps } - $targetSkuCandidates += $targetSkuCandidate + $targetSkuCandidates += $targetSkuCandidate } } } @@ -366,10 +366,10 @@ foreach ($result in $results) { $queryInstanceId = $result.ResourceId $queryText = @" - let billingInterval = 30d; + let billingInterval = 30d; let armId = `'$queryInstanceId`'; let gInt = $perfTimeGrain; - let ThroughputMBsPerf = $metricsTableName + 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 @@ -377,25 +377,25 @@ foreach ($result in $results) | extend ThroughputMBs = todouble(MetricValue_s)/1024/1024 | project CollectedDate, ThroughputMBs, InstanceId_s=ResourceId | join kind=inner ( - $disksTableName + $disksTableName | where TimeGenerated > ago(1d) | distinct InstanceId_s, DiskThroughput_s ) on InstanceId_s - | extend MBsPercentage = ThroughputMBs / todouble(DiskThroughput_s) * 100 + | extend MBsPercentage = ThroughputMBs / todouble(DiskThroughput_s) * 100 | summarize max(MBsPercentage) by bin(CollectedDate, gInt); - let IOPSPerf = $metricsTableName - | where TimeGenerated > ago(billingInterval) + 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 + $disksTableName | where TimeGenerated > ago(1d) | distinct InstanceId_s, DiskIOPS_s ) on InstanceId_s - | extend IOPSPercentage = IOPS / todouble(DiskIOPS_s) * 100 + | extend IOPSPercentage = IOPS / todouble(DiskIOPS_s) * 100 | summarize max(IOPSPercentage) by bin(CollectedDate, gInt); ThroughputMBsPerf | join kind=inner (IOPSPerf) on CollectedDate @@ -414,29 +414,29 @@ foreach ($result in $results) $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["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 - + $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 @@ -447,16 +447,16 @@ foreach ($result in $results) if ($targetSku -and $skuPricesFound[$targetSku.Name] -lt [double]::MaxValue) { - $targetSkuPrice = $skuPricesFound[$targetSku.Name] + $targetSkuPrice = $skuPricesFound[$targetSku.Name] if ($skuPricesFound[$currentDiskTier] -lt [double]::MaxValue) { - $currentSkuPrice = $skuPricesFound[$currentDiskTier] - $tentativeTargetSkuSavingsMonthly = ($currentSkuPrice * [double] $result.Last30DaysQuantity) - ($targetSkuPrice * [double] $result.Last30DaysQuantity) + $currentSkuPrice = $skuPricesFound[$currentDiskTier] + $tentativeTargetSkuSavingsMonthly = ($currentSkuPrice * [double] $result.Last30DaysQuantity) - ($targetSkuPrice * [double] $result.Last30DaysQuantity) } else { - $tentativeTargetSkuSavingsMonthly = $result.Last30DaysCost - ($targetSkuPrice * [double] $result.Last30DaysQuantity) + $tentativeTargetSkuSavingsMonthly = $result.Last30DaysCost - ($targetSkuPrice * [double] $result.Last30DaysQuantity) } } @@ -477,19 +477,19 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } - } - + } + if ($targetSkuSavingsMonthly -eq [double]::PositiveInfinity) { $targetSkuSavingsMonthly = [double] $result.Last30DaysCost / 2 } - $additionalInfoDictionary["savingsAmount"] = [double] $targetSkuSavingsMonthly - $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost - + $additionalInfoDictionary["savingsAmount"] = [double] $targetSkuSavingsMonthly + $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost + $recommendation = New-Object PSObject -Property @{ Timestamp = $timestamp Cloud = $result.Cloud_s @@ -512,8 +512,8 @@ foreach ($result in $results) Tags = $tags DetailsURL = $detailsURL } - - $recommendations += $recommendation + + $recommendations += $recommendation } } diff --git a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-SqlDbOptimizationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-SqlDbOptimizationsToBlobStorage.ps1 index de6634e22..dcb3aae36 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-SqlDbOptimizationsToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-SqlDbOptimizationsToBlobStorage.ps1 @@ -26,7 +26,7 @@ $workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyti $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue +$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" } @@ -73,12 +73,12 @@ $LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl" "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -94,25 +94,25 @@ 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $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 + $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)) @@ -127,8 +127,8 @@ $subscriptionsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.Col Write-Output "Will run query against tables $sqlDbsTableName, $subscriptionsTableName, $metricsTableName and $consumptionTableName" -$Conn.Close() -$Conn.Dispose() +$Conn.Close() +$Conn.Dispose() $recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart @@ -152,8 +152,8 @@ $baseQuery = @" 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 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; @@ -173,15 +173,15 @@ $baseQuery = @" | 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 ( + | join kind=leftouter ( $subscriptionsTableName | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s ) on SubscriptionGuid_g "@ -try +try { $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics if ($queryResults) @@ -191,7 +191,7 @@ try } catch { - Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" + Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -231,8 +231,8 @@ foreach ($result in $results) $additionalInfoDictionary = @{} $additionalInfoDictionary["currentSku"] = "$($result.SkuName_s) $($result.ServiceObjectiveName_s)" - $additionalInfoDictionary["DTUPercentage"] = [int] $result.P99DTUPercentage - $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost + $additionalInfoDictionary["DTUPercentage"] = [int] $result.P99DTUPercentage + $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost $additionalInfoDictionary["savingsAmount"] = ([double] $result.Last30DaysCost / 2) $fitScore = 5 @@ -249,7 +249,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } @@ -317,15 +317,15 @@ $baseQuery = @" | 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 ( + | join kind=leftouter ( $subscriptionsTableName | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s ) on SubscriptionGuid_g "@ -try +try { $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics if ($queryResults) @@ -335,7 +335,7 @@ try } catch { - Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" + Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -375,7 +375,7 @@ foreach ($result in $results) $additionalInfoDictionary = @{} $additionalInfoDictionary["currentSku"] = "$($result.SkuName_s) $($result.ServiceObjectiveName_s)" - $additionalInfoDictionary["DTUPercentage"] = [int] $result.AvgDTUPercentage + $additionalInfoDictionary["DTUPercentage"] = [int] $result.AvgDTUPercentage $fitScore = 4 @@ -391,7 +391,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } diff --git a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-StorageAccountOptimizationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-StorageAccountOptimizationsToBlobStorage.ps1 index cbaebfdf9..431ab4b49 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-StorageAccountOptimizationsToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-StorageAccountOptimizationsToBlobStorage.ps1 @@ -5,20 +5,20 @@ function ConvertTo-Hashtable { [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]) { + } elseif ($InputObject -is [psobject]) { $hash = @{} foreach ($property in $InputObject.PSObject.Properties) { $hash[$property.Name] = ConvertTo-Hashtable -InputObject $property.Value @@ -58,7 +58,7 @@ $workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyti $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue +$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" } @@ -101,12 +101,12 @@ $LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl" "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -124,25 +124,25 @@ 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $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 + $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)) @@ -155,8 +155,8 @@ $consumptionTableName = $lognamePrefix + ($controlRows | Where-Object { $_.Colle Write-Output "Will run query against tables $subscriptionsTableName and $consumptionTableName" -$Conn.Close() -$Conn.Dispose() +$Conn.Close() +$Conn.Dispose() $recommendationSearchTimeSpan = $growthLookbackDays + $consumptionOffsetDaysStart @@ -182,12 +182,12 @@ 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 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; +| summarize arg_max(todatetime(Date_s), Tags_s) by ResourceId; $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' @@ -195,15 +195,17 @@ $consumptionTableName | 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 +| 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 ( +| join kind=leftouter ( $subscriptionsTableName | where TimeGenerated > lastday_stime_subs - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionId=SubscriptionGuid_g, SubscriptionName = ContainerName_s + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionId=SubscriptionGuid_g, SubscriptionName = ContainerName_s ) on SubscriptionId +| extend Tags_s = iif(Tags_s !startswith "{", strcat('{', Tags_s, '}'), Tags_s) +| extend Tags_s = parse_json(tolower(Tags_s)) "@ try @@ -211,12 +213,12 @@ 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) + $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 "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] throw "Execution aborted" } @@ -235,10 +237,10 @@ foreach ($result in $results) { $queryInstanceId = $result.ResourceId $queryText = @" - $consumptionTableName + $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' + | where ResourceId =~ '$queryInstanceId' | summarize DailyCosts = sum(todouble(CostInBillingCurrency_s)) by bin(todatetime(Date_s), 1d) | render timechart "@ @@ -267,7 +269,7 @@ foreach ($result in $results) $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 = @{} @@ -279,7 +281,7 @@ foreach ($result in $results) $result.Tags_s = '{' + $result.Tags_s + '}' } $tags = ConvertFrom-Json $result.Tags_s | ConvertTo-Hashtable - } + } $recommendation = New-Object PSObject -Property @{ Timestamp = $timestamp @@ -304,7 +306,7 @@ foreach ($result in $results) DetailsURL = $detailsURL } - $recommendations += $recommendation + $recommendations += $recommendation } # Export the recommendations as JSON to blob storage diff --git a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-UnattachedDisksToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-UnattachedDisksToBlobStorage.ps1 index df4cfdd7f..b2de201b2 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-UnattachedDisksToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-UnattachedDisksToBlobStorage.ps1 @@ -26,7 +26,7 @@ $workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyti $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue +$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" } @@ -58,12 +58,12 @@ $LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl" "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -79,25 +79,25 @@ 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $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 + $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)) @@ -111,8 +111,8 @@ $subscriptionsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.Col Write-Output "Will run query against tables $disksTableName, $subscriptionsTableName and $consumptionTableName" -$Conn.Close() -$Conn.Dispose() +$Conn.Close() +$Conn.Dispose() $recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart @@ -130,26 +130,26 @@ if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId) $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; + 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 + | 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 ( + | 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 + | where TimeGenerated > ago(1d) + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s ) on SubscriptionGuid_g "@ -try +try { $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics if ($queryResults) @@ -159,7 +159,7 @@ try } catch { - Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" + Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] throw "Execution aborted" } @@ -186,7 +186,7 @@ foreach ($result in $results) $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 + | 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 @@ -204,9 +204,9 @@ foreach ($result in $results) $additionalInfoDictionary["DiskType"] = "Managed" $additionalInfoDictionary["currentSku"] = $result.SKU_s - $additionalInfoDictionary["DiskSizeGB"] = [int] $result.DiskSizeGB_s - $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost - $additionalInfoDictionary["savingsAmount"] = [double] $result.Last30DaysCost + $additionalInfoDictionary["DiskSizeGB"] = [int] $result.DiskSizeGB_s + $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost + $additionalInfoDictionary["savingsAmount"] = [double] $result.Last30DaysCost $fitScore = 5 @@ -222,7 +222,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } diff --git a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-UnusedAppGWsToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-UnusedAppGWsToBlobStorage.ps1 index cf6af1268..a1708c117 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-UnusedAppGWsToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-UnusedAppGWsToBlobStorage.ps1 @@ -26,7 +26,7 @@ $workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyti $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue +$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" } @@ -58,12 +58,12 @@ $LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl" "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -79,25 +79,25 @@ 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $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 + $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)) @@ -111,8 +111,8 @@ $subscriptionsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.Col Write-Output "Will run query against tables $appGWsTableName, $subscriptionsTableName and $consumptionTableName" -$Conn.Close() -$Conn.Dispose() +$Conn.Close() +$Conn.Dispose() $recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart @@ -130,27 +130,27 @@ if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId) $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; + 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 + | 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 ( + | join kind=leftouter ( $subscriptionsTableName - | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + | where TimeGenerated > ago(1d) + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s ) on SubscriptionGuid_g "@ -try +try { $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics if ($queryResults) @@ -160,7 +160,7 @@ try } catch { - Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" + Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] throw "Execution aborted" } @@ -206,8 +206,8 @@ foreach ($result in $results) $additionalInfoDictionary["currentSku"] = $result.SkuName_s $additionalInfoDictionary["InstanceCount"] = $result.SkuCapacity_s - $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost - $additionalInfoDictionary["savingsAmount"] = [double] $result.Last30DaysCost + $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost + $additionalInfoDictionary["savingsAmount"] = [double] $result.Last30DaysCost $fitScore = 5 @@ -223,7 +223,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } diff --git a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-UnusedLoadBalancersToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-UnusedLoadBalancersToBlobStorage.ps1 index 2404b12f1..ccd2ebe37 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-UnusedLoadBalancersToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-UnusedLoadBalancersToBlobStorage.ps1 @@ -26,7 +26,7 @@ $workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyti $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue +$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" } @@ -58,12 +58,12 @@ $LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl" "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -79,25 +79,25 @@ 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $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 + $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)) @@ -111,8 +111,8 @@ $subscriptionsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.Col Write-Output "Will run query against tables $lbsTableName, $subscriptionsTableName and $consumptionTableName" -$Conn.Close() -$Conn.Dispose() +$Conn.Close() +$Conn.Dispose() $recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart @@ -132,25 +132,25 @@ $recommendationsErrors = 0 $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; + 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 + | 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 + | 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 + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s ) on SubscriptionGuid_g "@ @@ -159,12 +159,12 @@ 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) + $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 "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -211,8 +211,8 @@ foreach ($result in $results) $additionalInfoDictionary = @{} $additionalInfoDictionary["currentSku"] = $result.SkuName_s - $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost - $additionalInfoDictionary["savingsAmount"] = [double] $result.Last30DaysCost + $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost + $additionalInfoDictionary["savingsAmount"] = [double] $result.Last30DaysCost $fitScore = 5 @@ -228,7 +228,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } @@ -284,16 +284,16 @@ $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 ( + | 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 + | where TimeGenerated > ago(1d) + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s ) on SubscriptionGuid_g "@ -try +try { $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days 2) -Wait 600 -IncludeStatistics if ($queryResults) @@ -303,7 +303,7 @@ try } catch { - Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" + Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -349,7 +349,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } diff --git a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-VMOptimizationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-VMOptimizationsToBlobStorage.ps1 index cd2da514d..b09e8490c 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-VMOptimizationsToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-VMOptimizationsToBlobStorage.ps1 @@ -26,7 +26,7 @@ $workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyti $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue +$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" } @@ -59,12 +59,12 @@ $LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl" "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -80,25 +80,25 @@ 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $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 + $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)) @@ -113,8 +113,8 @@ $subscriptionsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.Col Write-Output "Will run query against tables $vmsTableName, $disksTableName, $subscriptionsTableName and $consumptionTableName" -$Conn.Close() -$Conn.Dispose() +$Conn.Close() +$Conn.Dispose() $recommendationSearchTimeSpan = $deallocatedIntervalDays + $consumptionOffsetDaysStart $offlineInterval = $deallocatedIntervalDays + $consumptionOffsetDays @@ -139,20 +139,20 @@ Write-Output "Looking for VMs that have been deallocated for more than 30 days.. $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 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 + let BilledVMs = $consumptionTableName | where todatetime(Date_s) between (stime..etime) - | where ResourceId like 'microsoft.compute/virtualmachines/' or ResourceId like 'microsoft.classiccompute/virtualmachines/' + | 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 + let BilledDisks = $consumptionTableName | where todatetime(Date_s) between (stime..etime) | where ResourceId like 'microsoft.compute/disks/' | extend BillingInstanceId = tolower(ResourceId) @@ -162,9 +162,9 @@ $baseQuery = @" | 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 + | project InstanceId_s, VMName_s, ResourceGroupName_s, SubscriptionGuid_g, TenantGuid_g, Cloud_s, Tags_s | join kind=leftouter ( - $disksTableName + $disksTableName | where TimeGenerated > ago(1d) | project DiskInstanceId = InstanceId_s, SKU_s, OwnerVMId_s ) on `$left.InstanceId_s == `$right.OwnerVMId_s @@ -172,15 +172,15 @@ $baseQuery = @" 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 ( + | join kind=leftouter ( $subscriptionsTableName - | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + | where TimeGenerated > ago(1d) + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s ) on SubscriptionGuid_g "@ -try +try { $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics if ($queryResults) @@ -190,7 +190,7 @@ try } catch { - Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" + Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -211,7 +211,7 @@ foreach ($result in $results) $queryText = @" let offlineInterval = $($offlineInterval)d; $consumptionTableName - | extend ResourceId = tolower(ResourceId) + | extend ResourceId = tolower(ResourceId) | where ResourceId =~ '$queryInstanceId' | where todatetime(Date_s) < now() | join kind=inner ( @@ -219,7 +219,7 @@ foreach ($result in $results) | extend DiskInstanceId = InstanceId_s ) on `$left.ResourceId == `$right.OwnerVMId_s - | summarize DeallocatedSince = max(todatetime(Date_s)) by DiskName_s, DiskSizeGB_s, SKU_s, DiskInstanceId + | summarize DeallocatedSince = max(todatetime(Date_s)) by DiskName_s, DiskSizeGB_s, SKU_s, DiskInstanceId | join kind=inner ( $consumptionTableName @@ -245,8 +245,8 @@ foreach ($result in $results) $additionalInfoDictionary = @{} $additionalInfoDictionary["LongDeallocatedThreshold"] = $deallocatedIntervalDays - $additionalInfoDictionary["CostsAmount"] = [double] $result.TotalDisksCosts - $additionalInfoDictionary["savingsAmount"] = [double] $result.TotalDisksCosts + $additionalInfoDictionary["CostsAmount"] = [double] $result.TotalDisksCosts + $additionalInfoDictionary["savingsAmount"] = [double] $result.TotalDisksCosts $fitScore = 5 @@ -262,7 +262,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } @@ -319,23 +319,23 @@ $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 ( + | 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 ( + | join kind=leftouter ( $subscriptionsTableName - | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + | where TimeGenerated > ago(1d) + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s ) on SubscriptionGuid_g "@ -try +try { $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics if ($queryResults) @@ -345,7 +345,7 @@ try } catch { - Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" + Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -389,7 +389,7 @@ foreach ($result in $results) $additionalInfoDictionary = @{} - $additionalInfoDictionary["CostsAmount"] = [double] $result.MonthlyCost + $additionalInfoDictionary["CostsAmount"] = [double] $result.MonthlyCost $additionalInfoDictionary["savingsAmount"] = [double] $result.MonthlyCost $fitScore = 5 @@ -406,7 +406,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } diff --git a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-VMSSOptimizationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-VMSSOptimizationsToBlobStorage.ps1 index 122620177..2b478d142 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-VMSSOptimizationsToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-VMSSOptimizationsToBlobStorage.ps1 @@ -19,7 +19,7 @@ function Find-SkuHourlyPrice { $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] @@ -28,22 +28,22 @@ function Find-SkuHourlyPrice { { $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] @@ -53,13 +53,13 @@ function Find-SkuHourlyPrice { $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 @@ -101,7 +101,7 @@ $workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyti $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue +$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" } @@ -177,12 +177,12 @@ $LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl" "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -198,25 +198,25 @@ 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $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 + $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)) @@ -232,8 +232,8 @@ $pricesheetTableName = $lognamePrefix + ($controlRows | Where-Object { $_.Collec Write-Output "Will run query against tables $vmssTableName, $metricsTableName, $subscriptionsTableName, $pricesheetTableName and $consumptionTableName" -$Conn.Close() -$Conn.Dispose() +$Conn.Close() +$Conn.Dispose() $recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart @@ -258,7 +258,7 @@ if ($cloudEnvironment -eq "AzureCloud") $pricesheetRegion = "EU West" } -try +try { $pricesheetEntries = @() @@ -267,17 +267,17 @@ try | 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)" + + 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 "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..." } @@ -289,14 +289,14 @@ $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 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 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 + 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) @@ -304,37 +304,37 @@ $baseQuery = @" | extend InstanceId_s = tolower(ResourceId) | summarize Last30DaysCost = sum(FinalCost), Last30DaysQuantity = sum(VMConsumedQuantity) by InstanceId_s; - let MemoryPerf = $metricsTableName - | where TimeGenerated > ago(perfInterval) + 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 + $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 + | 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) + 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 + $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=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 ( + | join kind=leftouter ( $subscriptionsTableName | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionId = SubscriptionGuid_g, SubscriptionName = ContainerName_s + | 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 "@ @@ -344,12 +344,12 @@ 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) + $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 "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -413,7 +413,7 @@ foreach ($result in $results) MemoryGB = $skuMemory } - $targetSkuCandidates += $targetSkuCandidate + $targetSkuCandidates += $targetSkuCandidate } } } @@ -424,10 +424,10 @@ foreach ($result in $results) { $queryInstanceId = $result.InstanceId_s $queryText = @" - let billingInterval = 30d; + let billingInterval = 30d; let armId = `'$queryInstanceId`'; let gInt = $perfTimeGrain; - let MemoryPerf = $metricsTableName + 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 @@ -435,14 +435,14 @@ foreach ($result in $results) | extend MemoryAvailableMBs = todouble(MetricValue_s)/1024/1024 | project CollectedDate, MemoryAvailableMBs, InstanceId_s=ResourceId | join kind=inner ( - $vmssTableName + $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 + | 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) + 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' @@ -465,9 +465,9 @@ foreach ($result in $results) $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" @@ -479,9 +479,9 @@ foreach ($result in $results) $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 @@ -497,7 +497,7 @@ foreach ($result in $results) if ($targetSku -and $skuPricesFound[$targetSku.Name] -lt [double]::MaxValue) { - $targetSkuPrice = $skuPricesFound[$targetSku.Name] + $targetSkuPrice = $skuPricesFound[$targetSku.Name] if ($null -eq $skuPricesFound[$currentSku.Name]) { @@ -506,12 +506,12 @@ foreach ($result in $results) if ($skuPricesFound[$currentSku.Name] -lt [double]::MaxValue) { - $currentSkuPrice = $skuPricesFound[$currentSku.Name] - $tentativeTargetSkuSavingsMonthly = ($currentSkuPrice * [double] $result.Last30DaysQuantity) - ($targetSkuPrice * [double] $result.Last30DaysQuantity) + $currentSkuPrice = $skuPricesFound[$currentSku.Name] + $tentativeTargetSkuSavingsMonthly = ($currentSkuPrice * [double] $result.Last30DaysQuantity) - ($targetSkuPrice * [double] $result.Last30DaysQuantity) } else { - $tentativeTargetSkuSavingsMonthly = $result.Last30DaysCost - ($targetSkuPrice * [double] $result.Last30DaysQuantity) + $tentativeTargetSkuSavingsMonthly = $result.Last30DaysCost - ($targetSkuPrice * [double] $result.Last30DaysQuantity) } } @@ -532,19 +532,19 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } - } - + } + if ($targetSkuSavingsMonthly -eq [double]::PositiveInfinity) { $targetSkuSavingsMonthly = [double] $result.Last30DaysCost / 2 } - $additionalInfoDictionary["savingsAmount"] = [double] $targetSkuSavingsMonthly - $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost - + $additionalInfoDictionary["savingsAmount"] = [double] $targetSkuSavingsMonthly + $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost + $recommendation = New-Object PSObject -Property @{ Timestamp = $timestamp Cloud = $result.Cloud_s @@ -567,8 +567,8 @@ foreach ($result in $results) Tags = $tags DetailsURL = $detailsURL } - - $recommendations += $recommendation + + $recommendations += $recommendation } } @@ -593,45 +593,45 @@ 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 perfInterval = $($perfDaysBackwards)d; - let MemoryPerf = $metricsTableName - | where TimeGenerated > ago(perfInterval) + 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 + $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 + | 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) + 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) + 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 + $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 ( + | join kind=leftouter ( $subscriptionsTableName | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionId = SubscriptionGuid_g, SubscriptionName = ContainerName_s + | 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)) "@ @@ -641,12 +641,12 @@ 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) + $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 "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -665,10 +665,10 @@ foreach ($result in $results) { $queryInstanceId = $result.InstanceId_s $queryText = @" - let perfInterval = $($perfDaysBackwards)d; + let perfInterval = $($perfDaysBackwards)d; let armId = `'$queryInstanceId`'; let gInt = $perfTimeGrain; - let MemoryPerf = $metricsTableName + 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 @@ -676,21 +676,21 @@ foreach ($result in $results) | extend MemoryAvailableMBs = todouble(MetricValue_s)/1024/1024 | project CollectedDate, MemoryAvailableMBs, InstanceId_s=ResourceId | join kind=inner ( - $vmssTableName + $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 + | 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) + 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) + 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' @@ -729,7 +729,7 @@ foreach ($result in $results) { $fitScore = 4 } - + $tags = @{} if (-not([string]::IsNullOrEmpty($result.Tags_s))) @@ -742,10 +742,10 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } - } + } $recommendation = New-Object PSObject -Property @{ Timestamp = $timestamp @@ -770,7 +770,7 @@ foreach ($result in $results) DetailsURL = $detailsURL } - $recommendations += $recommendation + $recommendations += $recommendation } # Export the recommendations as JSON to blob storage diff --git a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-VMsHighAvailabilityToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-VMsHighAvailabilityToBlobStorage.ps1 index ddb29d768..8716e24a8 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-VMsHighAvailabilityToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-VMsHighAvailabilityToBlobStorage.ps1 @@ -23,7 +23,7 @@ $workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogA $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue +$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" } @@ -49,12 +49,12 @@ $LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl" "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -70,25 +70,25 @@ 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $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 + $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)) @@ -104,8 +104,8 @@ $vmssTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedTyp Write-Output "Will run query against tables $availSetTableName, $vmsTableName, $vmssTableName, $vhdsTableName and $subscriptionsTableName" -$Conn.Close() -$Conn.Dispose() +$Conn.Close() +$Conn.Dispose() $recommendationSearchTimeSpan = 1 @@ -129,15 +129,15 @@ $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 ( + | join kind=leftouter ( $subscriptionsTableName | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s ) on SubscriptionGuid_g "@ -try +try { $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics if ($queryResults) @@ -147,7 +147,7 @@ try } catch { - Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" + Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -194,7 +194,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } @@ -249,15 +249,15 @@ $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 ( + | join kind=leftouter ( $subscriptionsTableName | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s - ) on SubscriptionGuid_g + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + ) on SubscriptionGuid_g "@ -try +try { $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics if ($queryResults) @@ -267,7 +267,7 @@ try } catch { - Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" + Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -314,7 +314,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } @@ -378,15 +378,15 @@ $baseQuery = @" | 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 ( + | join kind=leftouter ( $subscriptionsTableName | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s ) on SubscriptionGuid_g "@ -try +try { $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics -ErrorAction Continue if ($queryResults) @@ -396,7 +396,7 @@ try } catch { - Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" + Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -442,7 +442,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } @@ -498,7 +498,7 @@ $baseQuery = @" | 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 ( + | join kind=inner ( $vmsTableName | where TimeGenerated > ago(1d) | distinct InstanceId_s, Tags_s @@ -506,15 +506,15 @@ $baseQuery = @" | 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 ( + | join kind=leftouter ( $subscriptionsTableName | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s ) on SubscriptionGuid_g "@ -try +try { $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics -ErrorAction Continue if ($queryResults) @@ -524,7 +524,7 @@ try } catch { - Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" + Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -570,7 +570,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } @@ -625,15 +625,15 @@ $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 ( + | join kind=leftouter ( $subscriptionsTableName - | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + | where TimeGenerated > ago(1d) + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s ) on SubscriptionGuid_g "@ -try +try { $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics if ($queryResults) @@ -643,7 +643,7 @@ try } catch { - Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" + Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -687,7 +687,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } @@ -745,15 +745,15 @@ $baseQuery = @" | 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 ( + | join kind=leftouter ( $subscriptionsTableName - | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s - ) on SubscriptionGuid_g + | where TimeGenerated > ago(1d) + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + ) on SubscriptionGuid_g "@ -try +try { $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics if ($queryResults) @@ -763,7 +763,7 @@ try } catch { - Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" + Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -807,7 +807,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } @@ -870,14 +870,14 @@ $baseQuery = @" | 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 ( + | join kind=leftouter ( $subscriptionsTableName - | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + | where TimeGenerated > ago(1d) + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s ) on SubscriptionGuid_g "@ -try +try { $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics -ErrorAction Continue if ($queryResults) @@ -887,7 +887,7 @@ try } catch { - Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" + Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -933,7 +933,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } @@ -985,18 +985,18 @@ Write-Output "[$now] Removed $jsonExportPath from local disk..." Write-Output "Looking for VMs using unmanaged disks..." $baseQuery = @" - $vmsTableName + $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 ( + | join kind=leftouter ( $subscriptionsTableName | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s - ) on SubscriptionGuid_g + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + ) on SubscriptionGuid_g "@ -try +try { $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics if ($queryResults) @@ -1006,7 +1006,7 @@ try } catch { - Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" + Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -1052,7 +1052,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } @@ -1110,7 +1110,7 @@ $baseQuery = @" | 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 ( + | join kind=inner ( VMsInZones | where PowerState_s has 'running' | distinct VMName_s, ResourceGroupName_s, SubscriptionGuid_g @@ -1118,16 +1118,16 @@ $baseQuery = @" ) on ResourceGroupName_s and SubscriptionGuid_g | where VMCount == 1 or VMCount > ZonesCount | project-away SubscriptionGuid_g1, ResourceGroupName_s1 - | join kind=leftouter ( + | join kind=leftouter ( $subscriptionsTableName - | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + | 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) + | extend InstanceId = strcat('/subscriptions/', SubscriptionGuid_g, '/resourcegroups/', ResourceGroupName_s) "@ -try +try { $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics if ($queryResults) @@ -1137,7 +1137,7 @@ try } catch { - Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" + Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -1184,7 +1184,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } @@ -1237,17 +1237,17 @@ Write-Output "Looking for VMSS not in multiple AZs..." $baseQuery = @" $vmssTableName - | where TimeGenerated > ago(1d) + | 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 ( + | join kind=leftouter ( $subscriptionsTableName - | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + | where TimeGenerated > ago(1d) + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s ) on SubscriptionGuid_g "@ -try +try { $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics if ($queryResults) @@ -1257,7 +1257,7 @@ try } catch { - Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" + Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -1304,7 +1304,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } @@ -1359,15 +1359,15 @@ $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 ( + | join kind=leftouter ( $subscriptionsTableName | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s - ) on SubscriptionGuid_g + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + ) on SubscriptionGuid_g "@ -try +try { $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics if ($queryResults) @@ -1377,7 +1377,7 @@ try } catch { - Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" + Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -1421,7 +1421,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } diff --git a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-VNetOptimizationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-VNetOptimizationsToBlobStorage.ps1 index b5dc9d01e..52ead6cb6 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-VNetOptimizationsToBlobStorage.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/recommendations/Recommend-VNetOptimizationsToBlobStorage.ps1 @@ -26,7 +26,7 @@ $workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyti $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue +$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" } @@ -95,12 +95,12 @@ $LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl" "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -116,25 +116,25 @@ 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $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 + $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)) @@ -151,8 +151,8 @@ $consumptionTableName = $lognamePrefix + ($controlRows | Where-Object { $_.Colle Write-Output "Will run query against tables $nicsTableName, $nsgRulesTableName, $publicIpsTableName, $subscriptionsTableName, $consumptionTableName and $vNetsTableName" -$Conn.Close() -$Conn.Dispose() +$Conn.Close() +$Conn.Dispose() $recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart @@ -177,11 +177,11 @@ $baseQuery = @" | extend FreeIPs = toint(SubnetTotalPrefixIPs_s) - toint(SubnetUsedIPs_s) | extend UsedIPPercentage = (todouble(SubnetUsedIPs_s) / todouble(SubnetTotalPrefixIPs_s)) * 100 | where UsedIPPercentage >= $subnetMaxUsedThreshold - | join kind=leftouter ( - $subscriptionsTableName + | join kind=leftouter ( + $subscriptionsTableName | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s ) on SubscriptionGuid_g "@ @@ -190,12 +190,12 @@ 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) + $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 "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -226,10 +226,10 @@ foreach ($result in $results) $additionalInfoDictionary = @{} $additionalInfoDictionary["subnetName"] = $result.SubnetName_s - $additionalInfoDictionary["subnetPrefix"] = $result.SubnetPrefix_s - $additionalInfoDictionary["subnetTotalIPs"] = $result.SubnetTotalPrefixIPs_s - $additionalInfoDictionary["subnetFreeIPs"] = $result.FreeIPs - $additionalInfoDictionary["subnetUsedIPPercentage"] = $result.UsedIPPercentage + $additionalInfoDictionary["subnetPrefix"] = $result.SubnetPrefix_s + $additionalInfoDictionary["subnetTotalIPs"] = $result.SubnetTotalPrefixIPs_s + $additionalInfoDictionary["subnetFreeIPs"] = $result.FreeIPs + $additionalInfoDictionary["subnetUsedIPPercentage"] = $result.UsedIPPercentage $fitScore = 5 @@ -245,7 +245,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } @@ -303,11 +303,11 @@ $baseQuery = @" | 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 + | join kind=leftouter ( + $subscriptionsTableName | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s ) on SubscriptionGuid_g "@ @@ -316,12 +316,12 @@ 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) + $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 "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -352,10 +352,10 @@ foreach ($result in $results) $additionalInfoDictionary = @{} $additionalInfoDictionary["subnetName"] = $result.SubnetName_s - $additionalInfoDictionary["subnetPrefix"] = $result.SubnetPrefix_s - $additionalInfoDictionary["subnetTotalIPs"] = $result.SubnetTotalPrefixIPs_s + $additionalInfoDictionary["subnetPrefix"] = $result.SubnetPrefix_s + $additionalInfoDictionary["subnetTotalIPs"] = $result.SubnetTotalPrefixIPs_s $additionalInfoDictionary["subnetUsedIPs_s"] = $result.SubnetUsedIPs_s - $additionalInfoDictionary["subnetUsedIPPercentage"] = $result.UsedIPPercentage + $additionalInfoDictionary["subnetUsedIPPercentage"] = $result.UsedIPPercentage $fitScore = 5 @@ -371,7 +371,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } @@ -426,11 +426,11 @@ $baseQuery = @" $vNetsTableName | where TimeGenerated > ago(1d) | where toint(SubnetUsedIPs_s) == 0 and toint(SubnetDelegationsCount_s) == 0 - | join kind=leftouter ( - $subscriptionsTableName + | join kind=leftouter ( + $subscriptionsTableName | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s ) on SubscriptionGuid_g "@ @@ -439,12 +439,12 @@ 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) + $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 "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -475,8 +475,8 @@ foreach ($result in $results) $additionalInfoDictionary = @{} $additionalInfoDictionary["subnetName"] = $result.SubnetName_s - $additionalInfoDictionary["subnetPrefix"] = $result.SubnetPrefix_s - $additionalInfoDictionary["subnetTotalIPs"] = $result.SubnetTotalPrefixIPs_s + $additionalInfoDictionary["subnetPrefix"] = $result.SubnetPrefix_s + $additionalInfoDictionary["subnetTotalIPs"] = $result.SubnetTotalPrefixIPs_s $additionalInfoDictionary["subnetUsedIPs_s"] = $result.SubnetUsedIPs_s $fitScore = 5 @@ -493,7 +493,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } @@ -548,11 +548,11 @@ $baseQuery = @" $nicsTableName | where TimeGenerated > ago(1d) | where isempty(OwnerVMId_s) and isempty(OwnerPEId_s) - | join kind=leftouter ( - $subscriptionsTableName + | join kind=leftouter ( + $subscriptionsTableName | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s ) on SubscriptionGuid_g "@ @@ -561,12 +561,12 @@ 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) + $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 "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -612,7 +612,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } @@ -703,11 +703,11 @@ $baseQuery = @" | union EmptySubnetsAsDestination | union RemovedSubnetsAsSource | union RemovedSubnetsAsDestination - | join kind=leftouter ( - $subscriptionsTableName + | join kind=leftouter ( + $subscriptionsTableName | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + | 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 @@ -718,12 +718,12 @@ 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) + $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 "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -771,7 +771,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } @@ -831,23 +831,23 @@ $baseQuery = @" | where TimeGenerated < ago(1d) | extend NICId = tolower(InstanceId_s) | distinct NICId, PrivateIPAddress_s, PublicIPId_s; - let OrphanNICs = NICsToday + let OrphanNICs = NICsToday | where isempty(OwnerVMId_s) and isempty(OwnerPEId_s) | extend PublicIPId_s = tolower(PublicIPId_s) - | join kind=leftouter ( + | join kind=leftouter ( $publicIpsTableName | where TimeGenerated > ago(1d) - | project PublicIPId_s = tolower(InstanceId_s), PublicIPAddress = IPAddress + | 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 + let RemovedNICs = NICsBefore | where NICId !in (NICsTodayIds) and PrivateIPAddress_s !in (NICsTodayIPs) | extend PublicIPId_s = tolower(PublicIPId_s) - | join kind=leftouter ( + | join kind=leftouter ( $publicIpsTableName | where TimeGenerated < ago(1d) - | project PublicIPId_s = tolower(InstanceId_s), PublicIPAddress = IPAddress + | project PublicIPId_s = tolower(InstanceId_s), PublicIPAddress = IPAddress ) on PublicIPId_s; let NSGRules = materialize($nsgRulesTableName | where TimeGenerated > ago(1d) @@ -891,11 +891,11 @@ $baseQuery = @" | union RemovedNICsAsPrivateDestination | union RemovedNICsAsPublicDestination | where isnotempty(IPAddress) - | join kind=leftouter ( - $subscriptionsTableName + | join kind=leftouter ( + $subscriptionsTableName | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + | 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 "@ @@ -905,12 +905,12 @@ 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) + $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 "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -958,7 +958,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } @@ -1027,7 +1027,7 @@ $baseQuery = @" let PIPsTodayIPs = PIPsToday | distinct IPAddress; let OrphanDynamicPIPs = PIPsBefore | where PublicIPId in (OrphanDynamicPIPIDs) and isnotempty(IPAddress) and IPAddress !in (PIPsTodayIPs); - let RemovedPIPs = PIPsBefore + let RemovedPIPs = PIPsBefore | where PublicIPId !in (PIPsTodayIds) and isnotempty(IPAddress) and IPAddress !in (PIPsTodayIPs); let NSGRules = materialize( $nsgRulesTableName | where TimeGenerated > ago(1d) @@ -1062,11 +1062,11 @@ $baseQuery = @" | union OrphanDynamicPIPsAsDestination | union RemovedPIPsAsSource | union RemovedPIPsAsDestination - | join kind=leftouter ( - $subscriptionsTableName + | join kind=leftouter ( + $subscriptionsTableName | where TimeGenerated > ago(1d) - | where ContainerType_s =~ 'microsoft.resources/subscriptions' - | project SubscriptionGuid_g, SubscriptionName = ContainerName_s + | 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 "@ @@ -1076,12 +1076,12 @@ 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) + $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 "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -1130,7 +1130,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } @@ -1183,8 +1183,8 @@ 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; + 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 @@ -1193,12 +1193,12 @@ $baseQuery = @" | 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 ( + | 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 + | where TimeGenerated > ago(1d) + | where ContainerType_s =~ 'microsoft.resources/subscriptions' + | project SubscriptionGuid_g, SubscriptionName = ContainerName_s ) on SubscriptionGuid_g "@ @@ -1207,12 +1207,12 @@ 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) + $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 "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery" Write-Warning -Message $error[0] $recommendationsErrors++ } @@ -1257,8 +1257,8 @@ foreach ($result in $results) $additionalInfoDictionary["currentSku"] = $result.SkuName_s $additionalInfoDictionary["allocationMethod"] = $result.AllocationMethod_s - $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost - $additionalInfoDictionary["savingsAmount"] = [double] $result.Last30DaysCost + $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost + $additionalInfoDictionary["savingsAmount"] = [double] $result.Last30DaysCost $fitScore = 5 @@ -1274,7 +1274,7 @@ foreach ($result in $results) { $tagName = $tagPair[0].Trim() $tagValue = $tagPair[1].Trim() - $tags[$tagName] = $tagValue + $tags[$tagName] = $tagValue } } } diff --git a/docs/deploy/optimization-engine/latest/runbooks/remediations/Remediate-AdvisorRightSizeFiltered.ps1 b/docs/deploy/optimization-engine/latest/runbooks/remediations/Remediate-AdvisorRightSizeFiltered.ps1 index 3627a2578..314dc522c 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/remediations/Remediate-AdvisorRightSizeFiltered.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/remediations/Remediate-AdvisorRightSizeFiltered.ps1 @@ -29,7 +29,7 @@ if ([string]::IsNullOrEmpty($sqldatabase)) $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RemediationLogsContainer" -ErrorAction SilentlyContinue +$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RemediationLogsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "remediationlogs" } @@ -62,12 +62,12 @@ $recommendationsTable = "Recommendations" "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -87,30 +87,30 @@ 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $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] + 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 + $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)) @@ -120,8 +120,8 @@ if (-not($connectionSuccess)) Write-Output "Found $($vmsToRightSize.Rows.Count) remediation opportunities." -$Conn.Close() -$Conn.Dispose() +$Conn.Close() +$Conn.Dispose() $logEntries = @() @@ -163,7 +163,7 @@ foreach ($vm in $vmsToRightSize.Rows) $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)..." @@ -178,16 +178,16 @@ foreach ($vm in $vmsToRightSize.Rows) if ($vmObj) { $vmObj.HardwareProfile.VmSize = $vm.TargetSKU - Update-AzVM -VM $vmObj -ResourceGroupName $resourceGroup + Update-AzVM -VM $vmObj -ResourceGroupName $resourceGroup } else { - Write-Output "Skipping as VM was already removed." + Write-Output "Skipping as VM was already removed." } } else { - Write-Output "Did not apply remediation." + Write-Output "Did not apply remediation." } } @@ -209,10 +209,10 @@ foreach ($vm in $vmsToRightSize.Rows) LogDetails = $logDetails | ConvertTo-Json -Compress RecommendationSubTypeId = $rightSizeRecommendationId } - + $logEntries += $logentry } - + $today = $datetime.ToString("yyyyMMdd") $csvExportPath = "$today-rightsizefiltered.csv" diff --git a/docs/deploy/optimization-engine/latest/runbooks/remediations/Remediate-LongDeallocatedVMsFiltered.ps1 b/docs/deploy/optimization-engine/latest/runbooks/remediations/Remediate-LongDeallocatedVMsFiltered.ps1 index b22c1dc30..3c816924d 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/remediations/Remediate-LongDeallocatedVMsFiltered.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/remediations/Remediate-LongDeallocatedVMsFiltered.ps1 @@ -29,7 +29,7 @@ if ([string]::IsNullOrEmpty($sqldatabase)) $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RemediationLogsContainer" -ErrorAction SilentlyContinue +$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RemediationLogsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "remediationlogs" } @@ -62,12 +62,12 @@ $recommendationsTable = "Recommendations" "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -87,30 +87,30 @@ 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $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] + 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 + $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)) @@ -120,8 +120,8 @@ if (-not($connectionSuccess)) Write-Output "Found $($deallocatedVMs.Rows.Count) remediation opportunities." -$Conn.Close() -$Conn.Dispose() +$Conn.Close() +$Conn.Dispose() $logEntries = @() @@ -163,7 +163,7 @@ foreach ($vm in $deallocatedVMs.Rows) $subscriptionId = $vm.InstanceId.Split("/")[2] $resourceGroup = $vm.InstanceId.Split("/")[4] $instanceName = $vm.InstanceId.Split("/")[8] - + if ($isEligible) { $vmState = "Unknown" @@ -197,7 +197,7 @@ foreach ($vm in $deallocatedVMs.Rows) } else { - Write-Output "Skipping as OS disk is already HDD." + Write-Output "Skipping as OS disk is already HDD." } foreach ($dataDiskId in $dataDiskIds) { @@ -213,7 +213,7 @@ foreach ($vm in $deallocatedVMs.Rows) $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') @@ -221,13 +221,13 @@ foreach ($vm in $deallocatedVMs.Rows) } else { - Write-Output "Skipping as Data disk is already HDD." - } + Write-Output "Skipping as Data disk is already HDD." + } } } else { - Write-Output "Skipping as disks are not Managed Disks." + Write-Output "Skipping as disks are not Managed Disks." $hasManagedDisks = $false } } @@ -235,19 +235,19 @@ foreach ($vm in $deallocatedVMs.Rows) { if ($vmObj) { - Write-Output "Skipping as VM is not deallocated." + Write-Output "Skipping as VM is not deallocated." $vmState = "Running" } else { - Write-Output "Skipping as VM was already removed." - $vmState = "Removed" + Write-Output "Skipping as VM was already removed." + $vmState = "Removed" } } } else { - Write-Output "Could not apply remediation as VM is in another cloud/tenant." + Write-Output "Could not apply remediation as VM is in another cloud/tenant." } } @@ -271,10 +271,10 @@ foreach ($vm in $deallocatedVMs.Rows) LogDetails = $logDetails | ConvertTo-Json -Compress RecommendationSubTypeId = $recommendationId } - + $logEntries += $logentry } - + $today = $datetime.ToString("yyyyMMdd") $csvExportPath = "$today-longdeallocatedvmsfiltered.csv" diff --git a/docs/deploy/optimization-engine/latest/runbooks/remediations/Remediate-UnattachedDisksFiltered.ps1 b/docs/deploy/optimization-engine/latest/runbooks/remediations/Remediate-UnattachedDisksFiltered.ps1 index 69c462294..edb361930 100644 --- a/docs/deploy/optimization-engine/latest/runbooks/remediations/Remediate-UnattachedDisksFiltered.ps1 +++ b/docs/deploy/optimization-engine/latest/runbooks/remediations/Remediate-UnattachedDisksFiltered.ps1 @@ -29,7 +29,7 @@ if ([string]::IsNullOrEmpty($sqldatabase)) $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RemediationLogsContainer" -ErrorAction SilentlyContinue +$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RemediationLogsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "remediationlogs" } @@ -67,12 +67,12 @@ $recommendationsTable = "Recommendations" "Logging in to Azure with $authenticationOption..." switch ($authenticationOption) { - "UserAssignedManagedIdentity" { + "UserAssignedManagedIdentity" { Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID break } Default { #ManagedIdentity - Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment + Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment break } } @@ -92,30 +92,30 @@ 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 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;") $Conn.AccessToken = $dbToken.Token - $Conn.Open() + $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] + 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 + $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)) @@ -125,8 +125,8 @@ if (-not($connectionSuccess)) Write-Output "Found $($unattachedDisks.Rows.Count) remediation opportunities." -$Conn.Close() -$Conn.Dispose() +$Conn.Close() +$Conn.Dispose() $logEntries = @() @@ -168,7 +168,7 @@ foreach ($disk in $unattachedDisks.Rows) $subscriptionId = $disk.InstanceId.Split("/")[2] $resourceGroup = $disk.InstanceId.Split("/")[4] $instanceName = $disk.InstanceId.Split("/")[8] - + if ($isEligible) { $diskState = "Unknown" @@ -196,7 +196,7 @@ foreach ($disk in $unattachedDisks.Rows) } else { - Write-Output "Skipping as disk is already HDD." + Write-Output "Skipping as disk is already HDD." } } elseif ($remediationAction -eq "Delete") @@ -215,19 +215,19 @@ foreach ($disk in $unattachedDisks.Rows) { if ($diskObj) { - Write-Output "Skipping as disk is not unattached." - $diskState = "Attached" + Write-Output "Skipping as disk is not unattached." + $diskState = "Attached" } else { - Write-Output "Skipping as disk was already removed." - $diskState = "Removed" + Write-Output "Skipping as disk was already removed." + $diskState = "Removed" } } } else { - Write-Output "Could not apply remediation as disk is in another cloud/tenant." + Write-Output "Could not apply remediation as disk is in another cloud/tenant." } } @@ -250,10 +250,10 @@ foreach ($disk in $unattachedDisks.Rows) LogDetails = $logDetails | ConvertTo-Json -Compress RecommendationSubTypeId = $recommendationId } - + $logEntries += $logentry } - + $today = $datetime.ToString("yyyyMMdd") $csvExportPath = "$today-unattacheddisksfiltered.csv" diff --git a/docs/deploy/optimization-workbook-0.9.json b/docs/deploy/optimization-workbook-0.9.json new file mode 100644 index 000000000..691c9061b --- /dev/null +++ b/docs/deploy/optimization-workbook-0.9.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": "1125613636439918208" + } + }, + "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.9", + "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.9.ui.json b/docs/deploy/optimization-workbook-0.9.ui.json new file mode 100644 index 000000000..63512825c --- /dev/null +++ b/docs/deploy/optimization-workbook-0.9.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 72ae03059..691c9061b 100644 --- a/docs/deploy/optimization-workbook-latest.json +++ b/docs/deploy/optimization-workbook-latest.json @@ -5,7 +5,7 @@ "_generator": { "name": "bicep", "version": "0.33.93.31351", - "templateHash": "10544991197071991923" + "templateHash": "1125613636439918208" } }, "parameters": { @@ -12464,7 +12464,7 @@ "workbookJson": "[string(variables('$fxv#0'))]", "workbookId": "0b2", "telemetryId": "[format('00f120b5-2007-6120-0000-{0}30126b006', variables('workbookId'))]", - "finOpsToolkitVersion": "0.8", + "finOpsToolkitVersion": "0.9", "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/guide.md b/docs/guide.md index 391c9aa7c..3e4e89002 100644 --- a/docs/guide.md +++ b/docs/guide.md @@ -15,13 +15,15 @@ Your guide to implementing FinOps in the Microsoft Cloud. FinOps is an expansive area with branches that extend out into many cloud management and governance activities. Cost especially is a part of many cloud and business initiatives, like security, resiliency, and adopting cloud-native solutions like AI. And to streamline cloud adoption in a way that prioritizes business value, you need the right guidance to help you make the right data-driven decisions. The Implementing FinOps guide is a collection of resources that help you facilitate your FinOps goals. -
-

What's new in February 2025v0.8

-

+ ## Getting started with FinOps @@ -80,7 +82,7 @@ Now it's time to learn the tools and services you need to be successful.

📑 FOCUS
Accelerate your efforts with data designed for FinOps.
- Start the module + Read the doc
▶️ Interactive guides
@@ -110,6 +112,6 @@ Now it's time to learn the tools and services you need to be successful.
Open the guide -💜 Give feedback +💜 Give feedback
diff --git a/docs/help.md b/docs/help.md index 45c98891f..84f2e82e7 100644 --- a/docs/help.md +++ b/docs/help.md @@ -166,6 +166,6 @@ Tools and resources within the FinOps toolkit are provided as-is without any exp 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. -💜 Give feedback +💜 Give feedback
diff --git a/docs/hubs.md b/docs/hubs.md index 4a1ce7f72..f2bcea767 100644 --- a/docs/hubs.md +++ b/docs/hubs.md @@ -19,12 +19,12 @@ Open, extensible, and scalable cost governance for the enterprise. FinOps hubs are a reliable, trustworthy platform for cost analytics, insights, and optimization – virtual command centers for leaders throughout the organization to report on, monitor, and optimize cost based on their organizational needs. -
-

What's new in February 2025v0.8

-

- February introduced a simpler public networking architecture, a new Data Explorer dashboard, major Power BI optimizations and design improvements, and many small fixes and improvements. +

+

What's new in March 2025v0.9

+

+ In March, FinOps hubs saw a revamp of reservation recommendations, expansion of managed exports to cover all Cost Management datasets, and many small fixes and improvements.

-

See all changes

+

See all changes

@@ -57,10 +57,10 @@ FinOps hubs are a reliable, trustworthy platform for cost analytics, insights, a
-
-

Estimated cost for FinOps hubs

-

FinOps hubs starts at $120/mo + $10 per $1 million in monitored spend.

-

Costs may be lower depending on your negotiated and commitment discounts.

+
+

Estimated cost for FinOps hubs

+

FinOps hubs starts at $120/mo + $10 per $1 million in monitored spend.

+

Costs may be lower depending on your negotiated and commitment discounts.

@@ -126,7 +126,7 @@ Create a new or update an existing FinOps hub instance.

Deploy to Azure - About the template + About the template

@@ -152,7 +152,7 @@ Create a new or update an existing FinOps hub instance. -
💜 Give feedback +
💜 Give feedback ## Learn more from documentation @@ -185,6 +185,6 @@ Create a new or update an existing FinOps hub instance. About FinOps hubs -💜 Give feedback +💜 Give feedback
diff --git a/docs/open-data.md b/docs/open-data.md index dd4ca16bc..e5437dd7a 100644 --- a/docs/open-data.md +++ b/docs/open-data.md @@ -19,12 +19,12 @@ Leverage open data to normalize and enhance your FinOps reporting. FinOps toolkit open data is used to transform Cost Management actual and amortized data into FOCUS. Use the same mappings to clean your FinOps datasets. -
-

What's new in February 2025v0.8

-

- February introduced 1 new pricing unit, 4 new region mappings, 4 new services, and 45 new and 42 updated resource types. +

+

What's new in March 2025v0.9

+

+ In March, open data introduced 1 new pricing unit, 1 new and 1 updated region mapping, 69 new and 19 updated resource types, 2 new service mappings, and 3 new dataset examples for MCA reservation datasets.

-

See all changes

+

See all changes

@@ -71,6 +71,6 @@ FinOps toolkit open data is used to transform Cost Management actual and amortiz About the data -💜 Give feedback +💜 Give feedback
diff --git a/docs/optimization-engine.md b/docs/optimization-engine.md index a92f5a525..4ff9b6c68 100644 --- a/docs/optimization-engine.md +++ b/docs/optimization-engine.md @@ -19,10 +19,10 @@ Optimize your Azure environment. The Azure Optimization Engine (AOE) is an extensible solution designed to generate optimization recommendations for your Azure environment. See it like a fully customizable Azure Advisor. -
-

What's new in February 2025v0.8

-

- February improved multi-tenancy support with Azure Lighthouse guidance. +

+

What's new in March 2025v0.9

+

+ In March, AOE fixed an issue with breaking storage account recommendations when resource tags are duplicated after tag inheritance.

@@ -68,7 +68,7 @@ Azure Optimization Engine requires a command line deployment via a PowerShell sc Deploy via PowerShell -💜 Give feedback +💜 Give feedback ## Learn more from documentation @@ -101,6 +101,6 @@ Azure Optimization Engine requires a command line deployment via a PowerShell sc
About Optimization Engine -💜 Give feedback +💜 Give feedback
diff --git a/docs/power-bi.md b/docs/power-bi.md index 22a0e9795..e4e86dff6 100644 --- a/docs/power-bi.md +++ b/docs/power-bi.md @@ -19,12 +19,12 @@ Accelerate your analytics efforts with simple, targeted reports. Summarize and b FinOps toolkit Power BI reports provide a great starting point for FinOps reporting. Customize and augment reports with your own data to facilitate organizational requirements. -
-

What's new in February 2025v0.8

-

- February introduced a new visual design for Power BI reports, new options to populate missing prices for storage reports, and a complete performance overhaul for KQL reports, plus many small fixes and improvements. +

+

What's new in March 2025v0.9

+

+ In March, Power BI reports added the reservation break-even point for recommendations, improved accuracy of Azure Hybrid Benefit data, and applied many small fixes and improvements across all reports.

-

See all changes

+

See all changes

@@ -59,9 +59,9 @@ FinOps toolkit Power BI reports provide a great starting point for FinOps report Try the demo -
-

Estimated cost for FinOps toolkit Power BI reports

-

+

+

Estimated cost for FinOps toolkit Power BI reports

+

FinOps toolkit Power BI reports do not incur any cost beyond the required Power BI licenses and underlying data storage costs.

@@ -75,16 +75,53 @@ Create a new or update an existing FinOps hub instance.
-

Export data to storage for quick setup with small accounts or deploy FinOps hubs with Data Explorer for high performance analytics and year-over-year reporting.

+

+ The data source you use can make or break the experience. Use the following criteria to select the right data source to meet your needs. +

+

Help me choose + About FinOps hubs

-

Export FOCUS data to a storage account or deploy FinOps hubs for added functionality.

+

Export FOCUS data to a storage account or deploy FinOps hubs for improved performance and added functionality.

Create exports Deploy FinOps hubs @@ -113,7 +150,7 @@ Create a new or update an existing FinOps hub instance.


-💜 Give feedback +💜 Give feedback ## Explore the reports @@ -152,6 +189,6 @@ Create a new or update an existing FinOps hub instance.
About the reports -💜 Give feedback +💜 Give feedback
diff --git a/docs/powershell.md b/docs/powershell.md index d2149cd3d..734af882f 100644 --- a/docs/powershell.md +++ b/docs/powershell.md @@ -19,13 +19,16 @@ Automate and scale your FinOps efforts with PowerShell commands that streamline The FinOps toolkit PowerShell module helps you automate and scale common Cost Management and FinOps toolkit management operations and work with FinOps toolkit open data. -
-

What's new in February 2025v0.8

-

+ + ## Explore the commands @@ -95,6 +98,6 @@ The FinOps toolkit PowerShell module helps you automate and scale common Cost Ma About the commands -💜 Give feedback +💜 Give feedback
diff --git a/docs/svg/arizeai.observabilityeval/organizations.svg b/docs/svg/arizeai.observabilityeval/organizations.svg index f634b5b01..0930a044b 100644 --- a/docs/svg/arizeai.observabilityeval/organizations.svg +++ b/docs/svg/arizeai.observabilityeval/organizations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/astronomer.astro/organizations.svg b/docs/svg/astronomer.astro/organizations.svg index 9c900033b..d267aa466 100644 --- a/docs/svg/astronomer.astro/organizations.svg +++ b/docs/svg/astronomer.astro/organizations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/commvault.contentstore/cloudaccounts.svg b/docs/svg/commvault.contentstore/cloudaccounts.svg index 5bced3a7f..c93db543c 100644 --- a/docs/svg/commvault.contentstore/cloudaccounts.svg +++ b/docs/svg/commvault.contentstore/cloudaccounts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/dynatrace.observability/monitors.svg b/docs/svg/dynatrace.observability/monitors.svg index dee75e79e..617b8a71f 100644 --- a/docs/svg/dynatrace.observability/monitors.svg +++ b/docs/svg/dynatrace.observability/monitors.svg @@ -1 +1 @@ - + diff --git a/docs/svg/lambdatest.hyperexecute/organizations.svg b/docs/svg/lambdatest.hyperexecute/organizations.svg index 5a25828ba..b3023f06d 100644 --- a/docs/svg/lambdatest.hyperexecute/organizations.svg +++ b/docs/svg/lambdatest.hyperexecute/organizations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.aadiam/privatelinkforazuread.svg b/docs/svg/microsoft.aadiam/privatelinkforazuread.svg index 5521d04ad..758c87b7f 100644 --- a/docs/svg/microsoft.aadiam/privatelinkforazuread.svg +++ b/docs/svg/microsoft.aadiam/privatelinkforazuread.svg @@ -1 +1 @@ - + diff --git a/docs/svg/liftrbasic.samplerp/organizations.svg b/docs/svg/microsoft.advisor/assessments.svg similarity index 100% rename from docs/svg/liftrbasic.samplerp/organizations.svg rename to docs/svg/microsoft.advisor/assessments.svg diff --git a/docs/svg/microsoft.advisor/resiliencyreviews.svg b/docs/svg/microsoft.advisor/resiliencyreviews.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.advisor/resiliencyreviews.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.agfoodplatform/farmbeats.svg b/docs/svg/microsoft.agfoodplatform/farmbeats.svg index 56be6e02c..f8037972b 100644 --- a/docs/svg/microsoft.agfoodplatform/farmbeats.svg +++ b/docs/svg/microsoft.agfoodplatform/farmbeats.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.alertsmanagement/actionrules.svg b/docs/svg/microsoft.alertsmanagement/actionrules.svg index 3bb1f3474..07a47c5b5 100644 --- a/docs/svg/microsoft.alertsmanagement/actionrules.svg +++ b/docs/svg/microsoft.alertsmanagement/actionrules.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.alertsmanagement/prometheusrulegroups.svg b/docs/svg/microsoft.alertsmanagement/prometheusrulegroups.svg index bf7315971..701a528c3 100644 --- a/docs/svg/microsoft.alertsmanagement/prometheusrulegroups.svg +++ b/docs/svg/microsoft.alertsmanagement/prometheusrulegroups.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.all/arcvirtualmachines.svg b/docs/svg/microsoft.all/arcvirtualmachines.svg index c6e4d1272..8225c53da 100644 --- a/docs/svg/microsoft.all/arcvirtualmachines.svg +++ b/docs/svg/microsoft.all/arcvirtualmachines.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.all/hcivirtualmachines.svg b/docs/svg/microsoft.all/hcivirtualmachines.svg index 283bb232b..e84657bea 100644 --- a/docs/svg/microsoft.all/hcivirtualmachines.svg +++ b/docs/svg/microsoft.all/hcivirtualmachines.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.apicenter/services.svg b/docs/svg/microsoft.apicenter/services.svg index b069928c6..513bf7bf1 100644 --- a/docs/svg/microsoft.apicenter/services.svg +++ b/docs/svg/microsoft.apicenter/services.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.apicenter/services/workspaces.svg b/docs/svg/microsoft.apicenter/services/workspaces.svg index 678e1dbee..838bf6ad7 100644 --- a/docs/svg/microsoft.apicenter/services/workspaces.svg +++ b/docs/svg/microsoft.apicenter/services/workspaces.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.apimanagement/gateways.svg b/docs/svg/microsoft.apimanagement/gateways.svg index 403daf983..65529b303 100644 --- a/docs/svg/microsoft.apimanagement/gateways.svg +++ b/docs/svg/microsoft.apimanagement/gateways.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.apimanagement/service/workspaces.svg b/docs/svg/microsoft.apimanagement/service/workspaces.svg index d2b153e4b..1c2a8773e 100644 --- a/docs/svg/microsoft.apimanagement/service/workspaces.svg +++ b/docs/svg/microsoft.apimanagement/service/workspaces.svg @@ -11,3 +11,4 @@ + diff --git a/docs/svg/microsoft.app/connectedenvironments.svg b/docs/svg/microsoft.app/connectedenvironments.svg index ad5d055dd..f96d8182e 100644 --- a/docs/svg/microsoft.app/connectedenvironments.svg +++ b/docs/svg/microsoft.app/connectedenvironments.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.app/containerapps.svg b/docs/svg/microsoft.app/containerapps.svg index b9ea36b19..e7334ea62 100644 --- a/docs/svg/microsoft.app/containerapps.svg +++ b/docs/svg/microsoft.app/containerapps.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.app/jobs.svg b/docs/svg/microsoft.app/jobs.svg index 36c86cb6b..fee4e0757 100644 --- a/docs/svg/microsoft.app/jobs.svg +++ b/docs/svg/microsoft.app/jobs.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.app/managedenvironments.svg b/docs/svg/microsoft.app/managedenvironments.svg index 04a05dda0..6f240e603 100644 --- a/docs/svg/microsoft.app/managedenvironments.svg +++ b/docs/svg/microsoft.app/managedenvironments.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.app/sessionpools.svg b/docs/svg/microsoft.app/sessionpools.svg index 97534acf1..b5354853e 100644 --- a/docs/svg/microsoft.app/sessionpools.svg +++ b/docs/svg/microsoft.app/sessionpools.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.app/spaces.svg b/docs/svg/microsoft.app/spaces.svg index 6576d1dc7..a2af6e744 100644 --- a/docs/svg/microsoft.app/spaces.svg +++ b/docs/svg/microsoft.app/spaces.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.appcomplianceautomation/reports/snapshots/controls.svg b/docs/svg/microsoft.appcomplianceautomation/reports/snapshots/controls.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.appcomplianceautomation/reports/snapshots/controls.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.appconfiguration/configurationstores.svg b/docs/svg/microsoft.appconfiguration/configurationstores.svg index e92ad0da7..b916cc8a3 100644 --- a/docs/svg/microsoft.appconfiguration/configurationstores.svg +++ b/docs/svg/microsoft.appconfiguration/configurationstores.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.appplatform/spring.svg b/docs/svg/microsoft.appplatform/spring.svg index ae4919f70..2792c769d 100644 --- a/docs/svg/microsoft.appplatform/spring.svg +++ b/docs/svg/microsoft.appplatform/spring.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.appsecurity/appprotectmanagedrulesetmanifests.svg b/docs/svg/microsoft.appsecurity/appprotectmanagedrulesetmanifests.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.appsecurity/appprotectmanagedrulesetmanifests.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.appsecurity/policies.svg b/docs/svg/microsoft.appsecurity/policies.svg index df30cf185..2b8b5d653 100644 --- a/docs/svg/microsoft.appsecurity/policies.svg +++ b/docs/svg/microsoft.appsecurity/policies.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.arc/all.svg b/docs/svg/microsoft.arc/all.svg index cfe48347b..b10bad5b7 100644 --- a/docs/svg/microsoft.arc/all.svg +++ b/docs/svg/microsoft.arc/all.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.arc/allfairfax.svg b/docs/svg/microsoft.arc/allfairfax.svg index cfe48347b..b10bad5b7 100644 --- a/docs/svg/microsoft.arc/allfairfax.svg +++ b/docs/svg/microsoft.arc/allfairfax.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.arc/kubernetesresources.svg b/docs/svg/microsoft.arc/kubernetesresources.svg index d3b357711..18e759d9d 100644 --- a/docs/svg/microsoft.arc/kubernetesresources.svg +++ b/docs/svg/microsoft.arc/kubernetesresources.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.attestation/attestationproviders.svg b/docs/svg/microsoft.attestation/attestationproviders.svg index a0c611017..22b73d017 100644 --- a/docs/svg/microsoft.attestation/attestationproviders.svg +++ b/docs/svg/microsoft.attestation/attestationproviders.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.authorization/resourcemanagementprivatelinks.svg b/docs/svg/microsoft.authorization/resourcemanagementprivatelinks.svg index 55bf2ca8e..4ebf230d4 100644 --- a/docs/svg/microsoft.authorization/resourcemanagementprivatelinks.svg +++ b/docs/svg/microsoft.authorization/resourcemanagementprivatelinks.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.automanage/serviceprincipals.svg b/docs/svg/microsoft.automanage/serviceprincipals.svg index 650f1d613..44128ba4f 100644 --- a/docs/svg/microsoft.automanage/serviceprincipals.svg +++ b/docs/svg/microsoft.automanage/serviceprincipals.svg @@ -1,3 +1,4 @@ + diff --git a/docs/svg/microsoft.automation/automationaccounts/hybridrunbookworkergroups.svg b/docs/svg/microsoft.automation/automationaccounts/hybridrunbookworkergroups.svg index 70393a6d8..d2b153e4b 100644 --- a/docs/svg/microsoft.automation/automationaccounts/hybridrunbookworkergroups.svg +++ b/docs/svg/microsoft.automation/automationaccounts/hybridrunbookworkergroups.svg @@ -10,3 +10,4 @@ + diff --git a/docs/svg/microsoft.automation/automationaccounts/runbooks.svg b/docs/svg/microsoft.automation/automationaccounts/runbooks.svg index f64285e43..578fdcfa8 100644 --- a/docs/svg/microsoft.automation/automationaccounts/runbooks.svg +++ b/docs/svg/microsoft.automation/automationaccounts/runbooks.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.avs/privateclouds.svg b/docs/svg/microsoft.avs/privateclouds.svg index 4480be885..2a98ac091 100644 --- a/docs/svg/microsoft.avs/privateclouds.svg +++ b/docs/svg/microsoft.avs/privateclouds.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.azureactivedirectory/b2cdirectories.svg b/docs/svg/microsoft.azureactivedirectory/b2cdirectories.svg index ffe23086c..e49243dd9 100644 --- a/docs/svg/microsoft.azureactivedirectory/b2cdirectories.svg +++ b/docs/svg/microsoft.azureactivedirectory/b2cdirectories.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.azureactivedirectory/ciamdirectories.svg b/docs/svg/microsoft.azureactivedirectory/ciamdirectories.svg index 6b67f828d..e49243dd9 100644 --- a/docs/svg/microsoft.azureactivedirectory/ciamdirectories.svg +++ b/docs/svg/microsoft.azureactivedirectory/ciamdirectories.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.azureactivedirectory/guestusages.svg b/docs/svg/microsoft.azureactivedirectory/guestusages.svg index 5ee02f9e5..e49243dd9 100644 --- a/docs/svg/microsoft.azureactivedirectory/guestusages.svg +++ b/docs/svg/microsoft.azureactivedirectory/guestusages.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.azurearcdata/datacontrollers.svg b/docs/svg/microsoft.azurearcdata/datacontrollers.svg index d2a0a1620..12a518818 100644 --- a/docs/svg/microsoft.azurearcdata/datacontrollers.svg +++ b/docs/svg/microsoft.azurearcdata/datacontrollers.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.azurearcdata/mysqlserver.svg b/docs/svg/microsoft.azurearcdata/mysqlserver.svg new file mode 100644 index 000000000..2a24bac91 --- /dev/null +++ b/docs/svg/microsoft.azurearcdata/mysqlserver.svg @@ -0,0 +1 @@ + diff --git a/docs/svg/microsoft.azurearcdata/postgresinstances.svg b/docs/svg/microsoft.azurearcdata/postgresinstances.svg index 9fb7b267f..371715c1d 100644 --- a/docs/svg/microsoft.azurearcdata/postgresinstances.svg +++ b/docs/svg/microsoft.azurearcdata/postgresinstances.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.azurearcdata/postgressqlserver.svg b/docs/svg/microsoft.azurearcdata/postgressqlserver.svg new file mode 100644 index 000000000..00f2e188d --- /dev/null +++ b/docs/svg/microsoft.azurearcdata/postgressqlserver.svg @@ -0,0 +1 @@ + diff --git a/docs/svg/microsoft.azurearcdata/sqlmanagedinstances.svg b/docs/svg/microsoft.azurearcdata/sqlmanagedinstances.svg index 89088c0ae..c8aae9c77 100644 --- a/docs/svg/microsoft.azurearcdata/sqlmanagedinstances.svg +++ b/docs/svg/microsoft.azurearcdata/sqlmanagedinstances.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.azurearcdata/sqlserverinstances.svg b/docs/svg/microsoft.azurearcdata/sqlserverinstances.svg index 918c441b9..981dba374 100644 --- a/docs/svg/microsoft.azurearcdata/sqlserverinstances.svg +++ b/docs/svg/microsoft.azurearcdata/sqlserverinstances.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.azurearcdata/sqlserverinstances/databases.svg b/docs/svg/microsoft.azurearcdata/sqlserverinstances/databases.svg index 8416112ed..d34233b73 100644 --- a/docs/svg/microsoft.azurearcdata/sqlserverinstances/databases.svg +++ b/docs/svg/microsoft.azurearcdata/sqlserverinstances/databases.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.azurecis/sharedconfigvalues.svg b/docs/svg/microsoft.azurecis/sharedconfigvalues.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.azurecis/sharedconfigvalues.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.azurefleet/fleets.svg b/docs/svg/microsoft.azurefleet/fleets.svg index 4e28da28a..b8022b727 100644 --- a/docs/svg/microsoft.azurefleet/fleets.svg +++ b/docs/svg/microsoft.azurefleet/fleets.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.azurefleet/fleetscomputehub.svg b/docs/svg/microsoft.azurefleet/fleetscomputehub.svg index 4e28da28a..b8022b727 100644 --- a/docs/svg/microsoft.azurefleet/fleetscomputehub.svg +++ b/docs/svg/microsoft.azurefleet/fleetscomputehub.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.azurelargeinstance/azurelargeinstances.svg b/docs/svg/microsoft.azurelargeinstance/azurelargeinstances.svg index d5ce51a53..218f222b7 100644 --- a/docs/svg/microsoft.azurelargeinstance/azurelargeinstances.svg +++ b/docs/svg/microsoft.azurelargeinstance/azurelargeinstances.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.azureplaywrightservice/accounts.svg b/docs/svg/microsoft.azureplaywrightservice/accounts.svg index 7f718c6d2..6021649ff 100644 --- a/docs/svg/microsoft.azureplaywrightservice/accounts.svg +++ b/docs/svg/microsoft.azureplaywrightservice/accounts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.azuresphere/catalogs.svg b/docs/svg/microsoft.azuresphere/catalogs.svg index 4597a39de..5edb1a601 100644 --- a/docs/svg/microsoft.azuresphere/catalogs.svg +++ b/docs/svg/microsoft.azuresphere/catalogs.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.azurestackhci/devicepools.svg b/docs/svg/microsoft.azurestackhci/devicepools.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.azurestackhci/devicepools.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.azurestackhci/edgemachines.svg b/docs/svg/microsoft.azurestackhci/edgemachines.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.azurestackhci/edgemachines.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.azurestackhci/edgemachines/jobs.svg b/docs/svg/microsoft.azurestackhci/edgemachines/jobs.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.azurestackhci/edgemachines/jobs.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.azurestackhci/galleryimages.svg b/docs/svg/microsoft.azurestackhci/galleryimages.svg index 5a4b2322b..a5eb3d359 100644 --- a/docs/svg/microsoft.azurestackhci/galleryimages.svg +++ b/docs/svg/microsoft.azurestackhci/galleryimages.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.azurestackhci/logicalnetworks.svg b/docs/svg/microsoft.azurestackhci/logicalnetworks.svg index 06e730fc7..711ce255b 100644 --- a/docs/svg/microsoft.azurestackhci/logicalnetworks.svg +++ b/docs/svg/microsoft.azurestackhci/logicalnetworks.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.azurestackhci/marketplacegalleryimages.svg b/docs/svg/microsoft.azurestackhci/marketplacegalleryimages.svg index 734070f35..8f16dc535 100644 --- a/docs/svg/microsoft.azurestackhci/marketplacegalleryimages.svg +++ b/docs/svg/microsoft.azurestackhci/marketplacegalleryimages.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.azurestackhci/networkinterfaces.svg b/docs/svg/microsoft.azurestackhci/networkinterfaces.svg index 92501ccb5..8368d3945 100644 --- a/docs/svg/microsoft.azurestackhci/networkinterfaces.svg +++ b/docs/svg/microsoft.azurestackhci/networkinterfaces.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.azurestackhci/networksecuritygroups.svg b/docs/svg/microsoft.azurestackhci/networksecuritygroups.svg index 9d6f2b4e2..38c65fbc3 100644 --- a/docs/svg/microsoft.azurestackhci/networksecuritygroups.svg +++ b/docs/svg/microsoft.azurestackhci/networksecuritygroups.svg @@ -1,2 +1 @@ - - + diff --git a/docs/svg/microsoft.azurestackhci/storagecontainers.svg b/docs/svg/microsoft.azurestackhci/storagecontainers.svg index 7c2d2e6a9..d61000f9d 100644 --- a/docs/svg/microsoft.azurestackhci/storagecontainers.svg +++ b/docs/svg/microsoft.azurestackhci/storagecontainers.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.azurestackhci/virtualmachines.svg b/docs/svg/microsoft.azurestackhci/virtualmachines.svg index dfa1ce78c..8225c53da 100644 --- a/docs/svg/microsoft.azurestackhci/virtualmachines.svg +++ b/docs/svg/microsoft.azurestackhci/virtualmachines.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.baremetalinfrastructure/baremetalinstances.svg b/docs/svg/microsoft.baremetalinfrastructure/baremetalinstances.svg index 16a073778..94e3cdf16 100644 --- a/docs/svg/microsoft.baremetalinfrastructure/baremetalinstances.svg +++ b/docs/svg/microsoft.baremetalinfrastructure/baremetalinstances.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.batch/batchaccounts.svg b/docs/svg/microsoft.batch/batchaccounts.svg index 47e28d3d0..9e8b4397a 100644 --- a/docs/svg/microsoft.batch/batchaccounts.svg +++ b/docs/svg/microsoft.batch/batchaccounts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.billing/billingaccounts/incentiveschedules.svg b/docs/svg/microsoft.billing/billingaccounts/incentiveschedules.svg index 9c48b6870..d80c926a9 100644 --- a/docs/svg/microsoft.billing/billingaccounts/incentiveschedules.svg +++ b/docs/svg/microsoft.billing/billingaccounts/incentiveschedules.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.billing/billingaccounts/incentiveschedules/milestones.svg b/docs/svg/microsoft.billing/billingaccounts/incentiveschedules/milestones.svg index 95e9dd3e5..34012fd78 100644 --- a/docs/svg/microsoft.billing/billingaccounts/incentiveschedules/milestones.svg +++ b/docs/svg/microsoft.billing/billingaccounts/incentiveschedules/milestones.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.billing/billingaccounts/migrations.svg b/docs/svg/microsoft.billing/billingaccounts/migrations.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.billing/billingaccounts/migrations.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.billing/billingaccounts/savingsplanorders.svg b/docs/svg/microsoft.billing/billingaccounts/savingsplanorders.svg index 5cc7c493f..dac650e0d 100644 --- a/docs/svg/microsoft.billing/billingaccounts/savingsplanorders.svg +++ b/docs/svg/microsoft.billing/billingaccounts/savingsplanorders.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.billing/billingaccounts/savingsplanorders/savingsplans.svg b/docs/svg/microsoft.billing/billingaccounts/savingsplanorders/savingsplans.svg index 953ff9f71..85c619f06 100644 --- a/docs/svg/microsoft.billing/billingaccounts/savingsplanorders/savingsplans.svg +++ b/docs/svg/microsoft.billing/billingaccounts/savingsplanorders/savingsplans.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.billingbenefits/incentiveschedules.svg b/docs/svg/microsoft.billingbenefits/incentiveschedules.svg index 2924f1744..39959d8a2 100644 --- a/docs/svg/microsoft.billingbenefits/incentiveschedules.svg +++ b/docs/svg/microsoft.billingbenefits/incentiveschedules.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.billingbenefits/incentiveschedules/milestones.svg b/docs/svg/microsoft.billingbenefits/incentiveschedules/milestones.svg index e9999a8f9..248bd6908 100644 --- a/docs/svg/microsoft.billingbenefits/incentiveschedules/milestones.svg +++ b/docs/svg/microsoft.billingbenefits/incentiveschedules/milestones.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.billingbenefits/maccs.svg b/docs/svg/microsoft.billingbenefits/maccs.svg index 12248d9c0..e44710335 100644 --- a/docs/svg/microsoft.billingbenefits/maccs.svg +++ b/docs/svg/microsoft.billingbenefits/maccs.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.billingbenefits/savingsplanorders.svg b/docs/svg/microsoft.billingbenefits/savingsplanorders.svg index c26239dd6..47fc443dd 100644 --- a/docs/svg/microsoft.billingbenefits/savingsplanorders.svg +++ b/docs/svg/microsoft.billingbenefits/savingsplanorders.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.billingbenefits/savingsplanorders/savingsplans.svg b/docs/svg/microsoft.billingbenefits/savingsplanorders/savingsplans.svg index e78a709fb..f7111fdd7 100644 --- a/docs/svg/microsoft.billingbenefits/savingsplanorders/savingsplans.svg +++ b/docs/svg/microsoft.billingbenefits/savingsplanorders/savingsplans.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cache/redis.svg b/docs/svg/microsoft.cache/redis.svg index 4bf34d9f4..721ede9ab 100644 --- a/docs/svg/microsoft.cache/redis.svg +++ b/docs/svg/microsoft.cache/redis.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cache/redisenterprise.svg b/docs/svg/microsoft.cache/redisenterprise.svg index 710c996ba..08dbe5457 100644 --- a/docs/svg/microsoft.cache/redisenterprise.svg +++ b/docs/svg/microsoft.cache/redisenterprise.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cache/redisenterprise/databases.svg b/docs/svg/microsoft.cache/redisenterprise/databases.svg index 710c996ba..7a759f993 100644 --- a/docs/svg/microsoft.cache/redisenterprise/databases.svg +++ b/docs/svg/microsoft.cache/redisenterprise/databases.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.capacity/reservationorders.svg b/docs/svg/microsoft.capacity/reservationorders.svg index 4b21f3285..0fd2f592f 100644 --- a/docs/svg/microsoft.capacity/reservationorders.svg +++ b/docs/svg/microsoft.capacity/reservationorders.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.capacity/reservationorders/reservations.svg b/docs/svg/microsoft.capacity/reservationorders/reservations.svg index 64c25af32..70c22cfb0 100644 --- a/docs/svg/microsoft.capacity/reservationorders/reservations.svg +++ b/docs/svg/microsoft.capacity/reservationorders/reservations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cdn/cdnwebapplicationfirewallpolicies.svg b/docs/svg/microsoft.cdn/cdnwebapplicationfirewallpolicies.svg index 965f1e8f1..7702a93cb 100644 --- a/docs/svg/microsoft.cdn/cdnwebapplicationfirewallpolicies.svg +++ b/docs/svg/microsoft.cdn/cdnwebapplicationfirewallpolicies.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cdn/profiles.svg b/docs/svg/microsoft.cdn/profiles.svg index bd91e4c24..4a6725255 100644 --- a/docs/svg/microsoft.cdn/profiles.svg +++ b/docs/svg/microsoft.cdn/profiles.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cdn/profiles/afdendpoints.svg b/docs/svg/microsoft.cdn/profiles/afdendpoints.svg index 9651625fe..70393a6d8 100644 --- a/docs/svg/microsoft.cdn/profiles/afdendpoints.svg +++ b/docs/svg/microsoft.cdn/profiles/afdendpoints.svg @@ -9,3 +9,4 @@ + diff --git a/docs/svg/microsoft.cdn/profiles/afdendpoints/routes.svg b/docs/svg/microsoft.cdn/profiles/afdendpoints/routes.svg index 9651625fe..70393a6d8 100644 --- a/docs/svg/microsoft.cdn/profiles/afdendpoints/routes.svg +++ b/docs/svg/microsoft.cdn/profiles/afdendpoints/routes.svg @@ -9,3 +9,4 @@ + diff --git a/docs/svg/microsoft.cdn/profiles/customdomains.svg b/docs/svg/microsoft.cdn/profiles/customdomains.svg index 9651625fe..70393a6d8 100644 --- a/docs/svg/microsoft.cdn/profiles/customdomains.svg +++ b/docs/svg/microsoft.cdn/profiles/customdomains.svg @@ -9,3 +9,4 @@ + diff --git a/docs/svg/microsoft.cdn/profiles/origingroups.svg b/docs/svg/microsoft.cdn/profiles/origingroups.svg index 9651625fe..70393a6d8 100644 --- a/docs/svg/microsoft.cdn/profiles/origingroups.svg +++ b/docs/svg/microsoft.cdn/profiles/origingroups.svg @@ -9,3 +9,4 @@ + diff --git a/docs/svg/microsoft.cdn/profiles/origingroups/origins.svg b/docs/svg/microsoft.cdn/profiles/origingroups/origins.svg index 9651625fe..70393a6d8 100644 --- a/docs/svg/microsoft.cdn/profiles/origingroups/origins.svg +++ b/docs/svg/microsoft.cdn/profiles/origingroups/origins.svg @@ -9,3 +9,4 @@ + diff --git a/docs/svg/microsoft.cdn/profiles/rulesets.svg b/docs/svg/microsoft.cdn/profiles/rulesets.svg index 9651625fe..70393a6d8 100644 --- a/docs/svg/microsoft.cdn/profiles/rulesets.svg +++ b/docs/svg/microsoft.cdn/profiles/rulesets.svg @@ -9,3 +9,4 @@ + diff --git a/docs/svg/microsoft.cdn/profiles/rulesets/rules.svg b/docs/svg/microsoft.cdn/profiles/rulesets/rules.svg index 9651625fe..70393a6d8 100644 --- a/docs/svg/microsoft.cdn/profiles/rulesets/rules.svg +++ b/docs/svg/microsoft.cdn/profiles/rulesets/rules.svg @@ -9,3 +9,4 @@ + diff --git a/docs/svg/microsoft.cdn/profiles/secrets.svg b/docs/svg/microsoft.cdn/profiles/secrets.svg index 9651625fe..70393a6d8 100644 --- a/docs/svg/microsoft.cdn/profiles/secrets.svg +++ b/docs/svg/microsoft.cdn/profiles/secrets.svg @@ -9,3 +9,4 @@ + diff --git a/docs/svg/microsoft.cdn/profiles/securitypolicies.svg b/docs/svg/microsoft.cdn/profiles/securitypolicies.svg index 9651625fe..70393a6d8 100644 --- a/docs/svg/microsoft.cdn/profiles/securitypolicies.svg +++ b/docs/svg/microsoft.cdn/profiles/securitypolicies.svg @@ -9,3 +9,4 @@ + diff --git a/docs/svg/microsoft.chaos/experiments.svg b/docs/svg/microsoft.chaos/experiments.svg index af37247eb..1a7dcfb8e 100644 --- a/docs/svg/microsoft.chaos/experiments.svg +++ b/docs/svg/microsoft.chaos/experiments.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.chaos/privateaccesses.svg b/docs/svg/microsoft.chaos/privateaccesses.svg index b3eb9f6e6..1ffc40621 100644 --- a/docs/svg/microsoft.chaos/privateaccesses.svg +++ b/docs/svg/microsoft.chaos/privateaccesses.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.classiccompute/domainnames.svg b/docs/svg/microsoft.classiccompute/domainnames.svg index 7ac3d4d13..efe6955d6 100644 --- a/docs/svg/microsoft.classiccompute/domainnames.svg +++ b/docs/svg/microsoft.classiccompute/domainnames.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.classiccompute/domainnames/slots/roles.svg b/docs/svg/microsoft.classiccompute/domainnames/slots/roles.svg index 1d0be8d88..efe6955d6 100644 --- a/docs/svg/microsoft.classiccompute/domainnames/slots/roles.svg +++ b/docs/svg/microsoft.classiccompute/domainnames/slots/roles.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.classiccompute/virtualmachines.svg b/docs/svg/microsoft.classiccompute/virtualmachines.svg index 72bb8a3bb..fb90d9bb6 100644 --- a/docs/svg/microsoft.classiccompute/virtualmachines.svg +++ b/docs/svg/microsoft.classiccompute/virtualmachines.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.classicnetwork/networksecuritygroups.svg b/docs/svg/microsoft.classicnetwork/networksecuritygroups.svg index e51fa94be..a189cb074 100644 --- a/docs/svg/microsoft.classicnetwork/networksecuritygroups.svg +++ b/docs/svg/microsoft.classicnetwork/networksecuritygroups.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.classicnetwork/reservedips.svg b/docs/svg/microsoft.classicnetwork/reservedips.svg index daaf94ce2..ec6fdbf93 100644 --- a/docs/svg/microsoft.classicnetwork/reservedips.svg +++ b/docs/svg/microsoft.classicnetwork/reservedips.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.classicnetwork/virtualnetworks.svg b/docs/svg/microsoft.classicnetwork/virtualnetworks.svg index 9dc4fe831..a996b9b68 100644 --- a/docs/svg/microsoft.classicnetwork/virtualnetworks.svg +++ b/docs/svg/microsoft.classicnetwork/virtualnetworks.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.classicstorage/storageaccounts.svg b/docs/svg/microsoft.classicstorage/storageaccounts.svg index ac62241bd..6acef3869 100644 --- a/docs/svg/microsoft.classicstorage/storageaccounts.svg +++ b/docs/svg/microsoft.classicstorage/storageaccounts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.classicstorage/storageaccounts/osimages.svg b/docs/svg/microsoft.classicstorage/storageaccounts/osimages.svg index 3951242a1..8589c84df 100644 --- a/docs/svg/microsoft.classicstorage/storageaccounts/osimages.svg +++ b/docs/svg/microsoft.classicstorage/storageaccounts/osimages.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.classicstorage/storageaccounts/vmimages.svg b/docs/svg/microsoft.classicstorage/storageaccounts/vmimages.svg index 49048fe5c..8589c84df 100644 --- a/docs/svg/microsoft.classicstorage/storageaccounts/vmimages.svg +++ b/docs/svg/microsoft.classicstorage/storageaccounts/vmimages.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cleanroom/collaborations.svg b/docs/svg/microsoft.cleanroom/collaborations.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.cleanroom/collaborations.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.cleanroom/collaborations/contracts.svg b/docs/svg/microsoft.cleanroom/collaborations/contracts.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.cleanroom/collaborations/contracts.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.cleanroom/consortiums.svg b/docs/svg/microsoft.cleanroom/consortiums.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.cleanroom/consortiums.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.cloudhealth/healthmodels.svg b/docs/svg/microsoft.cloudhealth/healthmodels.svg index 25f4d24d5..d2470b060 100644 --- a/docs/svg/microsoft.cloudhealth/healthmodels.svg +++ b/docs/svg/microsoft.cloudhealth/healthmodels.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cloudtest/buildcaches.svg b/docs/svg/microsoft.cloudtest/buildcaches.svg index e7971747c..585f9ca7c 100644 --- a/docs/svg/microsoft.cloudtest/buildcaches.svg +++ b/docs/svg/microsoft.cloudtest/buildcaches.svg @@ -1,26 +1,15 @@ - - - - - - - + + + + - - - - - - - - - - - - - + + + + + diff --git a/docs/svg/microsoft.codesigning/codesigningaccounts.svg b/docs/svg/microsoft.codesigning/codesigningaccounts.svg index a3c9adb61..ce52269f0 100644 --- a/docs/svg/microsoft.codesigning/codesigningaccounts.svg +++ b/docs/svg/microsoft.codesigning/codesigningaccounts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cognitiveservices/accounts.svg b/docs/svg/microsoft.cognitiveservices/accounts.svg index d6b5429c9..857b3b34f 100644 --- a/docs/svg/microsoft.cognitiveservices/accounts.svg +++ b/docs/svg/microsoft.cognitiveservices/accounts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cognitiveservices/browseaiservices.svg b/docs/svg/microsoft.cognitiveservices/browseaiservices.svg index 8678c34d9..181784cb1 100644 --- a/docs/svg/microsoft.cognitiveservices/browseaiservices.svg +++ b/docs/svg/microsoft.cognitiveservices/browseaiservices.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cognitiveservices/browseallinone.svg b/docs/svg/microsoft.cognitiveservices/browseallinone.svg index d8eb66744..037d79b9e 100644 --- a/docs/svg/microsoft.cognitiveservices/browseallinone.svg +++ b/docs/svg/microsoft.cognitiveservices/browseallinone.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cognitiveservices/browseanomalydetector.svg b/docs/svg/microsoft.cognitiveservices/browseanomalydetector.svg index 030382f7d..d3819444f 100644 --- a/docs/svg/microsoft.cognitiveservices/browseanomalydetector.svg +++ b/docs/svg/microsoft.cognitiveservices/browseanomalydetector.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cognitiveservices/browsecomputervision.svg b/docs/svg/microsoft.cognitiveservices/browsecomputervision.svg index 7094b207d..f9e8c3328 100644 --- a/docs/svg/microsoft.cognitiveservices/browsecomputervision.svg +++ b/docs/svg/microsoft.cognitiveservices/browsecomputervision.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cognitiveservices/browsecontentmoderator.svg b/docs/svg/microsoft.cognitiveservices/browsecontentmoderator.svg index a1eedb042..d50b8e43a 100644 --- a/docs/svg/microsoft.cognitiveservices/browsecontentmoderator.svg +++ b/docs/svg/microsoft.cognitiveservices/browsecontentmoderator.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cognitiveservices/browsecontentsafety.svg b/docs/svg/microsoft.cognitiveservices/browsecontentsafety.svg index 126dba4ec..02105581e 100644 --- a/docs/svg/microsoft.cognitiveservices/browsecontentsafety.svg +++ b/docs/svg/microsoft.cognitiveservices/browsecontentsafety.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cognitiveservices/browsecustomvision.svg b/docs/svg/microsoft.cognitiveservices/browsecustomvision.svg index 9e6aef327..70c562c5f 100644 --- a/docs/svg/microsoft.cognitiveservices/browsecustomvision.svg +++ b/docs/svg/microsoft.cognitiveservices/browsecustomvision.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cognitiveservices/browseface.svg b/docs/svg/microsoft.cognitiveservices/browseface.svg index 1458907f7..a5f3d45b7 100644 --- a/docs/svg/microsoft.cognitiveservices/browseface.svg +++ b/docs/svg/microsoft.cognitiveservices/browseface.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cognitiveservices/browseformrecognizer.svg b/docs/svg/microsoft.cognitiveservices/browseformrecognizer.svg index 9942fb5fb..92e131716 100644 --- a/docs/svg/microsoft.cognitiveservices/browseformrecognizer.svg +++ b/docs/svg/microsoft.cognitiveservices/browseformrecognizer.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cognitiveservices/browseimmersivereader.svg b/docs/svg/microsoft.cognitiveservices/browseimmersivereader.svg index 5b4697ce1..9d84db8de 100644 --- a/docs/svg/microsoft.cognitiveservices/browseimmersivereader.svg +++ b/docs/svg/microsoft.cognitiveservices/browseimmersivereader.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cognitiveservices/browseluis.svg b/docs/svg/microsoft.cognitiveservices/browseluis.svg index 369aa6dbd..23e13f764 100644 --- a/docs/svg/microsoft.cognitiveservices/browseluis.svg +++ b/docs/svg/microsoft.cognitiveservices/browseluis.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cognitiveservices/browsemetricsadvisor.svg b/docs/svg/microsoft.cognitiveservices/browsemetricsadvisor.svg index fb4f6c159..c8bf9a283 100644 --- a/docs/svg/microsoft.cognitiveservices/browsemetricsadvisor.svg +++ b/docs/svg/microsoft.cognitiveservices/browsemetricsadvisor.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cognitiveservices/browseopenai.svg b/docs/svg/microsoft.cognitiveservices/browseopenai.svg index 0a5f46237..b780be439 100644 --- a/docs/svg/microsoft.cognitiveservices/browseopenai.svg +++ b/docs/svg/microsoft.cognitiveservices/browseopenai.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cognitiveservices/browsepersonalizer.svg b/docs/svg/microsoft.cognitiveservices/browsepersonalizer.svg index ae0596c29..5fdc70bfd 100644 --- a/docs/svg/microsoft.cognitiveservices/browsepersonalizer.svg +++ b/docs/svg/microsoft.cognitiveservices/browsepersonalizer.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cognitiveservices/browseqnamaker.svg b/docs/svg/microsoft.cognitiveservices/browseqnamaker.svg index 6387106d3..1316d0d50 100644 --- a/docs/svg/microsoft.cognitiveservices/browseqnamaker.svg +++ b/docs/svg/microsoft.cognitiveservices/browseqnamaker.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cognitiveservices/browsespeechservices.svg b/docs/svg/microsoft.cognitiveservices/browsespeechservices.svg index 8497a1dca..37642cfdd 100644 --- a/docs/svg/microsoft.cognitiveservices/browsespeechservices.svg +++ b/docs/svg/microsoft.cognitiveservices/browsespeechservices.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cognitiveservices/browsetextanalytics.svg b/docs/svg/microsoft.cognitiveservices/browsetextanalytics.svg index 8ed865d45..5a5099bf7 100644 --- a/docs/svg/microsoft.cognitiveservices/browsetextanalytics.svg +++ b/docs/svg/microsoft.cognitiveservices/browsetextanalytics.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.cognitiveservices/browsetexttranslation.svg b/docs/svg/microsoft.cognitiveservices/browsetexttranslation.svg index 836555b50..9b1e81f78 100644 --- a/docs/svg/microsoft.cognitiveservices/browsetexttranslation.svg +++ b/docs/svg/microsoft.cognitiveservices/browsetexttranslation.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.communication/communicationservices.svg b/docs/svg/microsoft.communication/communicationservices.svg index ee737ba34..170db9f2f 100644 --- a/docs/svg/microsoft.communication/communicationservices.svg +++ b/docs/svg/microsoft.communication/communicationservices.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.communication/emailservices.svg b/docs/svg/microsoft.communication/emailservices.svg index fbd93c67e..867030c96 100644 --- a/docs/svg/microsoft.communication/emailservices.svg +++ b/docs/svg/microsoft.communication/emailservices.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.communication/emailservices/domains.svg b/docs/svg/microsoft.communication/emailservices/domains.svg index c28a651be..24258457c 100644 --- a/docs/svg/microsoft.communication/emailservices/domains.svg +++ b/docs/svg/microsoft.communication/emailservices/domains.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.community/communitytrainings.svg b/docs/svg/microsoft.community/communitytrainings.svg index f3a6890f7..1c44cdff5 100644 --- a/docs/svg/microsoft.community/communitytrainings.svg +++ b/docs/svg/microsoft.community/communitytrainings.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/availabilitysets.svg b/docs/svg/microsoft.compute/availabilitysets.svg index 96fa48239..a0b9a65d4 100644 --- a/docs/svg/microsoft.compute/availabilitysets.svg +++ b/docs/svg/microsoft.compute/availabilitysets.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/capacityreservationgroups.svg b/docs/svg/microsoft.compute/capacityreservationgroups.svg index 50d783ca1..22aaba89c 100644 --- a/docs/svg/microsoft.compute/capacityreservationgroups.svg +++ b/docs/svg/microsoft.compute/capacityreservationgroups.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/capacityreservationgroupscomputehub.svg b/docs/svg/microsoft.compute/capacityreservationgroupscomputehub.svg index 50d783ca1..22aaba89c 100644 --- a/docs/svg/microsoft.compute/capacityreservationgroupscomputehub.svg +++ b/docs/svg/microsoft.compute/capacityreservationgroupscomputehub.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/cloudservices.svg b/docs/svg/microsoft.compute/cloudservices.svg index eb2934e20..2b2153bac 100644 --- a/docs/svg/microsoft.compute/cloudservices.svg +++ b/docs/svg/microsoft.compute/cloudservices.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/computefleetinstances.svg b/docs/svg/microsoft.compute/computefleetinstances.svg index aad56fea8..dcae39567 100644 --- a/docs/svg/microsoft.compute/computefleetinstances.svg +++ b/docs/svg/microsoft.compute/computefleetinstances.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/computefleetscalesets.svg b/docs/svg/microsoft.compute/computefleetscalesets.svg index d6507158e..dcae39567 100644 --- a/docs/svg/microsoft.compute/computefleetscalesets.svg +++ b/docs/svg/microsoft.compute/computefleetscalesets.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/diskaccesses.svg b/docs/svg/microsoft.compute/diskaccesses.svg index 55e61f7c1..407184d1d 100644 --- a/docs/svg/microsoft.compute/diskaccesses.svg +++ b/docs/svg/microsoft.compute/diskaccesses.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/diskencryptionsets.svg b/docs/svg/microsoft.compute/diskencryptionsets.svg index e392fb360..b79add68e 100644 --- a/docs/svg/microsoft.compute/diskencryptionsets.svg +++ b/docs/svg/microsoft.compute/diskencryptionsets.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/galleries.svg b/docs/svg/microsoft.compute/galleries.svg index 64c112db3..3b0322592 100644 --- a/docs/svg/microsoft.compute/galleries.svg +++ b/docs/svg/microsoft.compute/galleries.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/galleries/applications.svg b/docs/svg/microsoft.compute/galleries/applications.svg index 3513653ff..521707415 100644 --- a/docs/svg/microsoft.compute/galleries/applications.svg +++ b/docs/svg/microsoft.compute/galleries/applications.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/galleries/applications/versions.svg b/docs/svg/microsoft.compute/galleries/applications/versions.svg index 869f47803..5ff5ec3bf 100644 --- a/docs/svg/microsoft.compute/galleries/applications/versions.svg +++ b/docs/svg/microsoft.compute/galleries/applications/versions.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/galleries/images.svg b/docs/svg/microsoft.compute/galleries/images.svg index 18ccc47c9..901856bc8 100644 --- a/docs/svg/microsoft.compute/galleries/images.svg +++ b/docs/svg/microsoft.compute/galleries/images.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/galleries/images/versions.svg b/docs/svg/microsoft.compute/galleries/images/versions.svg index c6b595053..2dca1329e 100644 --- a/docs/svg/microsoft.compute/galleries/images/versions.svg +++ b/docs/svg/microsoft.compute/galleries/images/versions.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/galleries/imagescomputehub.svg b/docs/svg/microsoft.compute/galleries/imagescomputehub.svg index 08c7451bd..901856bc8 100644 --- a/docs/svg/microsoft.compute/galleries/imagescomputehub.svg +++ b/docs/svg/microsoft.compute/galleries/imagescomputehub.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/hostgroups.svg b/docs/svg/microsoft.compute/hostgroups.svg index f09228574..7fb6e7ce0 100644 --- a/docs/svg/microsoft.compute/hostgroups.svg +++ b/docs/svg/microsoft.compute/hostgroups.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/hostgroups/hosts.svg b/docs/svg/microsoft.compute/hostgroups/hosts.svg index 9b87598f3..0cbb25f4c 100644 --- a/docs/svg/microsoft.compute/hostgroups/hosts.svg +++ b/docs/svg/microsoft.compute/hostgroups/hosts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/hostgroupscomputehub.svg b/docs/svg/microsoft.compute/hostgroupscomputehub.svg index f09228574..7fb6e7ce0 100644 --- a/docs/svg/microsoft.compute/hostgroupscomputehub.svg +++ b/docs/svg/microsoft.compute/hostgroupscomputehub.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/images.svg b/docs/svg/microsoft.compute/images.svg index 1c9834a7f..3e5dc0e35 100644 --- a/docs/svg/microsoft.compute/images.svg +++ b/docs/svg/microsoft.compute/images.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/imagescomputehub.svg b/docs/svg/microsoft.compute/imagescomputehub.svg index 48dbf8326..3e5dc0e35 100644 --- a/docs/svg/microsoft.compute/imagescomputehub.svg +++ b/docs/svg/microsoft.compute/imagescomputehub.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/locations/communitygalleries/images.svg b/docs/svg/microsoft.compute/locations/communitygalleries/images.svg index 3551b4c42..407ec0c9d 100644 --- a/docs/svg/microsoft.compute/locations/communitygalleries/images.svg +++ b/docs/svg/microsoft.compute/locations/communitygalleries/images.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/locations/communitygalleries/imagescomputehub.svg b/docs/svg/microsoft.compute/locations/communitygalleries/imagescomputehub.svg index f6814c0ae..407ec0c9d 100644 --- a/docs/svg/microsoft.compute/locations/communitygalleries/imagescomputehub.svg +++ b/docs/svg/microsoft.compute/locations/communitygalleries/imagescomputehub.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/proximityplacementgroups.svg b/docs/svg/microsoft.compute/proximityplacementgroups.svg index 2ac0ace87..7dd2b670c 100644 --- a/docs/svg/microsoft.compute/proximityplacementgroups.svg +++ b/docs/svg/microsoft.compute/proximityplacementgroups.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/proximityplacementgroupscomputehub.svg b/docs/svg/microsoft.compute/proximityplacementgroupscomputehub.svg index 2ac0ace87..7dd2b670c 100644 --- a/docs/svg/microsoft.compute/proximityplacementgroupscomputehub.svg +++ b/docs/svg/microsoft.compute/proximityplacementgroupscomputehub.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/restorepointcollections.svg b/docs/svg/microsoft.compute/restorepointcollections.svg index ab80805c2..7a27fa481 100644 --- a/docs/svg/microsoft.compute/restorepointcollections.svg +++ b/docs/svg/microsoft.compute/restorepointcollections.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/restorepointcollections/restorepoints.svg b/docs/svg/microsoft.compute/restorepointcollections/restorepoints.svg index 25181bf56..d50b504c0 100644 --- a/docs/svg/microsoft.compute/restorepointcollections/restorepoints.svg +++ b/docs/svg/microsoft.compute/restorepointcollections/restorepoints.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/snapshots.svg b/docs/svg/microsoft.compute/snapshots.svg index fdc294c94..cc7b63c49 100644 --- a/docs/svg/microsoft.compute/snapshots.svg +++ b/docs/svg/microsoft.compute/snapshots.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/sshpublickeys.svg b/docs/svg/microsoft.compute/sshpublickeys.svg index dd3fc8a16..f4befc405 100644 --- a/docs/svg/microsoft.compute/sshpublickeys.svg +++ b/docs/svg/microsoft.compute/sshpublickeys.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/standbypoolinstance.svg b/docs/svg/microsoft.compute/standbypoolinstance.svg index d2141e3bc..dcae39567 100644 --- a/docs/svg/microsoft.compute/standbypoolinstance.svg +++ b/docs/svg/microsoft.compute/standbypoolinstance.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/virtualmachineflexinstances.svg b/docs/svg/microsoft.compute/virtualmachineflexinstances.svg index d35381e7d..dcae39567 100644 --- a/docs/svg/microsoft.compute/virtualmachineflexinstances.svg +++ b/docs/svg/microsoft.compute/virtualmachineflexinstances.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/virtualmachines/providers/guestconfigurationassignments.svg b/docs/svg/microsoft.compute/virtualmachines/providers/guestconfigurationassignments.svg index a299b7523..a81d07369 100644 --- a/docs/svg/microsoft.compute/virtualmachines/providers/guestconfigurationassignments.svg +++ b/docs/svg/microsoft.compute/virtualmachines/providers/guestconfigurationassignments.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/virtualmachinescalesets.svg b/docs/svg/microsoft.compute/virtualmachinescalesets.svg index 11e684f76..dcae39567 100644 --- a/docs/svg/microsoft.compute/virtualmachinescalesets.svg +++ b/docs/svg/microsoft.compute/virtualmachinescalesets.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/virtualmachinescalesets/providers/guestconfigurationassignments.svg b/docs/svg/microsoft.compute/virtualmachinescalesets/providers/guestconfigurationassignments.svg index a299b7523..a81d07369 100644 --- a/docs/svg/microsoft.compute/virtualmachinescalesets/providers/guestconfigurationassignments.svg +++ b/docs/svg/microsoft.compute/virtualmachinescalesets/providers/guestconfigurationassignments.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.compute/virtualmachinescalesetscomputehub.svg b/docs/svg/microsoft.compute/virtualmachinescalesetscomputehub.svg index 777d612ca..dcae39567 100644 --- a/docs/svg/microsoft.compute/virtualmachinescalesetscomputehub.svg +++ b/docs/svg/microsoft.compute/virtualmachinescalesetscomputehub.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.confidentialledger/ledgers.svg b/docs/svg/microsoft.confidentialledger/ledgers.svg index 317719d43..435ac9d0b 100644 --- a/docs/svg/microsoft.confidentialledger/ledgers.svg +++ b/docs/svg/microsoft.confidentialledger/ledgers.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.confidentialledger/managedccfs.svg b/docs/svg/microsoft.confidentialledger/managedccfs.svg index dc042ebb9..6bd28ebe4 100644 --- a/docs/svg/microsoft.confidentialledger/managedccfs.svg +++ b/docs/svg/microsoft.confidentialledger/managedccfs.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.connectedcache/cachenodes.svg b/docs/svg/microsoft.connectedcache/cachenodes.svg index ba4287688..9d6f2b4e2 100644 --- a/docs/svg/microsoft.connectedcache/cachenodes.svg +++ b/docs/svg/microsoft.connectedcache/cachenodes.svg @@ -1,17 +1,2 @@ - - - - - - - - - - - - - - - - + diff --git a/docs/svg/microsoft.connectedcache/enterprisecustomers.svg b/docs/svg/microsoft.connectedcache/enterprisecustomers.svg index ba4287688..9d6f2b4e2 100644 --- a/docs/svg/microsoft.connectedcache/enterprisecustomers.svg +++ b/docs/svg/microsoft.connectedcache/enterprisecustomers.svg @@ -1,17 +1,2 @@ - - - - - - - - - - - - - - - - + diff --git a/docs/svg/microsoft.connectedcache/enterprisemcccustomers.svg b/docs/svg/microsoft.connectedcache/enterprisemcccustomers.svg index d97a40077..8a3660f86 100644 --- a/docs/svg/microsoft.connectedcache/enterprisemcccustomers.svg +++ b/docs/svg/microsoft.connectedcache/enterprisemcccustomers.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.connectedvmwarevsphere/vcenters.svg b/docs/svg/microsoft.connectedvmwarevsphere/vcenters.svg index b60e1f8e5..50fd21760 100644 --- a/docs/svg/microsoft.connectedvmwarevsphere/vcenters.svg +++ b/docs/svg/microsoft.connectedvmwarevsphere/vcenters.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.connectedvmwarevsphere/virtualmachines.svg b/docs/svg/microsoft.connectedvmwarevsphere/virtualmachines.svg index c3b432737..8225c53da 100644 --- a/docs/svg/microsoft.connectedvmwarevsphere/virtualmachines.svg +++ b/docs/svg/microsoft.connectedvmwarevsphere/virtualmachines.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.connectedvmwarevsphere/virtualmachines/providers/guestconfigurationassignments.svg b/docs/svg/microsoft.connectedvmwarevsphere/virtualmachines/providers/guestconfigurationassignments.svg index a299b7523..a81d07369 100644 --- a/docs/svg/microsoft.connectedvmwarevsphere/virtualmachines/providers/guestconfigurationassignments.svg +++ b/docs/svg/microsoft.connectedvmwarevsphere/virtualmachines/providers/guestconfigurationassignments.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.containerinstance/containergroups.svg b/docs/svg/microsoft.containerinstance/containergroups.svg index 0c5246f01..a9015eb3f 100644 --- a/docs/svg/microsoft.containerinstance/containergroups.svg +++ b/docs/svg/microsoft.containerinstance/containergroups.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.containerregistry/registries.svg b/docs/svg/microsoft.containerregistry/registries.svg index 973e3b0b3..c79d17356 100644 --- a/docs/svg/microsoft.containerregistry/registries.svg +++ b/docs/svg/microsoft.containerregistry/registries.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.containerservice/fleets.svg b/docs/svg/microsoft.containerservice/fleets.svg index c59bee05e..cd981ce31 100644 --- a/docs/svg/microsoft.containerservice/fleets.svg +++ b/docs/svg/microsoft.containerservice/fleets.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.containerservice/managedclusters.svg b/docs/svg/microsoft.containerservice/managedclusters.svg index 3f9085ffd..18ac5317a 100644 --- a/docs/svg/microsoft.containerservice/managedclusters.svg +++ b/docs/svg/microsoft.containerservice/managedclusters.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions.svg b/docs/svg/microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions.svg index 8da4ac77b..1028d8277 100644 --- a/docs/svg/microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions.svg +++ b/docs/svg/microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations.svg b/docs/svg/microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations.svg index 15a161a40..49d3787fe 100644 --- a/docs/svg/microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations.svg +++ b/docs/svg/microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces.svg b/docs/svg/microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces.svg index 1136ce9f1..a126f092d 100644 --- a/docs/svg/microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces.svg +++ b/docs/svg/microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.dashboard/dashboards.svg b/docs/svg/microsoft.dashboard/dashboards.svg new file mode 100644 index 000000000..ba4287688 --- /dev/null +++ b/docs/svg/microsoft.dashboard/dashboards.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/docs/svg/microsoft.dashboard/grafana.svg b/docs/svg/microsoft.dashboard/grafana.svg index 2bf23c9e3..bdfbdd5c5 100644 --- a/docs/svg/microsoft.dashboard/grafana.svg +++ b/docs/svg/microsoft.dashboard/grafana.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.databasefleetmanager/fleets.svg b/docs/svg/microsoft.databasefleetmanager/fleets.svg index 7fd304530..ee307fb5c 100644 --- a/docs/svg/microsoft.databasefleetmanager/fleets.svg +++ b/docs/svg/microsoft.databasefleetmanager/fleets.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.databasefleetmanager/fleets/fleetspaces.svg b/docs/svg/microsoft.databasefleetmanager/fleets/fleetspaces.svg index a33dfb9fd..ee307fb5c 100644 --- a/docs/svg/microsoft.databasefleetmanager/fleets/fleetspaces.svg +++ b/docs/svg/microsoft.databasefleetmanager/fleets/fleetspaces.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.databasefleetmanager/fleets/fleetspaces/databases.svg b/docs/svg/microsoft.databasefleetmanager/fleets/fleetspaces/databases.svg index 849a181ab..2f2a97915 100644 --- a/docs/svg/microsoft.databasefleetmanager/fleets/fleetspaces/databases.svg +++ b/docs/svg/microsoft.databasefleetmanager/fleets/fleetspaces/databases.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.databasefleetmanager/fleets/tiers.svg b/docs/svg/microsoft.databasefleetmanager/fleets/tiers.svg index 09e3097ac..196223819 100644 --- a/docs/svg/microsoft.databasefleetmanager/fleets/tiers.svg +++ b/docs/svg/microsoft.databasefleetmanager/fleets/tiers.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.databasewatcher/watchers.svg b/docs/svg/microsoft.databasewatcher/watchers.svg index 563fa4697..54d2c3c05 100644 --- a/docs/svg/microsoft.databasewatcher/watchers.svg +++ b/docs/svg/microsoft.databasewatcher/watchers.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.databox/jobs.svg b/docs/svg/microsoft.databox/jobs.svg index 6113946d7..cfbc6fb34 100644 --- a/docs/svg/microsoft.databox/jobs.svg +++ b/docs/svg/microsoft.databox/jobs.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.databoxedge/databoxedgedevices.svg b/docs/svg/microsoft.databoxedge/databoxedgedevices.svg index 4ec3b4c7c..2e0e8779a 100644 --- a/docs/svg/microsoft.databoxedge/databoxedgedevices.svg +++ b/docs/svg/microsoft.databoxedge/databoxedgedevices.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.datadog/monitors.svg b/docs/svg/microsoft.datadog/monitors.svg index ee785e441..ff54f33ec 100644 --- a/docs/svg/microsoft.datadog/monitors.svg +++ b/docs/svg/microsoft.datadog/monitors.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.datafactory/datafactories.svg b/docs/svg/microsoft.datafactory/datafactories.svg index dbc84111d..0a60c2cbe 100644 --- a/docs/svg/microsoft.datafactory/datafactories.svg +++ b/docs/svg/microsoft.datafactory/datafactories.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.datafactory/factories.svg b/docs/svg/microsoft.datafactory/factories.svg index 00d446e01..09e72efa8 100644 --- a/docs/svg/microsoft.datafactory/factories.svg +++ b/docs/svg/microsoft.datafactory/factories.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.datalakestore/accounts.svg b/docs/svg/microsoft.datalakestore/accounts.svg index a9401fc9a..e22a0dc3e 100644 --- a/docs/svg/microsoft.datalakestore/accounts.svg +++ b/docs/svg/microsoft.datalakestore/accounts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.datamigration/services.svg b/docs/svg/microsoft.datamigration/services.svg index 68d093aa3..ada91edae 100644 --- a/docs/svg/microsoft.datamigration/services.svg +++ b/docs/svg/microsoft.datamigration/services.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.datamigration/sqlmigrationservices.svg b/docs/svg/microsoft.datamigration/sqlmigrationservices.svg index 517fe43e1..6d331f77f 100644 --- a/docs/svg/microsoft.datamigration/sqlmigrationservices.svg +++ b/docs/svg/microsoft.datamigration/sqlmigrationservices.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.dataprotection/backupvaults.svg b/docs/svg/microsoft.dataprotection/backupvaults.svg index 179e56e3b..8f5e2c09c 100644 --- a/docs/svg/microsoft.dataprotection/backupvaults.svg +++ b/docs/svg/microsoft.dataprotection/backupvaults.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.dataprotection/resourceguards.svg b/docs/svg/microsoft.dataprotection/resourceguards.svg index 573947da4..e5fe9d7fa 100644 --- a/docs/svg/microsoft.dataprotection/resourceguards.svg +++ b/docs/svg/microsoft.dataprotection/resourceguards.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.datareplication/replicationvaults/privateendpointconnectionproxies.svg b/docs/svg/microsoft.datareplication/replicationvaults/privateendpointconnectionproxies.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.datareplication/replicationvaults/privateendpointconnectionproxies.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.datareplication/replicationvaults/privateendpointconnections.svg b/docs/svg/microsoft.datareplication/replicationvaults/privateendpointconnections.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.datareplication/replicationvaults/privateendpointconnections.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.datareplication/replicationvaults/privatelinkresources.svg b/docs/svg/microsoft.datareplication/replicationvaults/privatelinkresources.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.datareplication/replicationvaults/privatelinkresources.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.datashare/accounts.svg b/docs/svg/microsoft.datashare/accounts.svg index ca3bbe69f..c8bac533a 100644 --- a/docs/svg/microsoft.datashare/accounts.svg +++ b/docs/svg/microsoft.datashare/accounts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.dbformariadb/servers.svg b/docs/svg/microsoft.dbformariadb/servers.svg index 3c754a84e..c086a4191 100644 --- a/docs/svg/microsoft.dbformariadb/servers.svg +++ b/docs/svg/microsoft.dbformariadb/servers.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.dbformysql/flexibleservers.svg b/docs/svg/microsoft.dbformysql/flexibleservers.svg index 1e76481d5..7f97dc4aa 100644 --- a/docs/svg/microsoft.dbformysql/flexibleservers.svg +++ b/docs/svg/microsoft.dbformysql/flexibleservers.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.dbformysql/servers.svg b/docs/svg/microsoft.dbformysql/servers.svg index 77c3f7068..5f24cc453 100644 --- a/docs/svg/microsoft.dbformysql/servers.svg +++ b/docs/svg/microsoft.dbformysql/servers.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.dbforpostgresql/flexibleservers.svg b/docs/svg/microsoft.dbforpostgresql/flexibleservers.svg index f90d4409c..428637095 100644 --- a/docs/svg/microsoft.dbforpostgresql/flexibleservers.svg +++ b/docs/svg/microsoft.dbforpostgresql/flexibleservers.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.dbforpostgresql/servergroupsv2.svg b/docs/svg/microsoft.dbforpostgresql/servergroupsv2.svg index 8938edcf8..fa8d06108 100644 --- a/docs/svg/microsoft.dbforpostgresql/servergroupsv2.svg +++ b/docs/svg/microsoft.dbforpostgresql/servergroupsv2.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.dbforpostgresql/servers.svg b/docs/svg/microsoft.dbforpostgresql/servers.svg index 1866ca566..0001cc8ea 100644 --- a/docs/svg/microsoft.dbforpostgresql/servers.svg +++ b/docs/svg/microsoft.dbforpostgresql/servers.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.deploymentmanager/rollouts.svg b/docs/svg/microsoft.deploymentmanager/rollouts.svg index d04e358de..b00d66d72 100644 --- a/docs/svg/microsoft.deploymentmanager/rollouts.svg +++ b/docs/svg/microsoft.deploymentmanager/rollouts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.desktopvirtualization/appattachpackages.svg b/docs/svg/microsoft.desktopvirtualization/appattachpackages.svg index 47485c26b..01f986c2c 100644 --- a/docs/svg/microsoft.desktopvirtualization/appattachpackages.svg +++ b/docs/svg/microsoft.desktopvirtualization/appattachpackages.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.desktopvirtualization/applicationgroups.svg b/docs/svg/microsoft.desktopvirtualization/applicationgroups.svg index 932d3b913..5fa533c98 100644 --- a/docs/svg/microsoft.desktopvirtualization/applicationgroups.svg +++ b/docs/svg/microsoft.desktopvirtualization/applicationgroups.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.desktopvirtualization/hostpools.svg b/docs/svg/microsoft.desktopvirtualization/hostpools.svg index 127ddce98..7c894395f 100644 --- a/docs/svg/microsoft.desktopvirtualization/hostpools.svg +++ b/docs/svg/microsoft.desktopvirtualization/hostpools.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.desktopvirtualization/scalingplans.svg b/docs/svg/microsoft.desktopvirtualization/scalingplans.svg index 199d81629..2abd82cb9 100644 --- a/docs/svg/microsoft.desktopvirtualization/scalingplans.svg +++ b/docs/svg/microsoft.desktopvirtualization/scalingplans.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.desktopvirtualization/workspaces.svg b/docs/svg/microsoft.desktopvirtualization/workspaces.svg index c35cab99d..8cf8f45c7 100644 --- a/docs/svg/microsoft.desktopvirtualization/workspaces.svg +++ b/docs/svg/microsoft.desktopvirtualization/workspaces.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.devcenter/devcenters.svg b/docs/svg/microsoft.devcenter/devcenters.svg index ea74a4f25..b89aea545 100644 --- a/docs/svg/microsoft.devcenter/devcenters.svg +++ b/docs/svg/microsoft.devcenter/devcenters.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.devcenter/devcenters/devboxdefinitions.svg b/docs/svg/microsoft.devcenter/devcenters/devboxdefinitions.svg index f4a9a27a5..21ed01e63 100644 --- a/docs/svg/microsoft.devcenter/devcenters/devboxdefinitions.svg +++ b/docs/svg/microsoft.devcenter/devcenters/devboxdefinitions.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.devcenter/networkconnections.svg b/docs/svg/microsoft.devcenter/networkconnections.svg index 86de2e4c5..831f265fc 100644 --- a/docs/svg/microsoft.devcenter/networkconnections.svg +++ b/docs/svg/microsoft.devcenter/networkconnections.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.devcenter/plans.svg b/docs/svg/microsoft.devcenter/plans.svg index bf6dbd78b..d352b6e8a 100644 --- a/docs/svg/microsoft.devcenter/plans.svg +++ b/docs/svg/microsoft.devcenter/plans.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.devhub/iacprofiles.svg b/docs/svg/microsoft.devhub/iacprofiles.svg index a72811c14..1296be641 100644 --- a/docs/svg/microsoft.devhub/iacprofiles.svg +++ b/docs/svg/microsoft.devhub/iacprofiles.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.devhub/templates.svg b/docs/svg/microsoft.devhub/templates.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.devhub/templates.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.devhub/templates/versions.svg b/docs/svg/microsoft.devhub/templates/versions.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.devhub/templates/versions.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.deviceregistry/assetendpointprofiles.svg b/docs/svg/microsoft.deviceregistry/assetendpointprofiles.svg index 9d6f2b4e2..0b3a00265 100644 --- a/docs/svg/microsoft.deviceregistry/assetendpointprofiles.svg +++ b/docs/svg/microsoft.deviceregistry/assetendpointprofiles.svg @@ -1,2 +1 @@ - - + diff --git a/docs/svg/microsoft.deviceregistry/assets.svg b/docs/svg/microsoft.deviceregistry/assets.svg index 572923ecb..0b3a00265 100644 --- a/docs/svg/microsoft.deviceregistry/assets.svg +++ b/docs/svg/microsoft.deviceregistry/assets.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.deviceregistry/devices.svg b/docs/svg/microsoft.deviceregistry/devices.svg index 1bf204b2e..a705ae333 100644 --- a/docs/svg/microsoft.deviceregistry/devices.svg +++ b/docs/svg/microsoft.deviceregistry/devices.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.deviceregistry/namespaces.svg b/docs/svg/microsoft.deviceregistry/namespaces.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.deviceregistry/namespaces.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.deviceregistry/namespaces/assetendpointprofiles.svg b/docs/svg/microsoft.deviceregistry/namespaces/assetendpointprofiles.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.deviceregistry/namespaces/assetendpointprofiles.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.deviceregistry/namespaces/assets.svg b/docs/svg/microsoft.deviceregistry/namespaces/assets.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.deviceregistry/namespaces/assets.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.deviceregistry/namespaces/devices.svg b/docs/svg/microsoft.deviceregistry/namespaces/devices.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.deviceregistry/namespaces/devices.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.deviceregistry/namespaces/discoveredassetendpointprofiles.svg b/docs/svg/microsoft.deviceregistry/namespaces/discoveredassetendpointprofiles.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.deviceregistry/namespaces/discoveredassetendpointprofiles.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.deviceregistry/namespaces/discoveredassets.svg b/docs/svg/microsoft.deviceregistry/namespaces/discoveredassets.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.deviceregistry/namespaces/discoveredassets.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.deviceregistry/schemaregistries.svg b/docs/svg/microsoft.deviceregistry/schemaregistries.svg index 9d6f2b4e2..628b21cde 100644 --- a/docs/svg/microsoft.deviceregistry/schemaregistries.svg +++ b/docs/svg/microsoft.deviceregistry/schemaregistries.svg @@ -1,2 +1 @@ - - + diff --git a/docs/svg/microsoft.devices/iothubs.svg b/docs/svg/microsoft.devices/iothubs.svg index c0fe5442e..5b2e239cb 100644 --- a/docs/svg/microsoft.devices/iothubs.svg +++ b/docs/svg/microsoft.devices/iothubs.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.devices/provisioningservices.svg b/docs/svg/microsoft.devices/provisioningservices.svg index a6767a139..4aad17815 100644 --- a/docs/svg/microsoft.devices/provisioningservices.svg +++ b/docs/svg/microsoft.devices/provisioningservices.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.deviceupdate/accounts.svg b/docs/svg/microsoft.deviceupdate/accounts.svg index 1f43f61b1..9e420c923 100644 --- a/docs/svg/microsoft.deviceupdate/accounts.svg +++ b/docs/svg/microsoft.deviceupdate/accounts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.devtestlab/labs.svg b/docs/svg/microsoft.devtestlab/labs.svg index 045b90c68..a6dd4eb6f 100644 --- a/docs/svg/microsoft.devtestlab/labs.svg +++ b/docs/svg/microsoft.devtestlab/labs.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.devtestlab/labs/virtualmachines.svg b/docs/svg/microsoft.devtestlab/labs/virtualmachines.svg index 1c45e5fd4..7c12f4216 100644 --- a/docs/svg/microsoft.devtestlab/labs/virtualmachines.svg +++ b/docs/svg/microsoft.devtestlab/labs/virtualmachines.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.digitaltwins/digitaltwinsinstances.svg b/docs/svg/microsoft.digitaltwins/digitaltwinsinstances.svg index 0c759f99f..1ff28728d 100644 --- a/docs/svg/microsoft.digitaltwins/digitaltwinsinstances.svg +++ b/docs/svg/microsoft.digitaltwins/digitaltwinsinstances.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.documentdb/cassandraclusters.svg b/docs/svg/microsoft.documentdb/cassandraclusters.svg index a761dbfee..ee0f634e0 100644 --- a/docs/svg/microsoft.documentdb/cassandraclusters.svg +++ b/docs/svg/microsoft.documentdb/cassandraclusters.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.documentdb/databaseaccounts.svg b/docs/svg/microsoft.documentdb/databaseaccounts.svg index 0f1dcb4e8..7c95746f1 100644 --- a/docs/svg/microsoft.documentdb/databaseaccounts.svg +++ b/docs/svg/microsoft.documentdb/databaseaccounts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.documentdb/fleets.svg b/docs/svg/microsoft.documentdb/fleets.svg new file mode 100644 index 000000000..808bbd5b0 --- /dev/null +++ b/docs/svg/microsoft.documentdb/fleets.svg @@ -0,0 +1 @@ + diff --git a/docs/svg/microsoft.documentdb/mongoclusters.svg b/docs/svg/microsoft.documentdb/mongoclusters.svg index a6f312874..1062d28f4 100644 --- a/docs/svg/microsoft.documentdb/mongoclusters.svg +++ b/docs/svg/microsoft.documentdb/mongoclusters.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.durabletask/namespaces.svg b/docs/svg/microsoft.durabletask/namespaces.svg index 7cd3a009f..9d6f2b4e2 100644 --- a/docs/svg/microsoft.durabletask/namespaces.svg +++ b/docs/svg/microsoft.durabletask/namespaces.svg @@ -1 +1,2 @@ - + + diff --git a/docs/svg/microsoft.durabletask/schedulers.svg b/docs/svg/microsoft.durabletask/schedulers.svg index 37030441d..cdc7e1613 100644 --- a/docs/svg/microsoft.durabletask/schedulers.svg +++ b/docs/svg/microsoft.durabletask/schedulers.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.durabletask/schedulers/taskhubs.svg b/docs/svg/microsoft.durabletask/schedulers/taskhubs.svg index 37030441d..cdc7e1613 100644 --- a/docs/svg/microsoft.durabletask/schedulers/taskhubs.svg +++ b/docs/svg/microsoft.durabletask/schedulers/taskhubs.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.easm/workspaces.svg b/docs/svg/microsoft.easm/workspaces.svg index 0a2e6e1e8..eed3ce128 100644 --- a/docs/svg/microsoft.easm/workspaces.svg +++ b/docs/svg/microsoft.easm/workspaces.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.edge/configurations.svg b/docs/svg/microsoft.edge/configurations.svg index 562752939..8b3d85091 100644 --- a/docs/svg/microsoft.edge/configurations.svg +++ b/docs/svg/microsoft.edge/configurations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.edge/disconnectedoperations.svg b/docs/svg/microsoft.edge/disconnectedoperations.svg new file mode 100644 index 000000000..4987ba2e5 --- /dev/null +++ b/docs/svg/microsoft.edge/disconnectedoperations.svg @@ -0,0 +1 @@ + diff --git a/docs/svg/microsoft.edge/sites.svg b/docs/svg/microsoft.edge/sites.svg index 0edd4e17c..2bb01fc40 100644 --- a/docs/svg/microsoft.edge/sites.svg +++ b/docs/svg/microsoft.edge/sites.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.edgeorder/addresses.svg b/docs/svg/microsoft.edgeorder/addresses.svg index 5d908ccac..4216c37d5 100644 --- a/docs/svg/microsoft.edgeorder/addresses.svg +++ b/docs/svg/microsoft.edgeorder/addresses.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.edgeorder/bootstrapconfigurations.svg b/docs/svg/microsoft.edgeorder/bootstrapconfigurations.svg index a8510a78e..3a18de819 100644 --- a/docs/svg/microsoft.edgeorder/bootstrapconfigurations.svg +++ b/docs/svg/microsoft.edgeorder/bootstrapconfigurations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.edgeorder/orderitems.svg b/docs/svg/microsoft.edgeorder/orderitems.svg index fa2b7b253..3e64783b3 100644 --- a/docs/svg/microsoft.edgeorder/orderitems.svg +++ b/docs/svg/microsoft.edgeorder/orderitems.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.edgeorder/virtual_orderitems.svg b/docs/svg/microsoft.edgeorder/virtual_orderitems.svg index e6a45e1df..b3e7104e3 100644 --- a/docs/svg/microsoft.edgeorder/virtual_orderitems.svg +++ b/docs/svg/microsoft.edgeorder/virtual_orderitems.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.elasticsan/elasticsans.svg b/docs/svg/microsoft.elasticsan/elasticsans.svg index 32cc7517c..21c458ea1 100644 --- a/docs/svg/microsoft.elasticsan/elasticsans.svg +++ b/docs/svg/microsoft.elasticsan/elasticsans.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.eventgrid/domains.svg b/docs/svg/microsoft.eventgrid/domains.svg index b08cf3755..0f861524c 100644 --- a/docs/svg/microsoft.eventgrid/domains.svg +++ b/docs/svg/microsoft.eventgrid/domains.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.eventgrid/domains/topics.svg b/docs/svg/microsoft.eventgrid/domains/topics.svg index 607d01864..8bd94d5f2 100644 --- a/docs/svg/microsoft.eventgrid/domains/topics.svg +++ b/docs/svg/microsoft.eventgrid/domains/topics.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.eventgrid/namespaces.svg b/docs/svg/microsoft.eventgrid/namespaces.svg index e8f247fab..58b433cf8 100644 --- a/docs/svg/microsoft.eventgrid/namespaces.svg +++ b/docs/svg/microsoft.eventgrid/namespaces.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.eventgrid/namespaces/topics.svg b/docs/svg/microsoft.eventgrid/namespaces/topics.svg index 59eb4b35d..33ace4e2f 100644 --- a/docs/svg/microsoft.eventgrid/namespaces/topics.svg +++ b/docs/svg/microsoft.eventgrid/namespaces/topics.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.eventgrid/namespaces/topics/eventsubscriptions.svg b/docs/svg/microsoft.eventgrid/namespaces/topics/eventsubscriptions.svg index 27fa00af3..1d30b05f4 100644 --- a/docs/svg/microsoft.eventgrid/namespaces/topics/eventsubscriptions.svg +++ b/docs/svg/microsoft.eventgrid/namespaces/topics/eventsubscriptions.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.eventgrid/namespaces/topicspaces.svg b/docs/svg/microsoft.eventgrid/namespaces/topicspaces.svg index 56c5937b2..4e53b92d4 100644 --- a/docs/svg/microsoft.eventgrid/namespaces/topicspaces.svg +++ b/docs/svg/microsoft.eventgrid/namespaces/topicspaces.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.eventgrid/partnerconfigurations.svg b/docs/svg/microsoft.eventgrid/partnerconfigurations.svg index 39cc89d17..917239c95 100644 --- a/docs/svg/microsoft.eventgrid/partnerconfigurations.svg +++ b/docs/svg/microsoft.eventgrid/partnerconfigurations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.eventgrid/partnerdestinations.svg b/docs/svg/microsoft.eventgrid/partnerdestinations.svg index f48068d27..0ca5f6575 100644 --- a/docs/svg/microsoft.eventgrid/partnerdestinations.svg +++ b/docs/svg/microsoft.eventgrid/partnerdestinations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.eventgrid/partnernamespaces.svg b/docs/svg/microsoft.eventgrid/partnernamespaces.svg index b723072dd..c152d9415 100644 --- a/docs/svg/microsoft.eventgrid/partnernamespaces.svg +++ b/docs/svg/microsoft.eventgrid/partnernamespaces.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.eventgrid/partnernamespaces/channels.svg b/docs/svg/microsoft.eventgrid/partnernamespaces/channels.svg index 1752b6aa7..7eecbfee1 100644 --- a/docs/svg/microsoft.eventgrid/partnernamespaces/channels.svg +++ b/docs/svg/microsoft.eventgrid/partnernamespaces/channels.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.eventgrid/partnerregistrations.svg b/docs/svg/microsoft.eventgrid/partnerregistrations.svg index 6751ac90d..e236a19f8 100644 --- a/docs/svg/microsoft.eventgrid/partnerregistrations.svg +++ b/docs/svg/microsoft.eventgrid/partnerregistrations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.eventgrid/partnertopics.svg b/docs/svg/microsoft.eventgrid/partnertopics.svg index 0923c7829..f2858929e 100644 --- a/docs/svg/microsoft.eventgrid/partnertopics.svg +++ b/docs/svg/microsoft.eventgrid/partnertopics.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.eventgrid/systemtopics.svg b/docs/svg/microsoft.eventgrid/systemtopics.svg index 993b662b8..c04438f38 100644 --- a/docs/svg/microsoft.eventgrid/systemtopics.svg +++ b/docs/svg/microsoft.eventgrid/systemtopics.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.eventgrid/systemtopics/eventsubscriptions.svg b/docs/svg/microsoft.eventgrid/systemtopics/eventsubscriptions.svg index 7f710f7c1..e5986867f 100644 --- a/docs/svg/microsoft.eventgrid/systemtopics/eventsubscriptions.svg +++ b/docs/svg/microsoft.eventgrid/systemtopics/eventsubscriptions.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.eventgrid/topics.svg b/docs/svg/microsoft.eventgrid/topics.svg index 607d01864..8bd94d5f2 100644 --- a/docs/svg/microsoft.eventgrid/topics.svg +++ b/docs/svg/microsoft.eventgrid/topics.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.eventhub/clusters.svg b/docs/svg/microsoft.eventhub/clusters.svg index 1efe1c77e..b4b9efd9c 100644 --- a/docs/svg/microsoft.eventhub/clusters.svg +++ b/docs/svg/microsoft.eventhub/clusters.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.eventhub/namespaces.svg b/docs/svg/microsoft.eventhub/namespaces.svg index c0c8eac42..28e9d7190 100644 --- a/docs/svg/microsoft.eventhub/namespaces.svg +++ b/docs/svg/microsoft.eventhub/namespaces.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.eventhub/namespaces/eventhubs.svg b/docs/svg/microsoft.eventhub/namespaces/eventhubs.svg index c0c8eac42..28e9d7190 100644 --- a/docs/svg/microsoft.eventhub/namespaces/eventhubs.svg +++ b/docs/svg/microsoft.eventhub/namespaces/eventhubs.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.eventhub/namespaces/schemagroups.svg b/docs/svg/microsoft.eventhub/namespaces/schemagroups.svg index e6f2bad23..627ab7ecf 100644 --- a/docs/svg/microsoft.eventhub/namespaces/schemagroups.svg +++ b/docs/svg/microsoft.eventhub/namespaces/schemagroups.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.experimentation/experimentworkspaces.svg b/docs/svg/microsoft.experimentation/experimentworkspaces.svg index 111555f21..430ca0b9c 100644 --- a/docs/svg/microsoft.experimentation/experimentworkspaces.svg +++ b/docs/svg/microsoft.experimentation/experimentworkspaces.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.extendedlocation/customlocations.svg b/docs/svg/microsoft.extendedlocation/customlocations.svg index a695dc657..a6c8529ff 100644 --- a/docs/svg/microsoft.extendedlocation/customlocations.svg +++ b/docs/svg/microsoft.extendedlocation/customlocations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.fabric/capacities.svg b/docs/svg/microsoft.fabric/capacities.svg index 12e9dae3f..62377c481 100644 --- a/docs/svg/microsoft.fabric/capacities.svg +++ b/docs/svg/microsoft.fabric/capacities.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.features/featureprovidernamespaces/featureconfigurations.svg b/docs/svg/microsoft.features/featureprovidernamespaces/featureconfigurations.svg index b02d230e1..c7c20c929 100644 --- a/docs/svg/microsoft.features/featureprovidernamespaces/featureconfigurations.svg +++ b/docs/svg/microsoft.features/featureprovidernamespaces/featureconfigurations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.fileshares/fileshares.svg b/docs/svg/microsoft.fileshares/fileshares.svg index 147786717..abf689aac 100644 --- a/docs/svg/microsoft.fileshares/fileshares.svg +++ b/docs/svg/microsoft.fileshares/fileshares.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.gallery/myareas/galleryitems.svg b/docs/svg/microsoft.gallery/myareas/galleryitems.svg index 017c72990..bc41cb754 100644 --- a/docs/svg/microsoft.gallery/myareas/galleryitems.svg +++ b/docs/svg/microsoft.gallery/myareas/galleryitems.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.graph/azureadapplicationprototype.svg b/docs/svg/microsoft.graph/azureadapplicationprototype.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.graph/azureadapplicationprototype.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.hanaonazure/sapmonitors.svg b/docs/svg/microsoft.hanaonazure/sapmonitors.svg index c8a745de3..17259a879 100644 --- a/docs/svg/microsoft.hanaonazure/sapmonitors.svg +++ b/docs/svg/microsoft.hanaonazure/sapmonitors.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.hardwaresecuritymodules/cloudhsmclusters.svg b/docs/svg/microsoft.hardwaresecuritymodules/cloudhsmclusters.svg index 125cafa26..73b3dd44c 100644 --- a/docs/svg/microsoft.hardwaresecuritymodules/cloudhsmclusters.svg +++ b/docs/svg/microsoft.hardwaresecuritymodules/cloudhsmclusters.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.hdinsight/clusterpools.svg b/docs/svg/microsoft.hdinsight/clusterpools.svg index 0e347a2db..9d6f2b4e2 100644 --- a/docs/svg/microsoft.hdinsight/clusterpools.svg +++ b/docs/svg/microsoft.hdinsight/clusterpools.svg @@ -1 +1,2 @@ - + + diff --git a/docs/svg/microsoft.hdinsight/clusterpools/clusters.svg b/docs/svg/microsoft.hdinsight/clusterpools/clusters.svg index 86246b12e..9d6f2b4e2 100644 --- a/docs/svg/microsoft.hdinsight/clusterpools/clusters.svg +++ b/docs/svg/microsoft.hdinsight/clusterpools/clusters.svg @@ -1 +1,2 @@ - + + diff --git a/docs/svg/microsoft.hdinsight/clusterpools/clusters/instanceviews.svg b/docs/svg/microsoft.hdinsight/clusterpools/clusters/instanceviews.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.hdinsight/clusterpools/clusters/instanceviews.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.hdinsight/clusters.svg b/docs/svg/microsoft.hdinsight/clusters.svg index 3e3f556ab..b2dddd5f1 100644 --- a/docs/svg/microsoft.hdinsight/clusters.svg +++ b/docs/svg/microsoft.hdinsight/clusters.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.healthcareapis/services.svg b/docs/svg/microsoft.healthcareapis/services.svg index 4301deb98..7901467bb 100644 --- a/docs/svg/microsoft.healthcareapis/services.svg +++ b/docs/svg/microsoft.healthcareapis/services.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.healthcareapis/workspaces.svg b/docs/svg/microsoft.healthcareapis/workspaces.svg index 4301deb98..7901467bb 100644 --- a/docs/svg/microsoft.healthcareapis/workspaces.svg +++ b/docs/svg/microsoft.healthcareapis/workspaces.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.healthcareapis/workspaces/dicomservices.svg b/docs/svg/microsoft.healthcareapis/workspaces/dicomservices.svg index 48a8749a2..25b975d48 100644 --- a/docs/svg/microsoft.healthcareapis/workspaces/dicomservices.svg +++ b/docs/svg/microsoft.healthcareapis/workspaces/dicomservices.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.healthcareapis/workspaces/fhirservices.svg b/docs/svg/microsoft.healthcareapis/workspaces/fhirservices.svg index 8f217d374..70e7ad88b 100644 --- a/docs/svg/microsoft.healthcareapis/workspaces/fhirservices.svg +++ b/docs/svg/microsoft.healthcareapis/workspaces/fhirservices.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.healthcareapis/workspaces/iotconnectors.svg b/docs/svg/microsoft.healthcareapis/workspaces/iotconnectors.svg index 6f6a70e7c..8d2aa4914 100644 --- a/docs/svg/microsoft.healthcareapis/workspaces/iotconnectors.svg +++ b/docs/svg/microsoft.healthcareapis/workspaces/iotconnectors.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.healthdataaiservices/deidservices.svg b/docs/svg/microsoft.healthdataaiservices/deidservices.svg index 9395884ec..12c7cea17 100644 --- a/docs/svg/microsoft.healthdataaiservices/deidservices.svg +++ b/docs/svg/microsoft.healthdataaiservices/deidservices.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.healthmodel/healthmodels.svg b/docs/svg/microsoft.healthmodel/healthmodels.svg index 90b6d9d1e..1eb2cb248 100644 --- a/docs/svg/microsoft.healthmodel/healthmodels.svg +++ b/docs/svg/microsoft.healthmodel/healthmodels.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.healthplatform/accounts.svg b/docs/svg/microsoft.healthplatform/accounts.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.healthplatform/accounts.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.hybridcompute/arcserverwithwac.svg b/docs/svg/microsoft.hybridcompute/arcserverwithwac.svg index aa080f394..07aa0402a 100644 --- a/docs/svg/microsoft.hybridcompute/arcserverwithwac.svg +++ b/docs/svg/microsoft.hybridcompute/arcserverwithwac.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.hybridcompute/gateways.svg b/docs/svg/microsoft.hybridcompute/gateways.svg index 6f23bd33f..eae9c7e13 100644 --- a/docs/svg/microsoft.hybridcompute/gateways.svg +++ b/docs/svg/microsoft.hybridcompute/gateways.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.hybridcompute/licenses.svg b/docs/svg/microsoft.hybridcompute/licenses.svg index fed0b8752..c55c204fe 100644 --- a/docs/svg/microsoft.hybridcompute/licenses.svg +++ b/docs/svg/microsoft.hybridcompute/licenses.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.hybridcompute/machines.svg b/docs/svg/microsoft.hybridcompute/machines.svg index a75b58a50..07aa0402a 100644 --- a/docs/svg/microsoft.hybridcompute/machines.svg +++ b/docs/svg/microsoft.hybridcompute/machines.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.hybridcompute/machines/microsoft.connectedvmwarevsphere/virtualmachineinstances.svg b/docs/svg/microsoft.hybridcompute/machines/microsoft.connectedvmwarevsphere/virtualmachineinstances.svg index 5fc08952a..8225c53da 100644 --- a/docs/svg/microsoft.hybridcompute/machines/microsoft.connectedvmwarevsphere/virtualmachineinstances.svg +++ b/docs/svg/microsoft.hybridcompute/machines/microsoft.connectedvmwarevsphere/virtualmachineinstances.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.hybridcompute/machines/providers/guestconfigurationassignments.svg b/docs/svg/microsoft.hybridcompute/machines/providers/guestconfigurationassignments.svg index a299b7523..a81d07369 100644 --- a/docs/svg/microsoft.hybridcompute/machines/providers/guestconfigurationassignments.svg +++ b/docs/svg/microsoft.hybridcompute/machines/providers/guestconfigurationassignments.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.hybridcompute/machinesesu.svg b/docs/svg/microsoft.hybridcompute/machinesesu.svg index 5376c5319..07aa0402a 100644 --- a/docs/svg/microsoft.hybridcompute/machinesesu.svg +++ b/docs/svg/microsoft.hybridcompute/machinesesu.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.hybridcompute/machinespaygo.svg b/docs/svg/microsoft.hybridcompute/machinespaygo.svg index c1f852ea0..07aa0402a 100644 --- a/docs/svg/microsoft.hybridcompute/machinespaygo.svg +++ b/docs/svg/microsoft.hybridcompute/machinespaygo.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.hybridcompute/machinessoftwareassurance.svg b/docs/svg/microsoft.hybridcompute/machinessoftwareassurance.svg index 4acd906d0..07aa0402a 100644 --- a/docs/svg/microsoft.hybridcompute/machinessoftwareassurance.svg +++ b/docs/svg/microsoft.hybridcompute/machinessoftwareassurance.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.hybridcompute/machinessovereign.svg b/docs/svg/microsoft.hybridcompute/machinessovereign.svg index 46647f4c6..07aa0402a 100644 --- a/docs/svg/microsoft.hybridcompute/machinessovereign.svg +++ b/docs/svg/microsoft.hybridcompute/machinessovereign.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.hybridcompute/privatelinkscopes.svg b/docs/svg/microsoft.hybridcompute/privatelinkscopes.svg index fe756998c..822d990dd 100644 --- a/docs/svg/microsoft.hybridcompute/privatelinkscopes.svg +++ b/docs/svg/microsoft.hybridcompute/privatelinkscopes.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.hybridconnectivity/publiccloudconnectors.svg b/docs/svg/microsoft.hybridconnectivity/publiccloudconnectors.svg index bac9126b6..f66411405 100644 --- a/docs/svg/microsoft.hybridconnectivity/publiccloudconnectors.svg +++ b/docs/svg/microsoft.hybridconnectivity/publiccloudconnectors.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.hybridcontainerservice/provisionedclusters.svg b/docs/svg/microsoft.hybridcontainerservice/provisionedclusters.svg index 29d6f59a3..a94eb6dc7 100644 --- a/docs/svg/microsoft.hybridcontainerservice/provisionedclusters.svg +++ b/docs/svg/microsoft.hybridcontainerservice/provisionedclusters.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.hybridnetwork/devices.svg b/docs/svg/microsoft.hybridnetwork/devices.svg index 1ee0702c2..848ad4ee8 100644 --- a/docs/svg/microsoft.hybridnetwork/devices.svg +++ b/docs/svg/microsoft.hybridnetwork/devices.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.hybridnetwork/networkfunctions.svg b/docs/svg/microsoft.hybridnetwork/networkfunctions.svg index b5c16873e..cd9ef7a2d 100644 --- a/docs/svg/microsoft.hybridnetwork/networkfunctions.svg +++ b/docs/svg/microsoft.hybridnetwork/networkfunctions.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.hybridnetwork/vendors.svg b/docs/svg/microsoft.hybridnetwork/vendors.svg index d8b9fd5b8..1aa4a195e 100644 --- a/docs/svg/microsoft.hybridnetwork/vendors.svg +++ b/docs/svg/microsoft.hybridnetwork/vendors.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.insights/actiongroups.svg b/docs/svg/microsoft.insights/actiongroups.svg index 5eb8b1f33..702ca60ab 100644 --- a/docs/svg/microsoft.insights/actiongroups.svg +++ b/docs/svg/microsoft.insights/actiongroups.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.insights/datacollectionendpoints.svg b/docs/svg/microsoft.insights/datacollectionendpoints.svg index cb9afc5ba..c495853d6 100644 --- a/docs/svg/microsoft.insights/datacollectionendpoints.svg +++ b/docs/svg/microsoft.insights/datacollectionendpoints.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.insights/datacollectionrules.svg b/docs/svg/microsoft.insights/datacollectionrules.svg index d2245c1ea..af8bd6dd4 100644 --- a/docs/svg/microsoft.insights/datacollectionrules.svg +++ b/docs/svg/microsoft.insights/datacollectionrules.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.insights/privatelinkscopes.svg b/docs/svg/microsoft.insights/privatelinkscopes.svg index 6edac576a..754d85f44 100644 --- a/docs/svg/microsoft.insights/privatelinkscopes.svg +++ b/docs/svg/microsoft.insights/privatelinkscopes.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.insights/workbooks.svg b/docs/svg/microsoft.insights/workbooks.svg index 909788ad8..9fa721b29 100644 --- a/docs/svg/microsoft.insights/workbooks.svg +++ b/docs/svg/microsoft.insights/workbooks.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.insights/workbooktemplates.svg b/docs/svg/microsoft.insights/workbooktemplates.svg index 1be3696ba..3e1125030 100644 --- a/docs/svg/microsoft.insights/workbooktemplates.svg +++ b/docs/svg/microsoft.insights/workbooktemplates.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.integrationspaces/spaces.svg b/docs/svg/microsoft.integrationspaces/spaces.svg index fc5dc3ffb..8a96dd3fb 100644 --- a/docs/svg/microsoft.integrationspaces/spaces.svg +++ b/docs/svg/microsoft.integrationspaces/spaces.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.iotfirmwaredefense/workspaces.svg b/docs/svg/microsoft.iotfirmwaredefense/workspaces.svg index 9d6f2b4e2..6d878ff8a 100644 --- a/docs/svg/microsoft.iotfirmwaredefense/workspaces.svg +++ b/docs/svg/microsoft.iotfirmwaredefense/workspaces.svg @@ -1,2 +1 @@ - - + diff --git a/docs/svg/microsoft.iotoperations/instances.svg b/docs/svg/microsoft.iotoperations/instances.svg index 6fde3b179..e1ba50b2c 100644 --- a/docs/svg/microsoft.iotoperations/instances.svg +++ b/docs/svg/microsoft.iotoperations/instances.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.iotoperationsmq/mq.svg b/docs/svg/microsoft.iotoperationsmq/mq.svg index ba4287688..9d6f2b4e2 100644 --- a/docs/svg/microsoft.iotoperationsmq/mq.svg +++ b/docs/svg/microsoft.iotoperationsmq/mq.svg @@ -1,17 +1,2 @@ - - - - - - - - - - - - - - - - + diff --git a/docs/svg/microsoft.iotoperationsmq/mq/broker.svg b/docs/svg/microsoft.iotoperationsmq/mq/broker.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.iotoperationsmq/mq/broker.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.iotoperationsmq/mq/broker/authentication.svg b/docs/svg/microsoft.iotoperationsmq/mq/broker/authentication.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.iotoperationsmq/mq/broker/authentication.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.iotoperationsmq/mq/broker/authorization.svg b/docs/svg/microsoft.iotoperationsmq/mq/broker/authorization.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.iotoperationsmq/mq/broker/authorization.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.iotoperationsmq/mq/broker/listener.svg b/docs/svg/microsoft.iotoperationsmq/mq/broker/listener.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.iotoperationsmq/mq/broker/listener.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.iotoperationsmq/mq/datalakeconnector.svg b/docs/svg/microsoft.iotoperationsmq/mq/datalakeconnector.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.iotoperationsmq/mq/datalakeconnector.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.iotoperationsmq/mq/datalakeconnector/topicmap.svg b/docs/svg/microsoft.iotoperationsmq/mq/datalakeconnector/topicmap.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.iotoperationsmq/mq/datalakeconnector/topicmap.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.iotoperationsmq/mq/diagnosticservice.svg b/docs/svg/microsoft.iotoperationsmq/mq/diagnosticservice.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.iotoperationsmq/mq/diagnosticservice.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.iotoperationsmq/mq/kafkaconnector.svg b/docs/svg/microsoft.iotoperationsmq/mq/kafkaconnector.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.iotoperationsmq/mq/kafkaconnector.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.iotoperationsmq/mq/kafkaconnector/topicmap.svg b/docs/svg/microsoft.iotoperationsmq/mq/kafkaconnector/topicmap.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.iotoperationsmq/mq/kafkaconnector/topicmap.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.iotoperationsmq/mq/mqttbridgeconnector.svg b/docs/svg/microsoft.iotoperationsmq/mq/mqttbridgeconnector.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.iotoperationsmq/mq/mqttbridgeconnector.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.iotoperationsmq/mq/mqttbridgeconnector/topicmap.svg b/docs/svg/microsoft.iotoperationsmq/mq/mqttbridgeconnector/topicmap.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.iotoperationsmq/mq/mqttbridgeconnector/topicmap.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.keyvault/managedhsms.svg b/docs/svg/microsoft.keyvault/managedhsms.svg index 0b2dabd61..dccb7f5a0 100644 --- a/docs/svg/microsoft.keyvault/managedhsms.svg +++ b/docs/svg/microsoft.keyvault/managedhsms.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.keyvault/vaults.svg b/docs/svg/microsoft.keyvault/vaults.svg index d8bdac0b4..6774a297a 100644 --- a/docs/svg/microsoft.keyvault/vaults.svg +++ b/docs/svg/microsoft.keyvault/vaults.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.kubernetes/connectedclusters.svg b/docs/svg/microsoft.kubernetes/connectedclusters.svg index 5df1934ca..ba4287688 100644 --- a/docs/svg/microsoft.kubernetes/connectedclusters.svg +++ b/docs/svg/microsoft.kubernetes/connectedclusters.svg @@ -1 +1,17 @@ - + + + + + + + + + + + + + + + + + diff --git a/docs/svg/microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations.svg b/docs/svg/microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations.svg index 7f5df3334..49d3787fe 100644 --- a/docs/svg/microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations.svg +++ b/docs/svg/microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces.svg b/docs/svg/microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces.svg index db8dddbfe..c044c2594 100644 --- a/docs/svg/microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces.svg +++ b/docs/svg/microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.kubernetesconfiguration/extensions.svg b/docs/svg/microsoft.kubernetesconfiguration/extensions.svg index 4e1049129..1028d8277 100644 --- a/docs/svg/microsoft.kubernetesconfiguration/extensions.svg +++ b/docs/svg/microsoft.kubernetesconfiguration/extensions.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.kusto/clusters/databases.svg b/docs/svg/microsoft.kusto/clusters/databases.svg index 76d711a28..37b4f2479 100644 --- a/docs/svg/microsoft.kusto/clusters/databases.svg +++ b/docs/svg/microsoft.kusto/clusters/databases.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.labservices/labaccounts.svg b/docs/svg/microsoft.labservices/labaccounts.svg index 51d71d8ff..c77927e3a 100644 --- a/docs/svg/microsoft.labservices/labaccounts.svg +++ b/docs/svg/microsoft.labservices/labaccounts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.labservices/labaccounts/labs.svg b/docs/svg/microsoft.labservices/labaccounts/labs.svg index d72f9288f..df4e240e0 100644 --- a/docs/svg/microsoft.labservices/labaccounts/labs.svg +++ b/docs/svg/microsoft.labservices/labaccounts/labs.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.labservices/labplans.svg b/docs/svg/microsoft.labservices/labplans.svg index c10fd99cf..326e706fc 100644 --- a/docs/svg/microsoft.labservices/labplans.svg +++ b/docs/svg/microsoft.labservices/labplans.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.labservices/labs.svg b/docs/svg/microsoft.labservices/labs.svg index 5724aaac9..2c1a943e8 100644 --- a/docs/svg/microsoft.labservices/labs.svg +++ b/docs/svg/microsoft.labservices/labs.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.liftrpilot/organizations.svg b/docs/svg/microsoft.liftrpilot/organizations.svg index 9d6f2b4e2..55a4086b4 100644 --- a/docs/svg/microsoft.liftrpilot/organizations.svg +++ b/docs/svg/microsoft.liftrpilot/organizations.svg @@ -1,2 +1,7 @@ - + + + + + + diff --git a/docs/svg/microsoft.loadtestservice/loadtests.svg b/docs/svg/microsoft.loadtestservice/loadtests.svg index 3c11b05d3..78278d8ff 100644 --- a/docs/svg/microsoft.loadtestservice/loadtests.svg +++ b/docs/svg/microsoft.loadtestservice/loadtests.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.logic/businessprocesses.svg b/docs/svg/microsoft.logic/businessprocesses.svg index 3a14d9e3c..937a0038d 100644 --- a/docs/svg/microsoft.logic/businessprocesses.svg +++ b/docs/svg/microsoft.logic/businessprocesses.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.logic/integrationaccounts.svg b/docs/svg/microsoft.logic/integrationaccounts.svg index 8a1a26037..756768d65 100644 --- a/docs/svg/microsoft.logic/integrationaccounts.svg +++ b/docs/svg/microsoft.logic/integrationaccounts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.logic/integrationserviceenvironments.svg b/docs/svg/microsoft.logic/integrationserviceenvironments.svg index 10aa60975..9d6f2b4e2 100644 --- a/docs/svg/microsoft.logic/integrationserviceenvironments.svg +++ b/docs/svg/microsoft.logic/integrationserviceenvironments.svg @@ -1 +1,2 @@ - + + diff --git a/docs/svg/microsoft.logic/integrationserviceenvironments/health.svg b/docs/svg/microsoft.logic/integrationserviceenvironments/health.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.logic/integrationserviceenvironments/health.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.logic/integrationserviceenvironments/managedapis.svg b/docs/svg/microsoft.logic/integrationserviceenvironments/managedapis.svg index 11f3ac73d..2a171d2a4 100644 --- a/docs/svg/microsoft.logic/integrationserviceenvironments/managedapis.svg +++ b/docs/svg/microsoft.logic/integrationserviceenvironments/managedapis.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.logic/workflows.svg b/docs/svg/microsoft.logic/workflows.svg index fbcd81545..09b66743e 100644 --- a/docs/svg/microsoft.logic/workflows.svg +++ b/docs/svg/microsoft.logic/workflows.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.machinelearningservices/aistudio.svg b/docs/svg/microsoft.machinelearningservices/aistudio.svg index f6a1dd630..5d62a85c0 100644 --- a/docs/svg/microsoft.machinelearningservices/aistudio.svg +++ b/docs/svg/microsoft.machinelearningservices/aistudio.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.machinelearningservices/registries.svg b/docs/svg/microsoft.machinelearningservices/registries.svg index 850ad31a8..e0f6da38c 100644 --- a/docs/svg/microsoft.machinelearningservices/registries.svg +++ b/docs/svg/microsoft.machinelearningservices/registries.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.machinelearningservices/workspaces.svg b/docs/svg/microsoft.machinelearningservices/workspaces.svg index 850ad31a8..e0f6da38c 100644 --- a/docs/svg/microsoft.machinelearningservices/workspaces.svg +++ b/docs/svg/microsoft.machinelearningservices/workspaces.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.machinelearningservices/workspaces/onlineendpoints.svg b/docs/svg/microsoft.machinelearningservices/workspaces/onlineendpoints.svg index 850ad31a8..e0f6da38c 100644 --- a/docs/svg/microsoft.machinelearningservices/workspaces/onlineendpoints.svg +++ b/docs/svg/microsoft.machinelearningservices/workspaces/onlineendpoints.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.machinelearningservices/workspaces/onlineendpoints/deployments.svg b/docs/svg/microsoft.machinelearningservices/workspaces/onlineendpoints/deployments.svg index 850ad31a8..e0f6da38c 100644 --- a/docs/svg/microsoft.machinelearningservices/workspaces/onlineendpoints/deployments.svg +++ b/docs/svg/microsoft.machinelearningservices/workspaces/onlineendpoints/deployments.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.maintenance/maintenanceconfigurations.svg b/docs/svg/microsoft.maintenance/maintenanceconfigurations.svg index 088bc2a26..2cca5d98f 100644 --- a/docs/svg/microsoft.maintenance/maintenanceconfigurations.svg +++ b/docs/svg/microsoft.maintenance/maintenanceconfigurations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.maintenance/maintenanceconfigurationsbladeresource.svg b/docs/svg/microsoft.maintenance/maintenanceconfigurationsbladeresource.svg new file mode 100644 index 000000000..07a757103 --- /dev/null +++ b/docs/svg/microsoft.maintenance/maintenanceconfigurationsbladeresource.svg @@ -0,0 +1 @@ + diff --git a/docs/svg/microsoft.managedidentity/userassignedidentities.svg b/docs/svg/microsoft.managedidentity/userassignedidentities.svg index ff466f632..961ed77b7 100644 --- a/docs/svg/microsoft.managedidentity/userassignedidentities.svg +++ b/docs/svg/microsoft.managedidentity/userassignedidentities.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.managednetworkfabric/accesscontrollists.svg b/docs/svg/microsoft.managednetworkfabric/accesscontrollists.svg index 905d95084..f80229343 100644 --- a/docs/svg/microsoft.managednetworkfabric/accesscontrollists.svg +++ b/docs/svg/microsoft.managednetworkfabric/accesscontrollists.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.managednetworkfabric/internetgatewayrules.svg b/docs/svg/microsoft.managednetworkfabric/internetgatewayrules.svg index 53ca7c5f7..1abf2fa9f 100644 --- a/docs/svg/microsoft.managednetworkfabric/internetgatewayrules.svg +++ b/docs/svg/microsoft.managednetworkfabric/internetgatewayrules.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.managednetworkfabric/internetgateways.svg b/docs/svg/microsoft.managednetworkfabric/internetgateways.svg index a7d856c9f..897a80b71 100644 --- a/docs/svg/microsoft.managednetworkfabric/internetgateways.svg +++ b/docs/svg/microsoft.managednetworkfabric/internetgateways.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.managednetworkfabric/ipcommunities.svg b/docs/svg/microsoft.managednetworkfabric/ipcommunities.svg index c33012483..5555c8389 100644 --- a/docs/svg/microsoft.managednetworkfabric/ipcommunities.svg +++ b/docs/svg/microsoft.managednetworkfabric/ipcommunities.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.managednetworkfabric/ipextendedcommunities.svg b/docs/svg/microsoft.managednetworkfabric/ipextendedcommunities.svg index 9e9803b6c..298632f3b 100644 --- a/docs/svg/microsoft.managednetworkfabric/ipextendedcommunities.svg +++ b/docs/svg/microsoft.managednetworkfabric/ipextendedcommunities.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.managednetworkfabric/ipprefixes.svg b/docs/svg/microsoft.managednetworkfabric/ipprefixes.svg index 9b1d18909..752ec96b0 100644 --- a/docs/svg/microsoft.managednetworkfabric/ipprefixes.svg +++ b/docs/svg/microsoft.managednetworkfabric/ipprefixes.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.managednetworkfabric/l2isolationdomains.svg b/docs/svg/microsoft.managednetworkfabric/l2isolationdomains.svg index cc22be3f6..806500c4b 100644 --- a/docs/svg/microsoft.managednetworkfabric/l2isolationdomains.svg +++ b/docs/svg/microsoft.managednetworkfabric/l2isolationdomains.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.managednetworkfabric/l3isolationdomains.svg b/docs/svg/microsoft.managednetworkfabric/l3isolationdomains.svg index 33086019f..49d19fb6f 100644 --- a/docs/svg/microsoft.managednetworkfabric/l3isolationdomains.svg +++ b/docs/svg/microsoft.managednetworkfabric/l3isolationdomains.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.managednetworkfabric/l3isolationdomains/externalnetworks.svg b/docs/svg/microsoft.managednetworkfabric/l3isolationdomains/externalnetworks.svg index 3f803fd94..f3071f2f0 100644 --- a/docs/svg/microsoft.managednetworkfabric/l3isolationdomains/externalnetworks.svg +++ b/docs/svg/microsoft.managednetworkfabric/l3isolationdomains/externalnetworks.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.managednetworkfabric/l3isolationdomains/internalnetworks.svg b/docs/svg/microsoft.managednetworkfabric/l3isolationdomains/internalnetworks.svg index 1afab8762..c07263b63 100644 --- a/docs/svg/microsoft.managednetworkfabric/l3isolationdomains/internalnetworks.svg +++ b/docs/svg/microsoft.managednetworkfabric/l3isolationdomains/internalnetworks.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.managednetworkfabric/neighborgroups.svg b/docs/svg/microsoft.managednetworkfabric/neighborgroups.svg index 8fdb07689..9c8fd156e 100644 --- a/docs/svg/microsoft.managednetworkfabric/neighborgroups.svg +++ b/docs/svg/microsoft.managednetworkfabric/neighborgroups.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.managednetworkfabric/networkdevices.svg b/docs/svg/microsoft.managednetworkfabric/networkdevices.svg index ea9bd14fb..d792f26ee 100644 --- a/docs/svg/microsoft.managednetworkfabric/networkdevices.svg +++ b/docs/svg/microsoft.managednetworkfabric/networkdevices.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.managednetworkfabric/networkdevices/networkinterfaces.svg b/docs/svg/microsoft.managednetworkfabric/networkdevices/networkinterfaces.svg index 5d88658a5..63dae0fae 100644 --- a/docs/svg/microsoft.managednetworkfabric/networkdevices/networkinterfaces.svg +++ b/docs/svg/microsoft.managednetworkfabric/networkdevices/networkinterfaces.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.managednetworkfabric/networkfabriccontrollers.svg b/docs/svg/microsoft.managednetworkfabric/networkfabriccontrollers.svg index db6330c16..85e9c684b 100644 --- a/docs/svg/microsoft.managednetworkfabric/networkfabriccontrollers.svg +++ b/docs/svg/microsoft.managednetworkfabric/networkfabriccontrollers.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.managednetworkfabric/networkfabrics.svg b/docs/svg/microsoft.managednetworkfabric/networkfabrics.svg index 33b309f75..05316539d 100644 --- a/docs/svg/microsoft.managednetworkfabric/networkfabrics.svg +++ b/docs/svg/microsoft.managednetworkfabric/networkfabrics.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.managednetworkfabric/networkfabrics/networktonetworkinterconnects.svg b/docs/svg/microsoft.managednetworkfabric/networkfabrics/networktonetworkinterconnects.svg index eb601b1e1..6e7629423 100644 --- a/docs/svg/microsoft.managednetworkfabric/networkfabrics/networktonetworkinterconnects.svg +++ b/docs/svg/microsoft.managednetworkfabric/networkfabrics/networktonetworkinterconnects.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.managednetworkfabric/networkpacketbrokers.svg b/docs/svg/microsoft.managednetworkfabric/networkpacketbrokers.svg index 049efb8c5..02abafea6 100644 --- a/docs/svg/microsoft.managednetworkfabric/networkpacketbrokers.svg +++ b/docs/svg/microsoft.managednetworkfabric/networkpacketbrokers.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.managednetworkfabric/networkracks.svg b/docs/svg/microsoft.managednetworkfabric/networkracks.svg index 2f1a699c1..a187e58bf 100644 --- a/docs/svg/microsoft.managednetworkfabric/networkracks.svg +++ b/docs/svg/microsoft.managednetworkfabric/networkracks.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.managednetworkfabric/networktaprules.svg b/docs/svg/microsoft.managednetworkfabric/networktaprules.svg index ea2c3f10c..398c95ca6 100644 --- a/docs/svg/microsoft.managednetworkfabric/networktaprules.svg +++ b/docs/svg/microsoft.managednetworkfabric/networktaprules.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.managednetworkfabric/networktaps.svg b/docs/svg/microsoft.managednetworkfabric/networktaps.svg index 694c8c471..e5623fdd7 100644 --- a/docs/svg/microsoft.managednetworkfabric/networktaps.svg +++ b/docs/svg/microsoft.managednetworkfabric/networktaps.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.managednetworkfabric/routepolicies.svg b/docs/svg/microsoft.managednetworkfabric/routepolicies.svg index 29d377a24..84b90bd56 100644 --- a/docs/svg/microsoft.managednetworkfabric/routepolicies.svg +++ b/docs/svg/microsoft.managednetworkfabric/routepolicies.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.managedservices/registrationdefinitions.svg b/docs/svg/microsoft.managedservices/registrationdefinitions.svg index 77a5aab19..09f664861 100644 --- a/docs/svg/microsoft.managedservices/registrationdefinitions.svg +++ b/docs/svg/microsoft.managedservices/registrationdefinitions.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.management/managementgroups/microsoft.resources/deploymentstacks.svg b/docs/svg/microsoft.management/managementgroups/microsoft.resources/deploymentstacks.svg index b631640e1..65305ede6 100644 --- a/docs/svg/microsoft.management/managementgroups/microsoft.resources/deploymentstacks.svg +++ b/docs/svg/microsoft.management/managementgroups/microsoft.resources/deploymentstacks.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.management/managementgroups/providers/privatelinkassociations.svg b/docs/svg/microsoft.management/managementgroups/providers/privatelinkassociations.svg index 85b5d9ca5..394100d70 100644 --- a/docs/svg/microsoft.management/managementgroups/providers/privatelinkassociations.svg +++ b/docs/svg/microsoft.management/managementgroups/providers/privatelinkassociations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.management/managementgroups/providers/templatespecs.svg b/docs/svg/microsoft.management/managementgroups/providers/templatespecs.svg index 4263ddfc7..f6151ad4f 100644 --- a/docs/svg/microsoft.management/managementgroups/providers/templatespecs.svg +++ b/docs/svg/microsoft.management/managementgroups/providers/templatespecs.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.manufacturingplatform/manufacturingdataservices.svg b/docs/svg/microsoft.manufacturingplatform/manufacturingdataservices.svg index 5a06ba7a5..0829af840 100644 --- a/docs/svg/microsoft.manufacturingplatform/manufacturingdataservices.svg +++ b/docs/svg/microsoft.manufacturingplatform/manufacturingdataservices.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.maps/accounts.svg b/docs/svg/microsoft.maps/accounts.svg index 90e1cf15d..8ef70bb91 100644 --- a/docs/svg/microsoft.maps/accounts.svg +++ b/docs/svg/microsoft.maps/accounts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.maps/accounts/creators.svg b/docs/svg/microsoft.maps/accounts/creators.svg index 8f8bc7863..8ef70bb91 100644 --- a/docs/svg/microsoft.maps/accounts/creators.svg +++ b/docs/svg/microsoft.maps/accounts/creators.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.media/mediaservices.svg b/docs/svg/microsoft.media/mediaservices.svg index 0367e6cdc..9d6f2b4e2 100644 --- a/docs/svg/microsoft.media/mediaservices.svg +++ b/docs/svg/microsoft.media/mediaservices.svg @@ -1 +1,2 @@ - + + diff --git a/docs/svg/microsoft.media/mediaservices/accountfilters.svg b/docs/svg/microsoft.media/mediaservices/accountfilters.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.media/mediaservices/accountfilters.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.media/mediaservices/assets.svg b/docs/svg/microsoft.media/mediaservices/assets.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.media/mediaservices/assets.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.media/mediaservices/assets/assetfilters.svg b/docs/svg/microsoft.media/mediaservices/assets/assetfilters.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.media/mediaservices/assets/assetfilters.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.media/mediaservices/assets/tracks.svg b/docs/svg/microsoft.media/mediaservices/assets/tracks.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.media/mediaservices/assets/tracks.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.media/mediaservices/assets/tracks/operationresults.svg b/docs/svg/microsoft.media/mediaservices/assets/tracks/operationresults.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.media/mediaservices/assets/tracks/operationresults.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.media/mediaservices/assets/tracks/operationstatuses.svg b/docs/svg/microsoft.media/mediaservices/assets/tracks/operationstatuses.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.media/mediaservices/assets/tracks/operationstatuses.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.media/mediaservices/contentkeypolicies.svg b/docs/svg/microsoft.media/mediaservices/contentkeypolicies.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.media/mediaservices/contentkeypolicies.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.media/mediaservices/liveevents.svg b/docs/svg/microsoft.media/mediaservices/liveevents.svg index a7f2915ba..9d6f2b4e2 100644 --- a/docs/svg/microsoft.media/mediaservices/liveevents.svg +++ b/docs/svg/microsoft.media/mediaservices/liveevents.svg @@ -1,32 +1,2 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/svg/microsoft.media/mediaservices/liveevents/liveoutputs.svg b/docs/svg/microsoft.media/mediaservices/liveevents/liveoutputs.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.media/mediaservices/liveevents/liveoutputs.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.media/mediaservices/privateendpointconnections.svg b/docs/svg/microsoft.media/mediaservices/privateendpointconnections.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.media/mediaservices/privateendpointconnections.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.media/mediaservices/privatelinkresources.svg b/docs/svg/microsoft.media/mediaservices/privatelinkresources.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.media/mediaservices/privatelinkresources.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.media/mediaservices/streamingendpoints.svg b/docs/svg/microsoft.media/mediaservices/streamingendpoints.svg index a7f2915ba..9d6f2b4e2 100644 --- a/docs/svg/microsoft.media/mediaservices/streamingendpoints.svg +++ b/docs/svg/microsoft.media/mediaservices/streamingendpoints.svg @@ -1,32 +1,2 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/svg/microsoft.media/mediaservices/streaminglocators.svg b/docs/svg/microsoft.media/mediaservices/streaminglocators.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.media/mediaservices/streaminglocators.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.media/mediaservices/streamingpolicies.svg b/docs/svg/microsoft.media/mediaservices/streamingpolicies.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.media/mediaservices/streamingpolicies.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.media/mediaservices/transforms.svg b/docs/svg/microsoft.media/mediaservices/transforms.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.media/mediaservices/transforms.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.media/mediaservices/transforms/jobs.svg b/docs/svg/microsoft.media/mediaservices/transforms/jobs.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.media/mediaservices/transforms/jobs.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.migrate/projects.svg b/docs/svg/microsoft.migrate/projects.svg index 479153ef9..a3c56847b 100644 --- a/docs/svg/microsoft.migrate/projects.svg +++ b/docs/svg/microsoft.migrate/projects.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.mission/approvals.svg b/docs/svg/microsoft.mission/approvals.svg index 3ccc40623..b64ae0035 100644 --- a/docs/svg/microsoft.mission/approvals.svg +++ b/docs/svg/microsoft.mission/approvals.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.mission/communities.svg b/docs/svg/microsoft.mission/communities.svg index 5bbff5378..efd5bdb72 100644 --- a/docs/svg/microsoft.mission/communities.svg +++ b/docs/svg/microsoft.mission/communities.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.mission/communities/communityendpoints.svg b/docs/svg/microsoft.mission/communities/communityendpoints.svg index 595b5d1c8..f7ee2f3ce 100644 --- a/docs/svg/microsoft.mission/communities/communityendpoints.svg +++ b/docs/svg/microsoft.mission/communities/communityendpoints.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.mission/communities/transithubs.svg b/docs/svg/microsoft.mission/communities/transithubs.svg index ca4727191..af4c1d44f 100644 --- a/docs/svg/microsoft.mission/communities/transithubs.svg +++ b/docs/svg/microsoft.mission/communities/transithubs.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.mission/enclaveconnections.svg b/docs/svg/microsoft.mission/enclaveconnections.svg index 918a503de..cf51a3cf1 100644 --- a/docs/svg/microsoft.mission/enclaveconnections.svg +++ b/docs/svg/microsoft.mission/enclaveconnections.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.mission/virtualenclaves.svg b/docs/svg/microsoft.mission/virtualenclaves.svg index 614d1115b..5f88689fc 100644 --- a/docs/svg/microsoft.mission/virtualenclaves.svg +++ b/docs/svg/microsoft.mission/virtualenclaves.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.mission/virtualenclaves/enclaveendpoints.svg b/docs/svg/microsoft.mission/virtualenclaves/enclaveendpoints.svg index 437c71775..f2761e56f 100644 --- a/docs/svg/microsoft.mission/virtualenclaves/enclaveendpoints.svg +++ b/docs/svg/microsoft.mission/virtualenclaves/enclaveendpoints.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.mission/virtualenclaves/workloads.svg b/docs/svg/microsoft.mission/virtualenclaves/workloads.svg index 8787e2919..97fb43ef2 100644 --- a/docs/svg/microsoft.mission/virtualenclaves/workloads.svg +++ b/docs/svg/microsoft.mission/virtualenclaves/workloads.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.mixedreality/remoterenderingaccounts.svg b/docs/svg/microsoft.mixedreality/remoterenderingaccounts.svg index b1fc55ca6..dee3481ae 100644 --- a/docs/svg/microsoft.mixedreality/remoterenderingaccounts.svg +++ b/docs/svg/microsoft.mixedreality/remoterenderingaccounts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.mobilenetwork/mobilenetworks.svg b/docs/svg/microsoft.mobilenetwork/mobilenetworks.svg index af59a0f59..4ea2b1627 100644 --- a/docs/svg/microsoft.mobilenetwork/mobilenetworks.svg +++ b/docs/svg/microsoft.mobilenetwork/mobilenetworks.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.mobilenetwork/mobilenetworks/datanetworks.svg b/docs/svg/microsoft.mobilenetwork/mobilenetworks/datanetworks.svg index 2c742c5d9..98f644054 100644 --- a/docs/svg/microsoft.mobilenetwork/mobilenetworks/datanetworks.svg +++ b/docs/svg/microsoft.mobilenetwork/mobilenetworks/datanetworks.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.mobilenetwork/mobilenetworks/services.svg b/docs/svg/microsoft.mobilenetwork/mobilenetworks/services.svg index 9acdf218e..b4f83a94c 100644 --- a/docs/svg/microsoft.mobilenetwork/mobilenetworks/services.svg +++ b/docs/svg/microsoft.mobilenetwork/mobilenetworks/services.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.mobilenetwork/mobilenetworks/simpolicies.svg b/docs/svg/microsoft.mobilenetwork/mobilenetworks/simpolicies.svg index 4786fbc3c..8455f1c15 100644 --- a/docs/svg/microsoft.mobilenetwork/mobilenetworks/simpolicies.svg +++ b/docs/svg/microsoft.mobilenetwork/mobilenetworks/simpolicies.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.mobilenetwork/mobilenetworks/sites.svg b/docs/svg/microsoft.mobilenetwork/mobilenetworks/sites.svg index a14c132ad..cf71fc124 100644 --- a/docs/svg/microsoft.mobilenetwork/mobilenetworks/sites.svg +++ b/docs/svg/microsoft.mobilenetwork/mobilenetworks/sites.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.mobilenetwork/mobilenetworks/slices.svg b/docs/svg/microsoft.mobilenetwork/mobilenetworks/slices.svg index e2a1d035f..cfeb79058 100644 --- a/docs/svg/microsoft.mobilenetwork/mobilenetworks/slices.svg +++ b/docs/svg/microsoft.mobilenetwork/mobilenetworks/slices.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.mobilenetwork/packetcorecontrolplanes.svg b/docs/svg/microsoft.mobilenetwork/packetcorecontrolplanes.svg index 0931b695b..88a0f9ffd 100644 --- a/docs/svg/microsoft.mobilenetwork/packetcorecontrolplanes.svg +++ b/docs/svg/microsoft.mobilenetwork/packetcorecontrolplanes.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.mobilenetwork/packetcorecontrolplanes/packetcoredataplanes.svg b/docs/svg/microsoft.mobilenetwork/packetcorecontrolplanes/packetcoredataplanes.svg index 6ff56a4c7..7b2a87fc3 100644 --- a/docs/svg/microsoft.mobilenetwork/packetcorecontrolplanes/packetcoredataplanes.svg +++ b/docs/svg/microsoft.mobilenetwork/packetcorecontrolplanes/packetcoredataplanes.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.mobilenetwork/packetcorecontrolplanes/packetcoredataplanes/attacheddatanetworks.svg b/docs/svg/microsoft.mobilenetwork/packetcorecontrolplanes/packetcoredataplanes/attacheddatanetworks.svg index dbc93fabc..a806fc017 100644 --- a/docs/svg/microsoft.mobilenetwork/packetcorecontrolplanes/packetcoredataplanes/attacheddatanetworks.svg +++ b/docs/svg/microsoft.mobilenetwork/packetcorecontrolplanes/packetcoredataplanes/attacheddatanetworks.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.mobilenetwork/simgroups.svg b/docs/svg/microsoft.mobilenetwork/simgroups.svg index 4aa1b5ad7..79d974e59 100644 --- a/docs/svg/microsoft.mobilenetwork/simgroups.svg +++ b/docs/svg/microsoft.mobilenetwork/simgroups.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.mobilenetwork/simgroups/sims.svg b/docs/svg/microsoft.mobilenetwork/simgroups/sims.svg index 917fe5071..8382a8de4 100644 --- a/docs/svg/microsoft.mobilenetwork/simgroups/sims.svg +++ b/docs/svg/microsoft.mobilenetwork/simgroups/sims.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.monitor/accounts.svg b/docs/svg/microsoft.monitor/accounts.svg index a084587ca..cc0d8c7d2 100644 --- a/docs/svg/microsoft.monitor/accounts.svg +++ b/docs/svg/microsoft.monitor/accounts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.monitor/pipelinegroups.svg b/docs/svg/microsoft.monitor/pipelinegroups.svg index 09d1f5835..39a5ec14a 100644 --- a/docs/svg/microsoft.monitor/pipelinegroups.svg +++ b/docs/svg/microsoft.monitor/pipelinegroups.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.netapp/netappaccounts.svg b/docs/svg/microsoft.netapp/netappaccounts.svg index c636e53ed..cc0d123a7 100644 --- a/docs/svg/microsoft.netapp/netappaccounts.svg +++ b/docs/svg/microsoft.netapp/netappaccounts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.netapp/netappaccounts/backupvaults.svg b/docs/svg/microsoft.netapp/netappaccounts/backupvaults.svg index e8931f71f..b968b155c 100644 --- a/docs/svg/microsoft.netapp/netappaccounts/backupvaults.svg +++ b/docs/svg/microsoft.netapp/netappaccounts/backupvaults.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/applicationgatewaywebapplicationfirewallpolicies.svg b/docs/svg/microsoft.network/applicationgatewaywebapplicationfirewallpolicies.svg index 965f1e8f1..7702a93cb 100644 --- a/docs/svg/microsoft.network/applicationgatewaywebapplicationfirewallpolicies.svg +++ b/docs/svg/microsoft.network/applicationgatewaywebapplicationfirewallpolicies.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/applicationsecuritygroups.svg b/docs/svg/microsoft.network/applicationsecuritygroups.svg index a3dadb902..7e15e034f 100644 --- a/docs/svg/microsoft.network/applicationsecuritygroups.svg +++ b/docs/svg/microsoft.network/applicationsecuritygroups.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/azurefirewalls.svg b/docs/svg/microsoft.network/azurefirewalls.svg index 42f18fbb7..7867ba943 100644 --- a/docs/svg/microsoft.network/azurefirewalls.svg +++ b/docs/svg/microsoft.network/azurefirewalls.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/bastionhosts.svg b/docs/svg/microsoft.network/bastionhosts.svg index 3f3a7c9fd..1ccf70939 100644 --- a/docs/svg/microsoft.network/bastionhosts.svg +++ b/docs/svg/microsoft.network/bastionhosts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/connections.svg b/docs/svg/microsoft.network/connections.svg index 21a8fd47c..e65caf014 100644 --- a/docs/svg/microsoft.network/connections.svg +++ b/docs/svg/microsoft.network/connections.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/customipprefixes.svg b/docs/svg/microsoft.network/customipprefixes.svg index ab57c2528..1a0a2f7bf 100644 --- a/docs/svg/microsoft.network/customipprefixes.svg +++ b/docs/svg/microsoft.network/customipprefixes.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/ddosprotectionplans.svg b/docs/svg/microsoft.network/ddosprotectionplans.svg index ee6dc7173..ada11f5c5 100644 --- a/docs/svg/microsoft.network/ddosprotectionplans.svg +++ b/docs/svg/microsoft.network/ddosprotectionplans.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/dnsresolverdomainlists.svg b/docs/svg/microsoft.network/dnsresolverdomainlists.svg index 09e6aa7a0..9784432b1 100644 --- a/docs/svg/microsoft.network/dnsresolverdomainlists.svg +++ b/docs/svg/microsoft.network/dnsresolverdomainlists.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/dnsresolverpolicies.svg b/docs/svg/microsoft.network/dnsresolverpolicies.svg index 9962963a3..2452ca8f9 100644 --- a/docs/svg/microsoft.network/dnsresolverpolicies.svg +++ b/docs/svg/microsoft.network/dnsresolverpolicies.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/dnszones.svg b/docs/svg/microsoft.network/dnszones.svg index abdc01caa..6917d3a83 100644 --- a/docs/svg/microsoft.network/dnszones.svg +++ b/docs/svg/microsoft.network/dnszones.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/expressroutecircuits.svg b/docs/svg/microsoft.network/expressroutecircuits.svg index 8d556a03e..58c6c8f46 100644 --- a/docs/svg/microsoft.network/expressroutecircuits.svg +++ b/docs/svg/microsoft.network/expressroutecircuits.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/expressroutegateways.svg b/docs/svg/microsoft.network/expressroutegateways.svg index 650f1d613..44128ba4f 100644 --- a/docs/svg/microsoft.network/expressroutegateways.svg +++ b/docs/svg/microsoft.network/expressroutegateways.svg @@ -1,3 +1,4 @@ + diff --git a/docs/svg/microsoft.network/expressrouteports.svg b/docs/svg/microsoft.network/expressrouteports.svg index 4f6c295d4..a79d08dfb 100644 --- a/docs/svg/microsoft.network/expressrouteports.svg +++ b/docs/svg/microsoft.network/expressrouteports.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/firewallpolicies.svg b/docs/svg/microsoft.network/firewallpolicies.svg index dbdc2b368..9e91d0b88 100644 --- a/docs/svg/microsoft.network/firewallpolicies.svg +++ b/docs/svg/microsoft.network/firewallpolicies.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/frontdoors.svg b/docs/svg/microsoft.network/frontdoors.svg index 994868e3e..e78ff4bdb 100644 --- a/docs/svg/microsoft.network/frontdoors.svg +++ b/docs/svg/microsoft.network/frontdoors.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/frontdoorwebapplicationfirewallpolicies.svg b/docs/svg/microsoft.network/frontdoorwebapplicationfirewallpolicies.svg index 965f1e8f1..7702a93cb 100644 --- a/docs/svg/microsoft.network/frontdoorwebapplicationfirewallpolicies.svg +++ b/docs/svg/microsoft.network/frontdoorwebapplicationfirewallpolicies.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/ipgroups.svg b/docs/svg/microsoft.network/ipgroups.svg index e9a3a8234..c226f68ea 100644 --- a/docs/svg/microsoft.network/ipgroups.svg +++ b/docs/svg/microsoft.network/ipgroups.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/localnetworkgateways.svg b/docs/svg/microsoft.network/localnetworkgateways.svg index c26658524..f269ce006 100644 --- a/docs/svg/microsoft.network/localnetworkgateways.svg +++ b/docs/svg/microsoft.network/localnetworkgateways.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/natgateways.svg b/docs/svg/microsoft.network/natgateways.svg index 042905bb7..03fdc85be 100644 --- a/docs/svg/microsoft.network/natgateways.svg +++ b/docs/svg/microsoft.network/natgateways.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/networkmanagers.svg b/docs/svg/microsoft.network/networkmanagers.svg index 1bbc0a6e6..5f3430815 100644 --- a/docs/svg/microsoft.network/networkmanagers.svg +++ b/docs/svg/microsoft.network/networkmanagers.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/networkmanagers/connectivityconfigurations.svg b/docs/svg/microsoft.network/networkmanagers/connectivityconfigurations.svg index c8174e1ce..e1acd531b 100644 --- a/docs/svg/microsoft.network/networkmanagers/connectivityconfigurations.svg +++ b/docs/svg/microsoft.network/networkmanagers/connectivityconfigurations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/networkmanagers/ipampools.svg b/docs/svg/microsoft.network/networkmanagers/ipampools.svg index 1573884ef..6d63df14c 100644 --- a/docs/svg/microsoft.network/networkmanagers/ipampools.svg +++ b/docs/svg/microsoft.network/networkmanagers/ipampools.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/networkmanagers/networkgroups.svg b/docs/svg/microsoft.network/networkmanagers/networkgroups.svg index 76436b850..17b51f3b0 100644 --- a/docs/svg/microsoft.network/networkmanagers/networkgroups.svg +++ b/docs/svg/microsoft.network/networkmanagers/networkgroups.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/networkmanagers/routingconfigurations.svg b/docs/svg/microsoft.network/networkmanagers/routingconfigurations.svg index 1bbc0a6e6..5f3430815 100644 --- a/docs/svg/microsoft.network/networkmanagers/routingconfigurations.svg +++ b/docs/svg/microsoft.network/networkmanagers/routingconfigurations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/networkmanagers/securityadminconfigurations.svg b/docs/svg/microsoft.network/networkmanagers/securityadminconfigurations.svg index 1bbc0a6e6..5f3430815 100644 --- a/docs/svg/microsoft.network/networkmanagers/securityadminconfigurations.svg +++ b/docs/svg/microsoft.network/networkmanagers/securityadminconfigurations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/networkmanagers/securityuserconfigurations.svg b/docs/svg/microsoft.network/networkmanagers/securityuserconfigurations.svg index 1bbc0a6e6..5f3430815 100644 --- a/docs/svg/microsoft.network/networkmanagers/securityuserconfigurations.svg +++ b/docs/svg/microsoft.network/networkmanagers/securityuserconfigurations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/networkmanagers/verifierworkspaces.svg b/docs/svg/microsoft.network/networkmanagers/verifierworkspaces.svg index 9ffa0603a..9c4009f23 100644 --- a/docs/svg/microsoft.network/networkmanagers/verifierworkspaces.svg +++ b/docs/svg/microsoft.network/networkmanagers/verifierworkspaces.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/networksecuritygroups.svg b/docs/svg/microsoft.network/networksecuritygroups.svg index e51fa94be..a189cb074 100644 --- a/docs/svg/microsoft.network/networksecuritygroups.svg +++ b/docs/svg/microsoft.network/networksecuritygroups.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/networksecurityperimeters.svg b/docs/svg/microsoft.network/networksecurityperimeters.svg index cd20fb95d..133b61f08 100644 --- a/docs/svg/microsoft.network/networksecurityperimeters.svg +++ b/docs/svg/microsoft.network/networksecurityperimeters.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/networksecurityperimeters/profiles.svg b/docs/svg/microsoft.network/networksecurityperimeters/profiles.svg index 716355f1d..3fe69f964 100644 --- a/docs/svg/microsoft.network/networksecurityperimeters/profiles.svg +++ b/docs/svg/microsoft.network/networksecurityperimeters/profiles.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/networkwatchers.svg b/docs/svg/microsoft.network/networkwatchers.svg index 23317ac07..af8d85a9b 100644 --- a/docs/svg/microsoft.network/networkwatchers.svg +++ b/docs/svg/microsoft.network/networkwatchers.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/networkwatchers/flowlogs.svg b/docs/svg/microsoft.network/networkwatchers/flowlogs.svg index 23317ac07..af8d85a9b 100644 --- a/docs/svg/microsoft.network/networkwatchers/flowlogs.svg +++ b/docs/svg/microsoft.network/networkwatchers/flowlogs.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/p2svpngateways.svg b/docs/svg/microsoft.network/p2svpngateways.svg index 9d6f2b4e2..650f1d613 100644 --- a/docs/svg/microsoft.network/p2svpngateways.svg +++ b/docs/svg/microsoft.network/p2svpngateways.svg @@ -1,2 +1,3 @@ + diff --git a/docs/svg/microsoft.network/privatednszones.svg b/docs/svg/microsoft.network/privatednszones.svg index ada043ae5..b42445cab 100644 --- a/docs/svg/microsoft.network/privatednszones.svg +++ b/docs/svg/microsoft.network/privatednszones.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/privateendpoints.svg b/docs/svg/microsoft.network/privateendpoints.svg index 5c533de80..0f989b704 100644 --- a/docs/svg/microsoft.network/privateendpoints.svg +++ b/docs/svg/microsoft.network/privateendpoints.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/privatelinkservices.svg b/docs/svg/microsoft.network/privatelinkservices.svg index 215452ac0..3a0f4345b 100644 --- a/docs/svg/microsoft.network/privatelinkservices.svg +++ b/docs/svg/microsoft.network/privatelinkservices.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/publicipprefixes.svg b/docs/svg/microsoft.network/publicipprefixes.svg index 0221e1cbb..a370996ec 100644 --- a/docs/svg/microsoft.network/publicipprefixes.svg +++ b/docs/svg/microsoft.network/publicipprefixes.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/routefilters.svg b/docs/svg/microsoft.network/routefilters.svg index fe26be65f..2a292fd9b 100644 --- a/docs/svg/microsoft.network/routefilters.svg +++ b/docs/svg/microsoft.network/routefilters.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/routetables.svg b/docs/svg/microsoft.network/routetables.svg index c49831256..4f4e14e97 100644 --- a/docs/svg/microsoft.network/routetables.svg +++ b/docs/svg/microsoft.network/routetables.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/serviceendpointpolicies.svg b/docs/svg/microsoft.network/serviceendpointpolicies.svg index b07933f5d..e5681bac2 100644 --- a/docs/svg/microsoft.network/serviceendpointpolicies.svg +++ b/docs/svg/microsoft.network/serviceendpointpolicies.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/virtualhubs.svg b/docs/svg/microsoft.network/virtualhubs.svg index 3022ea656..b58bf16b9 100644 --- a/docs/svg/microsoft.network/virtualhubs.svg +++ b/docs/svg/microsoft.network/virtualhubs.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/virtualnetworkgateways.svg b/docs/svg/microsoft.network/virtualnetworkgateways.svg index c9b7ae3c4..a890049a7 100644 --- a/docs/svg/microsoft.network/virtualnetworkgateways.svg +++ b/docs/svg/microsoft.network/virtualnetworkgateways.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/virtualwans.svg b/docs/svg/microsoft.network/virtualwans.svg index 1f48856d3..6e677a18b 100644 --- a/docs/svg/microsoft.network/virtualwans.svg +++ b/docs/svg/microsoft.network/virtualwans.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.network/vpngateways.svg b/docs/svg/microsoft.network/vpngateways.svg index 650f1d613..44128ba4f 100644 --- a/docs/svg/microsoft.network/vpngateways.svg +++ b/docs/svg/microsoft.network/vpngateways.svg @@ -1,3 +1,4 @@ + diff --git a/docs/svg/microsoft.networkcloud/baremetalmachines.svg b/docs/svg/microsoft.networkcloud/baremetalmachines.svg index a4113f7d9..24ca2c4a2 100644 --- a/docs/svg/microsoft.networkcloud/baremetalmachines.svg +++ b/docs/svg/microsoft.networkcloud/baremetalmachines.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.networkcloud/cloudservicesnetworks.svg b/docs/svg/microsoft.networkcloud/cloudservicesnetworks.svg index 6a5776e03..698aa3efd 100644 --- a/docs/svg/microsoft.networkcloud/cloudservicesnetworks.svg +++ b/docs/svg/microsoft.networkcloud/cloudservicesnetworks.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.networkcloud/clustermanagers.svg b/docs/svg/microsoft.networkcloud/clustermanagers.svg index 08ba09b70..48d534791 100644 --- a/docs/svg/microsoft.networkcloud/clustermanagers.svg +++ b/docs/svg/microsoft.networkcloud/clustermanagers.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.networkcloud/clusters.svg b/docs/svg/microsoft.networkcloud/clusters.svg index 1a3ecd3b8..02f50d9f4 100644 --- a/docs/svg/microsoft.networkcloud/clusters.svg +++ b/docs/svg/microsoft.networkcloud/clusters.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.networkcloud/clusters/baremetalmachinekeysets.svg b/docs/svg/microsoft.networkcloud/clusters/baremetalmachinekeysets.svg index 9b2cdbfab..879d474c6 100644 --- a/docs/svg/microsoft.networkcloud/clusters/baremetalmachinekeysets.svg +++ b/docs/svg/microsoft.networkcloud/clusters/baremetalmachinekeysets.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.networkcloud/clusters/bmckeysets.svg b/docs/svg/microsoft.networkcloud/clusters/bmckeysets.svg index c69a1d4f9..f71af949f 100644 --- a/docs/svg/microsoft.networkcloud/clusters/bmckeysets.svg +++ b/docs/svg/microsoft.networkcloud/clusters/bmckeysets.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.networkcloud/clusters/metricsconfigurations.svg b/docs/svg/microsoft.networkcloud/clusters/metricsconfigurations.svg index 2bad53416..1041e273c 100644 --- a/docs/svg/microsoft.networkcloud/clusters/metricsconfigurations.svg +++ b/docs/svg/microsoft.networkcloud/clusters/metricsconfigurations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.networkcloud/kubernetesclusters.svg b/docs/svg/microsoft.networkcloud/kubernetesclusters.svg index 1dcc1cd4d..c8af4e273 100644 --- a/docs/svg/microsoft.networkcloud/kubernetesclusters.svg +++ b/docs/svg/microsoft.networkcloud/kubernetesclusters.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.networkcloud/kubernetesclusters/agentpools.svg b/docs/svg/microsoft.networkcloud/kubernetesclusters/agentpools.svg index 380842bc0..c83bc1991 100644 --- a/docs/svg/microsoft.networkcloud/kubernetesclusters/agentpools.svg +++ b/docs/svg/microsoft.networkcloud/kubernetesclusters/agentpools.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.networkcloud/kubernetesclusters/features.svg b/docs/svg/microsoft.networkcloud/kubernetesclusters/features.svg new file mode 100644 index 000000000..ff463d077 --- /dev/null +++ b/docs/svg/microsoft.networkcloud/kubernetesclusters/features.svg @@ -0,0 +1 @@ + diff --git a/docs/svg/microsoft.networkcloud/l2networks.svg b/docs/svg/microsoft.networkcloud/l2networks.svg index 51d32451a..be5fd348c 100644 --- a/docs/svg/microsoft.networkcloud/l2networks.svg +++ b/docs/svg/microsoft.networkcloud/l2networks.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.networkcloud/l3networks.svg b/docs/svg/microsoft.networkcloud/l3networks.svg index 36dca77c5..4200af609 100644 --- a/docs/svg/microsoft.networkcloud/l3networks.svg +++ b/docs/svg/microsoft.networkcloud/l3networks.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.networkcloud/racks.svg b/docs/svg/microsoft.networkcloud/racks.svg index ed6e268a6..253e6e83f 100644 --- a/docs/svg/microsoft.networkcloud/racks.svg +++ b/docs/svg/microsoft.networkcloud/racks.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.networkcloud/storageappliances.svg b/docs/svg/microsoft.networkcloud/storageappliances.svg index 5fac6af01..bb1137481 100644 --- a/docs/svg/microsoft.networkcloud/storageappliances.svg +++ b/docs/svg/microsoft.networkcloud/storageappliances.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.networkcloud/trunkednetworks.svg b/docs/svg/microsoft.networkcloud/trunkednetworks.svg index fcad36d11..aea14eb1c 100644 --- a/docs/svg/microsoft.networkcloud/trunkednetworks.svg +++ b/docs/svg/microsoft.networkcloud/trunkednetworks.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.networkcloud/virtualmachines.svg b/docs/svg/microsoft.networkcloud/virtualmachines.svg index 8ca14d2c1..48b2472cf 100644 --- a/docs/svg/microsoft.networkcloud/virtualmachines.svg +++ b/docs/svg/microsoft.networkcloud/virtualmachines.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.networkcloud/virtualmachines/consoles.svg b/docs/svg/microsoft.networkcloud/virtualmachines/consoles.svg index 6280ffc5b..99448bdb9 100644 --- a/docs/svg/microsoft.networkcloud/virtualmachines/consoles.svg +++ b/docs/svg/microsoft.networkcloud/virtualmachines/consoles.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.networkcloud/volumes.svg b/docs/svg/microsoft.networkcloud/volumes.svg index fbc11f23e..4c0a25a67 100644 --- a/docs/svg/microsoft.networkcloud/volumes.svg +++ b/docs/svg/microsoft.networkcloud/volumes.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.networkfunction/azuretrafficcollectors.svg b/docs/svg/microsoft.networkfunction/azuretrafficcollectors.svg index c33de0290..c623a55b2 100644 --- a/docs/svg/microsoft.networkfunction/azuretrafficcollectors.svg +++ b/docs/svg/microsoft.networkfunction/azuretrafficcollectors.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.networkfunction/meshvpns.svg b/docs/svg/microsoft.networkfunction/meshvpns.svg index b0a97ae83..7388b1333 100644 --- a/docs/svg/microsoft.networkfunction/meshvpns.svg +++ b/docs/svg/microsoft.networkfunction/meshvpns.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.notificationhubs/namespaces.svg b/docs/svg/microsoft.notificationhubs/namespaces.svg index 67a7da56b..896f3da70 100644 --- a/docs/svg/microsoft.notificationhubs/namespaces.svg +++ b/docs/svg/microsoft.notificationhubs/namespaces.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.notificationhubs/namespaces/notificationhubs.svg b/docs/svg/microsoft.notificationhubs/namespaces/notificationhubs.svg index 97d65fe80..d3c948e51 100644 --- a/docs/svg/microsoft.notificationhubs/namespaces/notificationhubs.svg +++ b/docs/svg/microsoft.notificationhubs/namespaces/notificationhubs.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.onlineexperimentation/workspaces.svg b/docs/svg/microsoft.onlineexperimentation/workspaces.svg new file mode 100644 index 000000000..4d3e672c9 --- /dev/null +++ b/docs/svg/microsoft.onlineexperimentation/workspaces.svg @@ -0,0 +1 @@ + diff --git a/docs/svg/microsoft.openenergyplatform/energyservices.svg b/docs/svg/microsoft.openenergyplatform/energyservices.svg index a83500e6e..4854e8c81 100644 --- a/docs/svg/microsoft.openenergyplatform/energyservices.svg +++ b/docs/svg/microsoft.openenergyplatform/energyservices.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.operationalinsights/clusters.svg b/docs/svg/microsoft.operationalinsights/clusters.svg index 07d45fef5..5985a574f 100644 --- a/docs/svg/microsoft.operationalinsights/clusters.svg +++ b/docs/svg/microsoft.operationalinsights/clusters.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.operationalinsights/querypacks.svg b/docs/svg/microsoft.operationalinsights/querypacks.svg index 5384206ae..6f70c2141 100644 --- a/docs/svg/microsoft.operationalinsights/querypacks.svg +++ b/docs/svg/microsoft.operationalinsights/querypacks.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.operationsmanagement/solutions.svg b/docs/svg/microsoft.operationsmanagement/solutions.svg index c5d11da70..c1d8d5251 100644 --- a/docs/svg/microsoft.operationsmanagement/solutions.svg +++ b/docs/svg/microsoft.operationsmanagement/solutions.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.orbital/cloudaccessrouters.svg b/docs/svg/microsoft.orbital/cloudaccessrouters.svg index 864be6bab..53a970063 100644 --- a/docs/svg/microsoft.orbital/cloudaccessrouters.svg +++ b/docs/svg/microsoft.orbital/cloudaccessrouters.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.orbital/edgesites.svg b/docs/svg/microsoft.orbital/edgesites.svg index 2d88116d5..548dcd918 100644 --- a/docs/svg/microsoft.orbital/edgesites.svg +++ b/docs/svg/microsoft.orbital/edgesites.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.orbital/l2connections.svg b/docs/svg/microsoft.orbital/l2connections.svg index 95a93c5d9..2ffe40dc8 100644 --- a/docs/svg/microsoft.orbital/l2connections.svg +++ b/docs/svg/microsoft.orbital/l2connections.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.orbital/sdwancontrollers.svg b/docs/svg/microsoft.orbital/sdwancontrollers.svg index f268bf380..b4b8fb838 100644 --- a/docs/svg/microsoft.orbital/sdwancontrollers.svg +++ b/docs/svg/microsoft.orbital/sdwancontrollers.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.orbital/terminals.svg b/docs/svg/microsoft.orbital/terminals.svg index 647993925..6c1b5dc90 100644 --- a/docs/svg/microsoft.orbital/terminals.svg +++ b/docs/svg/microsoft.orbital/terminals.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.peering/peerings.svg b/docs/svg/microsoft.peering/peerings.svg index 2a42b1ab3..e84eb3859 100644 --- a/docs/svg/microsoft.peering/peerings.svg +++ b/docs/svg/microsoft.peering/peerings.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.peering/peerings/registeredasns.svg b/docs/svg/microsoft.peering/peerings/registeredasns.svg index 323d01e87..933d71ee4 100644 --- a/docs/svg/microsoft.peering/peerings/registeredasns.svg +++ b/docs/svg/microsoft.peering/peerings/registeredasns.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.peering/peerings/registeredprefixes.svg b/docs/svg/microsoft.peering/peerings/registeredprefixes.svg index 4533f2d84..aa70b6c24 100644 --- a/docs/svg/microsoft.peering/peerings/registeredprefixes.svg +++ b/docs/svg/microsoft.peering/peerings/registeredprefixes.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.peering/peeringservices.svg b/docs/svg/microsoft.peering/peeringservices.svg index 50b797b3a..e4a412080 100644 --- a/docs/svg/microsoft.peering/peeringservices.svg +++ b/docs/svg/microsoft.peering/peeringservices.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.peering/peeringservices/prefixes.svg b/docs/svg/microsoft.peering/peeringservices/prefixes.svg index 1847d3dc5..42f9025b6 100644 --- a/docs/svg/microsoft.peering/peeringservices/prefixes.svg +++ b/docs/svg/microsoft.peering/peeringservices/prefixes.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.portalservices/dashboards.svg b/docs/svg/microsoft.portalservices/dashboards.svg index 2b5376493..67d1dd913 100644 --- a/docs/svg/microsoft.portalservices/dashboards.svg +++ b/docs/svg/microsoft.portalservices/dashboards.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.powerbidedicated/capacities.svg b/docs/svg/microsoft.powerbidedicated/capacities.svg index c17a3c7ed..3f17ebd77 100644 --- a/docs/svg/microsoft.powerbidedicated/capacities.svg +++ b/docs/svg/microsoft.powerbidedicated/capacities.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.professionalservice/resources.svg b/docs/svg/microsoft.professionalservice/resources.svg index 6beebdb43..274b06094 100644 --- a/docs/svg/microsoft.professionalservice/resources.svg +++ b/docs/svg/microsoft.professionalservice/resources.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.programmableconnectivity/gateways.svg b/docs/svg/microsoft.programmableconnectivity/gateways.svg index 73748ecb2..98c43728e 100644 --- a/docs/svg/microsoft.programmableconnectivity/gateways.svg +++ b/docs/svg/microsoft.programmableconnectivity/gateways.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.programmableconnectivity/operatorapiconnections.svg b/docs/svg/microsoft.programmableconnectivity/operatorapiconnections.svg index 09f912301..98c43728e 100644 --- a/docs/svg/microsoft.programmableconnectivity/operatorapiconnections.svg +++ b/docs/svg/microsoft.programmableconnectivity/operatorapiconnections.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.programmableconnectivity/operatorapiplans.svg b/docs/svg/microsoft.programmableconnectivity/operatorapiplans.svg index d67fd52a3..98c43728e 100644 --- a/docs/svg/microsoft.programmableconnectivity/operatorapiplans.svg +++ b/docs/svg/microsoft.programmableconnectivity/operatorapiplans.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.providerhub/providerregistrations/customrollouts.svg b/docs/svg/microsoft.providerhub/providerregistrations/customrollouts.svg index fb901b90a..485b5458a 100644 --- a/docs/svg/microsoft.providerhub/providerregistrations/customrollouts.svg +++ b/docs/svg/microsoft.providerhub/providerregistrations/customrollouts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.providerhub/providerregistrations/defaultrollouts.svg b/docs/svg/microsoft.providerhub/providerregistrations/defaultrollouts.svg index 35fdb297a..b2b415ca2 100644 --- a/docs/svg/microsoft.providerhub/providerregistrations/defaultrollouts.svg +++ b/docs/svg/microsoft.providerhub/providerregistrations/defaultrollouts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.purview/accounts.svg b/docs/svg/microsoft.purview/accounts.svg index 0eb936afe..689385b0f 100644 --- a/docs/svg/microsoft.purview/accounts.svg +++ b/docs/svg/microsoft.purview/accounts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.quantum/workspaces.svg b/docs/svg/microsoft.quantum/workspaces.svg index 7e7db0051..392e7281c 100644 --- a/docs/svg/microsoft.quantum/workspaces.svg +++ b/docs/svg/microsoft.quantum/workspaces.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.redhatopenshift/openshiftclusters.svg b/docs/svg/microsoft.redhatopenshift/openshiftclusters.svg index 74a6fa982..1b172c47c 100644 --- a/docs/svg/microsoft.redhatopenshift/openshiftclusters.svg +++ b/docs/svg/microsoft.redhatopenshift/openshiftclusters.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.relay/namespaces.svg b/docs/svg/microsoft.relay/namespaces.svg index c2d8cf0a9..453f6dd23 100644 --- a/docs/svg/microsoft.relay/namespaces.svg +++ b/docs/svg/microsoft.relay/namespaces.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.relay/namespaces/hybridconnections.svg b/docs/svg/microsoft.relay/namespaces/hybridconnections.svg index e82d188a2..4ad5cba58 100644 --- a/docs/svg/microsoft.relay/namespaces/hybridconnections.svg +++ b/docs/svg/microsoft.relay/namespaces/hybridconnections.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.relay/namespaces/wcfrelays.svg b/docs/svg/microsoft.relay/namespaces/wcfrelays.svg index 7feb8985d..80bca6e12 100644 --- a/docs/svg/microsoft.relay/namespaces/wcfrelays.svg +++ b/docs/svg/microsoft.relay/namespaces/wcfrelays.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.resourceconnector/appliances.svg b/docs/svg/microsoft.resourceconnector/appliances.svg index a720c43cb..dcc6d72f3 100644 --- a/docs/svg/microsoft.resourceconnector/appliances.svg +++ b/docs/svg/microsoft.resourceconnector/appliances.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.resourcegraph/queries.svg b/docs/svg/microsoft.resourcegraph/queries.svg index 61e8788ba..121f7a658 100644 --- a/docs/svg/microsoft.resourcegraph/queries.svg +++ b/docs/svg/microsoft.resourcegraph/queries.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.resources/builtintemplatespecs.svg b/docs/svg/microsoft.resources/builtintemplatespecs.svg index f80266225..a58c84b29 100644 --- a/docs/svg/microsoft.resources/builtintemplatespecs.svg +++ b/docs/svg/microsoft.resources/builtintemplatespecs.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.resources/deletedresources.svg b/docs/svg/microsoft.resources/deletedresources.svg index beda57449..3c6c5cc04 100644 --- a/docs/svg/microsoft.resources/deletedresources.svg +++ b/docs/svg/microsoft.resources/deletedresources.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.resources/deploymentscripts.svg b/docs/svg/microsoft.resources/deploymentscripts.svg index 5b2e3bba7..b3692479f 100644 --- a/docs/svg/microsoft.resources/deploymentscripts.svg +++ b/docs/svg/microsoft.resources/deploymentscripts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.resources/deploymentstacks.svg b/docs/svg/microsoft.resources/deploymentstacks.svg index dfe0027ae..65305ede6 100644 --- a/docs/svg/microsoft.resources/deploymentstacks.svg +++ b/docs/svg/microsoft.resources/deploymentstacks.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.resources/resourcechange.svg b/docs/svg/microsoft.resources/resourcechange.svg index 12a32dcaa..7d07f3d71 100644 --- a/docs/svg/microsoft.resources/resourcechange.svg +++ b/docs/svg/microsoft.resources/resourcechange.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.resources/resourcegraphvisualizer.svg b/docs/svg/microsoft.resources/resourcegraphvisualizer.svg index d686fd765..48b37b97f 100644 --- a/docs/svg/microsoft.resources/resourcegraphvisualizer.svg +++ b/docs/svg/microsoft.resources/resourcegraphvisualizer.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.resources/templatespecs.svg b/docs/svg/microsoft.resources/templatespecs.svg index 0484d0d0d..36b241735 100644 --- a/docs/svg/microsoft.resources/templatespecs.svg +++ b/docs/svg/microsoft.resources/templatespecs.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.resources/virtualsubscriptionsforresourcepicker.svg b/docs/svg/microsoft.resources/virtualsubscriptionsforresourcepicker.svg new file mode 100644 index 000000000..ec114b85e --- /dev/null +++ b/docs/svg/microsoft.resources/virtualsubscriptionsforresourcepicker.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/svg/microsoft.saas/applications.svg b/docs/svg/microsoft.saas/applications.svg index cd96341e5..e950d471d 100644 --- a/docs/svg/microsoft.saas/applications.svg +++ b/docs/svg/microsoft.saas/applications.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.saas/resources.svg b/docs/svg/microsoft.saas/resources.svg index a07689edc..e950d471d 100644 --- a/docs/svg/microsoft.saas/resources.svg +++ b/docs/svg/microsoft.saas/resources.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.saas/saasresources.svg b/docs/svg/microsoft.saas/saasresources.svg index 6b1995832..e950d471d 100644 --- a/docs/svg/microsoft.saas/saasresources.svg +++ b/docs/svg/microsoft.saas/saasresources.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.saashub/cloudservices.svg b/docs/svg/microsoft.saashub/cloudservices.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.saashub/cloudservices.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.scom/managedinstances.svg b/docs/svg/microsoft.scom/managedinstances.svg index 751cf57c9..c8fec5103 100644 --- a/docs/svg/microsoft.scom/managedinstances.svg +++ b/docs/svg/microsoft.scom/managedinstances.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.scvmm/virtualmachines.svg b/docs/svg/microsoft.scvmm/virtualmachines.svg index 2b88d7595..8225c53da 100644 --- a/docs/svg/microsoft.scvmm/virtualmachines.svg +++ b/docs/svg/microsoft.scvmm/virtualmachines.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.scvmm/vmmservers.svg b/docs/svg/microsoft.scvmm/vmmservers.svg index 944c6eb41..05b4f9809 100644 --- a/docs/svg/microsoft.scvmm/vmmservers.svg +++ b/docs/svg/microsoft.scvmm/vmmservers.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.search/searchservices.svg b/docs/svg/microsoft.search/searchservices.svg index e2444d54b..ffc715d01 100644 --- a/docs/svg/microsoft.search/searchservices.svg +++ b/docs/svg/microsoft.search/searchservices.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.security/locations/alerts.svg b/docs/svg/microsoft.security/locations/alerts.svg index 93f50dd97..593a7674d 100644 --- a/docs/svg/microsoft.security/locations/alerts.svg +++ b/docs/svg/microsoft.security/locations/alerts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.securitycopilot/capacities.svg b/docs/svg/microsoft.securitycopilot/capacities.svg index 566b5573d..4f42c78f9 100644 --- a/docs/svg/microsoft.securitycopilot/capacities.svg +++ b/docs/svg/microsoft.securitycopilot/capacities.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.securitydetonation/chambers.svg b/docs/svg/microsoft.securitydetonation/chambers.svg index 9b3ae75b5..7c8890165 100644 --- a/docs/svg/microsoft.securitydetonation/chambers.svg +++ b/docs/svg/microsoft.securitydetonation/chambers.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.securityinsightsarg/sentinel.svg b/docs/svg/microsoft.securityinsightsarg/sentinel.svg index f2489b85b..79c2b81c1 100644 --- a/docs/svg/microsoft.securityinsightsarg/sentinel.svg +++ b/docs/svg/microsoft.securityinsightsarg/sentinel.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.servicebus/namespaces.svg b/docs/svg/microsoft.servicebus/namespaces.svg index 4eead4eb2..5b34367c9 100644 --- a/docs/svg/microsoft.servicebus/namespaces.svg +++ b/docs/svg/microsoft.servicebus/namespaces.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.servicebus/namespaces/queues.svg b/docs/svg/microsoft.servicebus/namespaces/queues.svg index e9f957d52..81329b852 100644 --- a/docs/svg/microsoft.servicebus/namespaces/queues.svg +++ b/docs/svg/microsoft.servicebus/namespaces/queues.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.servicebus/namespaces/topics.svg b/docs/svg/microsoft.servicebus/namespaces/topics.svg index a819b96a7..b157d14b9 100644 --- a/docs/svg/microsoft.servicebus/namespaces/topics.svg +++ b/docs/svg/microsoft.servicebus/namespaces/topics.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.servicebus/namespaces/topics/subscriptions.svg b/docs/svg/microsoft.servicebus/namespaces/topics/subscriptions.svg index a819b96a7..b157d14b9 100644 --- a/docs/svg/microsoft.servicebus/namespaces/topics/subscriptions.svg +++ b/docs/svg/microsoft.servicebus/namespaces/topics/subscriptions.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.servicefabric/clusters.svg b/docs/svg/microsoft.servicefabric/clusters.svg index a949cbaf4..2941a5ef8 100644 --- a/docs/svg/microsoft.servicefabric/clusters.svg +++ b/docs/svg/microsoft.servicefabric/clusters.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.servicefabric/managedclusters.svg b/docs/svg/microsoft.servicefabric/managedclusters.svg index 37aada441..566038509 100644 --- a/docs/svg/microsoft.servicefabric/managedclusters.svg +++ b/docs/svg/microsoft.servicefabric/managedclusters.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.servicenetworking/trafficcontrollers.svg b/docs/svg/microsoft.servicenetworking/trafficcontrollers.svg index 47f4d240e..eddf21b3a 100644 --- a/docs/svg/microsoft.servicenetworking/trafficcontrollers.svg +++ b/docs/svg/microsoft.servicenetworking/trafficcontrollers.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.signalrservice/signalr.svg b/docs/svg/microsoft.signalrservice/signalr.svg index d70d7d531..dc7682920 100644 --- a/docs/svg/microsoft.signalrservice/signalr.svg +++ b/docs/svg/microsoft.signalrservice/signalr.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.signalrservice/signalr/replicas.svg b/docs/svg/microsoft.signalrservice/signalr/replicas.svg index 6e7bb87f0..41ae77973 100644 --- a/docs/svg/microsoft.signalrservice/signalr/replicas.svg +++ b/docs/svg/microsoft.signalrservice/signalr/replicas.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.signalrservice/webpubsub.svg b/docs/svg/microsoft.signalrservice/webpubsub.svg index cf2cb0334..33b3a0376 100644 --- a/docs/svg/microsoft.signalrservice/webpubsub.svg +++ b/docs/svg/microsoft.signalrservice/webpubsub.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.signalrservice/webpubsub/replicas.svg b/docs/svg/microsoft.signalrservice/webpubsub/replicas.svg index 63a2cb4b9..53b27521f 100644 --- a/docs/svg/microsoft.signalrservice/webpubsub/replicas.svg +++ b/docs/svg/microsoft.signalrservice/webpubsub/replicas.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.sovereign/landingzoneaccounts.svg b/docs/svg/microsoft.sovereign/landingzoneaccounts.svg index 24ce9c01d..985e7fe74 100644 --- a/docs/svg/microsoft.sovereign/landingzoneaccounts.svg +++ b/docs/svg/microsoft.sovereign/landingzoneaccounts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.sovereign/landingzoneaccounts/landingzoneconfigurations.svg b/docs/svg/microsoft.sovereign/landingzoneaccounts/landingzoneconfigurations.svg index c8001e7c5..ddb292923 100644 --- a/docs/svg/microsoft.sovereign/landingzoneaccounts/landingzoneconfigurations.svg +++ b/docs/svg/microsoft.sovereign/landingzoneaccounts/landingzoneconfigurations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.sovereign/landingzoneaccounts/landingzoneregistrations.svg b/docs/svg/microsoft.sovereign/landingzoneaccounts/landingzoneregistrations.svg index bc06d33d8..0d3774e19 100644 --- a/docs/svg/microsoft.sovereign/landingzoneaccounts/landingzoneregistrations.svg +++ b/docs/svg/microsoft.sovereign/landingzoneaccounts/landingzoneregistrations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.sovereign/landingzoneconfigurations.svg b/docs/svg/microsoft.sovereign/landingzoneconfigurations.svg index c8001e7c5..ddb292923 100644 --- a/docs/svg/microsoft.sovereign/landingzoneconfigurations.svg +++ b/docs/svg/microsoft.sovereign/landingzoneconfigurations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.sovereign/landingzoneregistrations.svg b/docs/svg/microsoft.sovereign/landingzoneregistrations.svg index bc06d33d8..0d3774e19 100644 --- a/docs/svg/microsoft.sovereign/landingzoneregistrations.svg +++ b/docs/svg/microsoft.sovereign/landingzoneregistrations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.sovereign/transparencylogs.svg b/docs/svg/microsoft.sovereign/transparencylogs.svg index 970826b10..d16ff385b 100644 --- a/docs/svg/microsoft.sovereign/transparencylogs.svg +++ b/docs/svg/microsoft.sovereign/transparencylogs.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.sql/instancepools.svg b/docs/svg/microsoft.sql/instancepools.svg index 494f1acf3..69fa2f8c9 100644 --- a/docs/svg/microsoft.sql/instancepools.svg +++ b/docs/svg/microsoft.sql/instancepools.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.sql/managedinstances.svg b/docs/svg/microsoft.sql/managedinstances.svg index 64b7f8b2c..fbad4f2b6 100644 --- a/docs/svg/microsoft.sql/managedinstances.svg +++ b/docs/svg/microsoft.sql/managedinstances.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.sql/managedinstances/databases.svg b/docs/svg/microsoft.sql/managedinstances/databases.svg index 83d5c5bf3..a9f13af4c 100644 --- a/docs/svg/microsoft.sql/managedinstances/databases.svg +++ b/docs/svg/microsoft.sql/managedinstances/databases.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.sql/servers/elasticpools.svg b/docs/svg/microsoft.sql/servers/elasticpools.svg index dc1cef729..be13dd175 100644 --- a/docs/svg/microsoft.sql/servers/elasticpools.svg +++ b/docs/svg/microsoft.sql/servers/elasticpools.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.sql/servers/jobagents.svg b/docs/svg/microsoft.sql/servers/jobagents.svg index e37e37c77..bb306b13c 100644 --- a/docs/svg/microsoft.sql/servers/jobagents.svg +++ b/docs/svg/microsoft.sql/servers/jobagents.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.sql/virtualclusters.svg b/docs/svg/microsoft.sql/virtualclusters.svg index 548866674..e2235a763 100644 --- a/docs/svg/microsoft.sql/virtualclusters.svg +++ b/docs/svg/microsoft.sql/virtualclusters.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.sqlvirtualmachine/sqlvirtualmachines.svg b/docs/svg/microsoft.sqlvirtualmachine/sqlvirtualmachines.svg index 10474b1de..1ffd2cf84 100644 --- a/docs/svg/microsoft.sqlvirtualmachine/sqlvirtualmachines.svg +++ b/docs/svg/microsoft.sqlvirtualmachine/sqlvirtualmachines.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.storageactions/storagetasks.svg b/docs/svg/microsoft.storageactions/storagetasks.svg index 901e8698f..932e7cdd3 100644 --- a/docs/svg/microsoft.storageactions/storagetasks.svg +++ b/docs/svg/microsoft.storageactions/storagetasks.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.storagecache/amlfilesystems.svg b/docs/svg/microsoft.storagecache/amlfilesystems.svg index f53001714..bc628c1f0 100644 --- a/docs/svg/microsoft.storagecache/amlfilesystems.svg +++ b/docs/svg/microsoft.storagecache/amlfilesystems.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.storagecache/caches.svg b/docs/svg/microsoft.storagecache/caches.svg index 22744dc8f..18fb713a8 100644 --- a/docs/svg/microsoft.storagecache/caches.svg +++ b/docs/svg/microsoft.storagecache/caches.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.storagediscovery/storagediscoveryworkspaces.svg b/docs/svg/microsoft.storagediscovery/storagediscoveryworkspaces.svg new file mode 100644 index 000000000..906a74f6a --- /dev/null +++ b/docs/svg/microsoft.storagediscovery/storagediscoveryworkspaces.svg @@ -0,0 +1 @@ + diff --git a/docs/svg/microsoft.storagemover/storagemovers.svg b/docs/svg/microsoft.storagemover/storagemovers.svg index a7db41e50..0de1a29b9 100644 --- a/docs/svg/microsoft.storagemover/storagemovers.svg +++ b/docs/svg/microsoft.storagemover/storagemovers.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.storagesync/storagesyncservices.svg b/docs/svg/microsoft.storagesync/storagesyncservices.svg index 4bcb62660..93f27bbda 100644 --- a/docs/svg/microsoft.storagesync/storagesyncservices.svg +++ b/docs/svg/microsoft.storagesync/storagesyncservices.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.streamanalytics/clusters.svg b/docs/svg/microsoft.streamanalytics/clusters.svg index dc951f711..18ab6a82f 100644 --- a/docs/svg/microsoft.streamanalytics/clusters.svg +++ b/docs/svg/microsoft.streamanalytics/clusters.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.streamanalytics/streamingjobs.svg b/docs/svg/microsoft.streamanalytics/streamingjobs.svg index 763125e17..cd73ae24a 100644 --- a/docs/svg/microsoft.streamanalytics/streamingjobs.svg +++ b/docs/svg/microsoft.streamanalytics/streamingjobs.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.sustainabilityservices/calculations.svg b/docs/svg/microsoft.sustainabilityservices/calculations.svg index 9d6f2b4e2..ba4287688 100644 --- a/docs/svg/microsoft.sustainabilityservices/calculations.svg +++ b/docs/svg/microsoft.sustainabilityservices/calculations.svg @@ -1,2 +1,17 @@ - + + + + + + + + + + + + + + + + diff --git a/docs/svg/microsoft.synapse/privatelinkhubs.svg b/docs/svg/microsoft.synapse/privatelinkhubs.svg index 13a850954..b6a6feb87 100644 --- a/docs/svg/microsoft.synapse/privatelinkhubs.svg +++ b/docs/svg/microsoft.synapse/privatelinkhubs.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.synapse/workspaces.svg b/docs/svg/microsoft.synapse/workspaces.svg index 7e7b53767..bab030f4e 100644 --- a/docs/svg/microsoft.synapse/workspaces.svg +++ b/docs/svg/microsoft.synapse/workspaces.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.synapse/workspaces/bigdatapools.svg b/docs/svg/microsoft.synapse/workspaces/bigdatapools.svg index e7e75e751..027b2cd26 100644 --- a/docs/svg/microsoft.synapse/workspaces/bigdatapools.svg +++ b/docs/svg/microsoft.synapse/workspaces/bigdatapools.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.synapse/workspaces/kustopools.svg b/docs/svg/microsoft.synapse/workspaces/kustopools.svg index 091ac7b8d..4ab8a84ab 100644 --- a/docs/svg/microsoft.synapse/workspaces/kustopools.svg +++ b/docs/svg/microsoft.synapse/workspaces/kustopools.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.synapse/workspaces/kustopools/databases.svg b/docs/svg/microsoft.synapse/workspaces/kustopools/databases.svg index ba62b2f0d..5fcac5d34 100644 --- a/docs/svg/microsoft.synapse/workspaces/kustopools/databases.svg +++ b/docs/svg/microsoft.synapse/workspaces/kustopools/databases.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.synapse/workspaces/scopepools.svg b/docs/svg/microsoft.synapse/workspaces/scopepools.svg index cf4cfdb0a..152a43739 100644 --- a/docs/svg/microsoft.synapse/workspaces/scopepools.svg +++ b/docs/svg/microsoft.synapse/workspaces/scopepools.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.synapse/workspaces/sqlpools.svg b/docs/svg/microsoft.synapse/workspaces/sqlpools.svg index 472dfe41b..fccbeb568 100644 --- a/docs/svg/microsoft.synapse/workspaces/sqlpools.svg +++ b/docs/svg/microsoft.synapse/workspaces/sqlpools.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.test/healthdataaiservices.svg b/docs/svg/microsoft.test/healthdataaiservices.svg index f3e49ab69..26bfde834 100644 --- a/docs/svg/microsoft.test/healthdataaiservices.svg +++ b/docs/svg/microsoft.test/healthdataaiservices.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.toolchainorchestrator/diagnostics.svg b/docs/svg/microsoft.toolchainorchestrator/diagnostics.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.toolchainorchestrator/diagnostics.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.videoindexer/accounts.svg b/docs/svg/microsoft.videoindexer/accounts.svg index ec713023d..deb2e2d2e 100644 --- a/docs/svg/microsoft.videoindexer/accounts.svg +++ b/docs/svg/microsoft.videoindexer/accounts.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.virtualmachineimages/imagetemplates.svg b/docs/svg/microsoft.virtualmachineimages/imagetemplates.svg index 5d99f6bea..32a68f5c5 100644 --- a/docs/svg/microsoft.virtualmachineimages/imagetemplates.svg +++ b/docs/svg/microsoft.virtualmachineimages/imagetemplates.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.voiceservices/communicationsgateways.svg b/docs/svg/microsoft.voiceservices/communicationsgateways.svg index 11e951e1f..e591c8364 100644 --- a/docs/svg/microsoft.voiceservices/communicationsgateways.svg +++ b/docs/svg/microsoft.voiceservices/communicationsgateways.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.voiceservices/communicationsgateways/testlines.svg b/docs/svg/microsoft.voiceservices/communicationsgateways/testlines.svg index 11e951e1f..e591c8364 100644 --- a/docs/svg/microsoft.voiceservices/communicationsgateways/testlines.svg +++ b/docs/svg/microsoft.voiceservices/communicationsgateways/testlines.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.web/connectiongateways.svg b/docs/svg/microsoft.web/connectiongateways.svg index 3cdca7d52..07d054eda 100644 --- a/docs/svg/microsoft.web/connectiongateways.svg +++ b/docs/svg/microsoft.web/connectiongateways.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.web/connections.svg b/docs/svg/microsoft.web/connections.svg index dd96298ac..8d34de7e7 100644 --- a/docs/svg/microsoft.web/connections.svg +++ b/docs/svg/microsoft.web/connections.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.web/customapis.svg b/docs/svg/microsoft.web/customapis.svg index f09d69378..07ee3ca21 100644 --- a/docs/svg/microsoft.web/customapis.svg +++ b/docs/svg/microsoft.web/customapis.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.web/hostingenvironments.svg b/docs/svg/microsoft.web/hostingenvironments.svg index 85c79ba42..0d6812a93 100644 --- a/docs/svg/microsoft.web/hostingenvironments.svg +++ b/docs/svg/microsoft.web/hostingenvironments.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.web/kubeenvironments.svg b/docs/svg/microsoft.web/kubeenvironments.svg index 347cf25fa..0d6812a93 100644 --- a/docs/svg/microsoft.web/kubeenvironments.svg +++ b/docs/svg/microsoft.web/kubeenvironments.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.web/staticsites.svg b/docs/svg/microsoft.web/staticsites.svg index 7475d9311..76e3ee72d 100644 --- a/docs/svg/microsoft.web/staticsites.svg +++ b/docs/svg/microsoft.web/staticsites.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.weightsandbiases/instances.svg b/docs/svg/microsoft.weightsandbiases/instances.svg index 55a4086b4..8f58e085b 100644 --- a/docs/svg/microsoft.weightsandbiases/instances.svg +++ b/docs/svg/microsoft.weightsandbiases/instances.svg @@ -1,7 +1 @@ - - - - - - - + diff --git a/docs/svg/microsoft.workloads/instancegroupmonitors.svg b/docs/svg/microsoft.workloads/instancegroupmonitors.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.workloads/instancegroupmonitors.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.workloads/instancehealthdefinitions.svg b/docs/svg/microsoft.workloads/instancehealthdefinitions.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.workloads/instancehealthdefinitions.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.workloads/instancehealthdefinitions/signaldefinitions.svg b/docs/svg/microsoft.workloads/instancehealthdefinitions/signaldefinitions.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.workloads/instancehealthdefinitions/signaldefinitions.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.workloads/instancemonitors.svg b/docs/svg/microsoft.workloads/instancemonitors.svg new file mode 100644 index 000000000..9d6f2b4e2 --- /dev/null +++ b/docs/svg/microsoft.workloads/instancemonitors.svg @@ -0,0 +1,2 @@ + + diff --git a/docs/svg/microsoft.workloads/monitors.svg b/docs/svg/microsoft.workloads/monitors.svg index 938051812..dfd0aea1e 100644 --- a/docs/svg/microsoft.workloads/monitors.svg +++ b/docs/svg/microsoft.workloads/monitors.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.workloads/sapvirtualinstances.svg b/docs/svg/microsoft.workloads/sapvirtualinstances.svg index ea41de759..1140706ce 100644 --- a/docs/svg/microsoft.workloads/sapvirtualinstances.svg +++ b/docs/svg/microsoft.workloads/sapvirtualinstances.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.workloads/sapvirtualinstances/applicationinstances.svg b/docs/svg/microsoft.workloads/sapvirtualinstances/applicationinstances.svg index 51e9eac6b..05cc409a8 100644 --- a/docs/svg/microsoft.workloads/sapvirtualinstances/applicationinstances.svg +++ b/docs/svg/microsoft.workloads/sapvirtualinstances/applicationinstances.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.workloads/sapvirtualinstances/centralinstances.svg b/docs/svg/microsoft.workloads/sapvirtualinstances/centralinstances.svg index 1a50946bd..1d12a7a17 100644 --- a/docs/svg/microsoft.workloads/sapvirtualinstances/centralinstances.svg +++ b/docs/svg/microsoft.workloads/sapvirtualinstances/centralinstances.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.workloads/sapvirtualinstances/databaseinstances.svg b/docs/svg/microsoft.workloads/sapvirtualinstances/databaseinstances.svg index e5fb3dcc3..3b60ee9c9 100644 --- a/docs/svg/microsoft.workloads/sapvirtualinstances/databaseinstances.svg +++ b/docs/svg/microsoft.workloads/sapvirtualinstances/databaseinstances.svg @@ -1 +1 @@ - + diff --git a/docs/svg/microsoft.zerotrustsegmentation/segmentationmanagers.svg b/docs/svg/microsoft.zerotrustsegmentation/segmentationmanagers.svg index 9d6f2b4e2..ba4287688 100644 --- a/docs/svg/microsoft.zerotrustsegmentation/segmentationmanagers.svg +++ b/docs/svg/microsoft.zerotrustsegmentation/segmentationmanagers.svg @@ -1,2 +1,17 @@ - + + + + + + + + + + + + + + + + diff --git a/docs/svg/mongodb.atlas/organizations.svg b/docs/svg/mongodb.atlas/organizations.svg index 163d150aa..3fff55539 100644 --- a/docs/svg/mongodb.atlas/organizations.svg +++ b/docs/svg/mongodb.atlas/organizations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/neon.postgres/organizations.svg b/docs/svg/neon.postgres/organizations.svg index 794ac1a7a..312591e20 100644 --- a/docs/svg/neon.postgres/organizations.svg +++ b/docs/svg/neon.postgres/organizations.svg @@ -1 +1 @@ - + diff --git a/docs/svg/nginx.nginxplus/nginxdeployments.svg b/docs/svg/nginx.nginxplus/nginxdeployments.svg index 89656c2da..700877df1 100644 --- a/docs/svg/nginx.nginxplus/nginxdeployments.svg +++ b/docs/svg/nginx.nginxplus/nginxdeployments.svg @@ -1 +1 @@ - + diff --git a/docs/svg/oracle.database/autonomousdatabases.svg b/docs/svg/oracle.database/autonomousdatabases.svg index 5dbb20c4b..c930b255d 100644 --- a/docs/svg/oracle.database/autonomousdatabases.svg +++ b/docs/svg/oracle.database/autonomousdatabases.svg @@ -1 +1 @@ - + diff --git a/docs/svg/oracle.database/cloudexadatainfrastructures.svg b/docs/svg/oracle.database/cloudexadatainfrastructures.svg index 035d8c9a2..931e2c39d 100644 --- a/docs/svg/oracle.database/cloudexadatainfrastructures.svg +++ b/docs/svg/oracle.database/cloudexadatainfrastructures.svg @@ -1 +1 @@ - + diff --git a/docs/svg/oracle.database/cloudvmclusters.svg b/docs/svg/oracle.database/cloudvmclusters.svg index 30b4a933d..0b2f2ae7e 100644 --- a/docs/svg/oracle.database/cloudvmclusters.svg +++ b/docs/svg/oracle.database/cloudvmclusters.svg @@ -1 +1 @@ - + diff --git a/docs/svg/oracle.database/exadbvmclusters.svg b/docs/svg/oracle.database/exadbvmclusters.svg new file mode 100644 index 000000000..0b2f2ae7e --- /dev/null +++ b/docs/svg/oracle.database/exadbvmclusters.svg @@ -0,0 +1 @@ + diff --git a/docs/svg/oracle.database/exascaledbstoragevaults.svg b/docs/svg/oracle.database/exascaledbstoragevaults.svg new file mode 100644 index 000000000..0b2f2ae7e --- /dev/null +++ b/docs/svg/oracle.database/exascaledbstoragevaults.svg @@ -0,0 +1 @@ + diff --git a/docs/svg/oracle.database/oraclesubscriptions.svg b/docs/svg/oracle.database/oraclesubscriptions.svg index c406922fa..4b537e224 100644 --- a/docs/svg/oracle.database/oraclesubscriptions.svg +++ b/docs/svg/oracle.database/oraclesubscriptions.svg @@ -1 +1 @@ - + diff --git a/docs/svg/paloaltonetworks.cloudngfw/firewalls.svg b/docs/svg/paloaltonetworks.cloudngfw/firewalls.svg index fadf47e4f..a873f2a7a 100644 --- a/docs/svg/paloaltonetworks.cloudngfw/firewalls.svg +++ b/docs/svg/paloaltonetworks.cloudngfw/firewalls.svg @@ -1 +1 @@ - + diff --git a/docs/svg/paloaltonetworks.cloudngfw/globalrulestacks.svg b/docs/svg/paloaltonetworks.cloudngfw/globalrulestacks.svg index b8c35699d..0055ad1a3 100644 --- a/docs/svg/paloaltonetworks.cloudngfw/globalrulestacks.svg +++ b/docs/svg/paloaltonetworks.cloudngfw/globalrulestacks.svg @@ -1 +1 @@ - + diff --git a/docs/svg/paloaltonetworks.cloudngfw/localrulestacks.svg b/docs/svg/paloaltonetworks.cloudngfw/localrulestacks.svg index 92bb15460..e6c3b60d6 100644 --- a/docs/svg/paloaltonetworks.cloudngfw/localrulestacks.svg +++ b/docs/svg/paloaltonetworks.cloudngfw/localrulestacks.svg @@ -1 +1 @@ - + diff --git a/docs/svg/pinecone.vectordb/organizations.svg b/docs/svg/pinecone.vectordb/organizations.svg index e91c86fac..f283bfbb4 100644 --- a/docs/svg/pinecone.vectordb/organizations.svg +++ b/docs/svg/pinecone.vectordb/organizations.svg @@ -1 +1 @@ - + diff --git a/docs/workbooks.md b/docs/workbooks.md index 28f595829..3df52e0ee 100644 --- a/docs/workbooks.md +++ b/docs/workbooks.md @@ -19,13 +19,16 @@ Engineering hub to maximize cloud ROI through FinOps. FinOps workbooks are Azure workbooks that provide a series of tools to help engineers perform targeted FinOps tasks, modeled after the Well-Architected Framework guidance. -

-

What's new in February 2025v0.8

-

+ + ## A central hub for efficiency and control @@ -70,9 +73,9 @@ FinOps workbooks require the Workbook Contributor role to deplo Deploy to Azure Deploy to Azure Gov -

-

Estimated cost for FinOps workbooks

-

+

+

Estimated cost for FinOps workbooks

+

FinOps workbooks do not incur any cost.

@@ -96,6 +99,6 @@ FinOps workbooks require the Workbook Contributor role to deplo
About the workbooks -💜 Give feedback +💜 Give feedback
diff --git a/package-lock.json b/package-lock.json index 68f010699..45d523ce1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ftk", - "version": "0.8.0", + "version": "0.9.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "ftk", - "version": "0.8.0", + "version": "0.9.0", "license": "MIT", "devDependencies": { "all-contributors-cli": "^6.26.1" diff --git a/package.json b/package.json index d33825063..7ca510ffa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ftk", - "version": "0.8.0", + "version": "0.9.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/open-data/PricingUnits.csv b/src/open-data/PricingUnits.csv index b4c71b711..3f37a8eaf 100644 --- a/src/open-data/PricingUnits.csv +++ b/src/open-data/PricingUnits.csv @@ -313,6 +313,7 @@ UnitOfMeasure,AccountTypes,PricingBlockSize,DistinctUnits "150 Hours",EA,150,Hours "1B",MCA,1000000000,Units "1K","MCA, EA",1000,Units +"1K/Day",MCA,1000,Units/Day "1K/Hour",MCA,1000,Units/Hour "1K/Month",MCA,1000,Units/Month "1M","MCA, EA",1000000,Units diff --git a/src/open-data/Regions.csv b/src/open-data/Regions.csv index 58f53e278..98daf1df4 100644 --- a/src/open-data/Regions.csv +++ b/src/open-data/Regions.csv @@ -77,7 +77,7 @@ cbr2,australiacentral2,Australia Central 2 cc,canadacentral,Canada Central central india,centralindia,Central India central us,centralus,Central US -centralcanada,canadacentral,Central Canada +centralcanada,canadacentral,Canada Central centralindia,centralindia,Central India centralus,centralus,Central US centraluseuap,centraluseuap,Central US EUAP @@ -354,6 +354,7 @@ southafricanorth,southafricanorth,South Africa North southafricaw,southafricawest,South Africa West southafricawest,southafricawest,South Africa West southcentralus,southcentralus,South Central US +southcentralus2,southcentralus2,South Central US 2 southcentralusstg,southcentralusstg,South Central US STG southeast asia,southeastasia,Southeast Asia southeast_asia,southeastasia,Southeast Asia diff --git a/src/open-data/ResourceTypes.csv b/src/open-data/ResourceTypes.csv index 6267a35d7..22c14cff7 100644 --- a/src/open-data/ResourceTypes.csv +++ b/src/open-data/ResourceTypes.csv @@ -3,7 +3,7 @@ "astronomer.astro/organizations","Astro Organization","Apache Airflow™ on Astro - An Azure Native ISV Service","Astro Organization","Astro Organization","false","This SaaS offering allows you to manage your Astro resource as an integrated native service on Azure. You can easily create an Astro organization, login securely via OpenID Single-Sign On, and run and manage as many Airflow deployments as you need. The usage billing will be streamlined alongside other Azure usages via Azure marketplace.","https://microsoft.github.io/finops-toolkit/svg/astronomer.astro/organizations.svg","[{""title"":""Learn more"",""uri"":""https://docs.astronomer.io/astro""}]" "citrix.services/xenappessentials","Citrix Virtual Apps Essentials","Citrix Virtual Apps Essentials","citrix virtual apps essentials","citrix virtual apps essentials","false","","https://microsoft.github.io/finops-toolkit/svg/citrix.services/xenappessentials.svg","" "citrix.services/xendesktopessentials","Citrix Virtual Desktops Essentials","Citrix Virtual Desktops Essentials","citrix virtual desktops essentials","citrix virtual desktops essentials","false","","https://microsoft.github.io/finops-toolkit/svg/citrix.services/xendesktopessentials.svg","" -"commvault.contentstore/cloudaccounts","Commvault Cloud Account","Commvault Cloud Accounts","commvault cloud account","commvault cloud accounts","false","A Commvault Cloud Account Resource","https://microsoft.github.io/finops-toolkit/svg/commvault.contentstore/cloudaccounts.svg","" +"commvault.contentstore/cloudaccounts","Commvault Cloud Account","Commvault Cloud Accounts","commvault cloud account","commvault cloud accounts","false","","https://microsoft.github.io/finops-toolkit/svg/commvault.contentstore/cloudaccounts.svg","" "commvault.contentstore/cloudaccounts/plans","Commvault.ContentStore cloud accounts plan","Commvault.ContentStore cloud accounts plans","commvault.contentstore cloud accounts plan","commvault.contentstore cloud accounts plans","false","A Commvault Plan Resource","https://microsoft.github.io/finops-toolkit/svg/commvault.contentstore/cloudaccounts/plans.svg","" "commvault.contentstore/cloudaccounts/protectiongroups","Commvault.ContentStore cloud accounts protection group","Commvault.ContentStore cloud accounts protection groups","commvault.contentstore cloud accounts protection group","commvault.contentstore cloud accounts protection groups","false","A Commvault Plan Resource","https://microsoft.github.io/finops-toolkit/svg/commvault.contentstore/cloudaccounts/protectiongroups.svg","" "commvault.contentstore/cloudaccounts/protectiongroups/protecteditems","Commvault.ContentStore cloud accounts protection groups protected item","Commvault.ContentStore cloud accounts protection groups protected items","commvault.contentstore cloud accounts protection groups protected item","commvault.contentstore cloud accounts protection groups protected items","false","Concrete proxy resource types can be created by aliasing this type using a specific property type.","https://microsoft.github.io/finops-toolkit/svg/commvault.contentstore/cloudaccounts/protectiongroups/protecteditems.svg","" @@ -12,20 +12,22 @@ "dynatrace.observability/monitors","Dynatrace","Azure Native Dynatrace Service","Dynatrace resource","Dynatrace resources","false","Azure Native ISV Services enable you to easily provision, manage, and tightly integrate independent software vendor (ISV) software and services on Azure. This service is developed and managed by Microsoft and Dynatrace. Azure Native Dynatrace Service is a native integration of Dynatrace with Azure. Dynatrace is a unified observability and security platform designed to help enterprises monitor and optimize dynamic hybrid cloud environments at scale. It leverages causal AI and automation to provide real-time business analytics which enables teams to deliver flawless and secure digital interactions, simplify complexity and accelerate innovation.","https://microsoft.github.io/finops-toolkit/svg/dynatrace.observability/monitors.svg","[{""title"":""Learn more"",""uri"":""https://aka.ms/partners/Dynatrace/CreateNew""}]" "github.network/networksettings","GitHub.Network network setting","GitHub.Network network settings","github.network network setting","github.network network settings","false","GitHub.Network networkSettings resource. Represents the network settings needed for vnet injection.","https://microsoft.github.io/finops-toolkit/svg/github.network/networksettings.svg","" "informatica.datamanagement/organizations","Informatica Organization","Informatica Intelligent Data Management Cloud - An Azure Native ISV Service","Informatica organization","Informatica Intelligent Data Management Cloud - An Azure Native ISV Service","false","Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.","https://microsoft.github.io/finops-toolkit/svg/informatica.datamanagement/organizations.svg","" -"lambdatest.hyperexecute/organizations","Azure Native LambdaTest Cloud Service","Azure Native LambdaTest Cloud Service","Azure Native LambdaTest Cloud Service","Azure Native LambdaTest Cloud Service","false","Concrete tracked resource types can be created by aliasing this type using a specific property type.","https://microsoft.github.io/finops-toolkit/svg/lambdatest.hyperexecute/organizations.svg","" -"microsoft.aad/domainservices","Microsoft Entra Domain Services","Microsoft Entra Domain Services","Microsoft Entra Domain Services","Microsoft Entra Domain Services","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.aad/domainservices.svg","" +"lambdatest.hyperexecute/organizations","Azure Native LambdaTest Cloud Service","Azure Native LambdaTest Cloud Service","Azure Native LambdaTest Cloud Service","Azure Native LambdaTest Cloud Service","false","","https://microsoft.github.io/finops-toolkit/svg/lambdatest.hyperexecute/organizations.svg","" +"microsoft.aad/domainservices","Microsoft Entra Domain Services","Microsoft Entra Domain Services","Microsoft Entra Domain Services","Microsoft Entra Domain Services","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.aad/domainservices.svg","[{""title"":""Learn more"",""uri"":""https://learn.microsoft.com/entra/identity/domain-services/overview""}]" "microsoft.aadiam/diagnosticsettings","Microsoft.aadiam diagnostic setting","Microsoft.aadiam diagnostic settings","microsoft.aadiam diagnostic setting","microsoft.aadiam diagnostic settings","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.aadiam/diagnosticsettings.svg","" "microsoft.aadiam/privatelinkforazuread","Private Link for Microsoft Entra ID","Private Link for Microsoft Entra ID","private link for Microsoft Entra ID","private link for Microsoft Entra ID","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.aadiam/privatelinkforazuread.svg","" "microsoft.advisor/advisorscore","Microsoft.Advisor advisor score","Microsoft.Advisor advisor score","microsoft.advisor advisor score","microsoft.advisor advisor score","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.advisor/advisorscore.svg","" +"microsoft.advisor/assessments","Microsoft.Advisor assessment","Microsoft.Advisor assessments","microsoft.advisor assessment","microsoft.advisor assessments","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.advisor/assessments.svg","" "microsoft.advisor/configurations","Microsoft.Advisor configuration","Microsoft.Advisor configurations","microsoft.advisor configuration","microsoft.advisor configurations","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.advisor/configurations.svg","" "microsoft.advisor/generaterecommendations","Microsoft.Advisor generate recommendation","Microsoft.Advisor generate recommendations","microsoft.advisor generate recommendation","microsoft.advisor generate recommendations","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.advisor/generaterecommendations.svg","" "microsoft.advisor/metadata","Microsoft.Advisor metadata","Microsoft.Advisor metadata","microsoft.advisor metadata","microsoft.advisor metadata","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.advisor/metadata.svg","" "microsoft.advisor/recommendations","Microsoft.Advisor recommendation","Microsoft.Advisor recommendations","microsoft.advisor recommendation","microsoft.advisor recommendations","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.advisor/recommendations.svg","" "microsoft.advisor/recommendations/suppressions","Microsoft.Advisor recommendations suppression","Microsoft.Advisor recommendations suppressions","microsoft.advisor recommendations suppression","microsoft.advisor recommendations suppressions","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.advisor/recommendations/suppressions.svg","" +"microsoft.advisor/resiliencyreviews","Microsoft.Advisor resiliency review","Microsoft.Advisor resiliency reviews","microsoft.advisor resiliency review","microsoft.advisor resiliency reviews","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.advisor/resiliencyreviews.svg","" "microsoft.agfoodplatform/farmbeats","Azure Data Manager for Agriculture","Azure Data Manager for Agriculture","Azure Data Manager for Agriculture","Azure Data Manager for Agriculture","false","Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.agfoodplatform/farmbeats.svg","" "microsoft.agfoodplatform/farmbeatsextensiondefinitions","Microsoft.AgFoodPlatform farm beats extension definition","Microsoft.AgFoodPlatform farm beats extension definitions","microsoft.agfoodplatform farm beats extension definition","microsoft.agfoodplatform farm beats extension definitions","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.agfoodplatform/farmbeatsextensiondefinitions.svg","" "microsoft.agfoodplatform/farmbeatssolutiondefinitions","Microsoft.AgFoodPlatform farm beats solution definition","Microsoft.AgFoodPlatform farm beats solution definitions","microsoft.agfoodplatform farm beats solution definition","microsoft.agfoodplatform farm beats solution definitions","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.agfoodplatform/farmbeatssolutiondefinitions.svg","" -"microsoft.agricultureplatform/agriservices","Azure Data Manager for Agriculture","Azure Data Manager for Agriculture","Azure Data Manager for Agriculture","Azure Data Manager for Agriculture","false","Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.agricultureplatform/agriservices.svg","" +"microsoft.agricultureplatform/agriservices","Agriculture data solutions","Agriculture data solutions","Agriculture data solutions","Agriculture data solutions","false","Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.agricultureplatform/agriservices.svg","" "microsoft.akshybrid/agentpools","Microsoft.AksHybrid agent pool","Microsoft.AksHybrid agent pools","microsoft.akshybrid agent pool","microsoft.akshybrid agent pools","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.akshybrid/agentpools.svg","" "microsoft.akshybrid/provisionedclusters","Microsoft.AksHybrid provisioned cluster","Microsoft.AksHybrid provisioned clusters","microsoft.akshybrid provisioned cluster","microsoft.akshybrid provisioned clusters","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.akshybrid/provisionedclusters.svg","" "microsoft.akshybrid/upgradeprofiles","Microsoft.AksHybrid upgrade profile","Microsoft.AksHybrid upgrade profiles","microsoft.akshybrid upgrade profile","microsoft.akshybrid upgrade profiles","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.akshybrid/upgradeprofiles.svg","" @@ -66,13 +68,15 @@ "microsoft.appassessment/migrateprojects/assessments/machinestoassess","Microsoft.AppAssessment migrate projects assessments machines to asses","Microsoft.AppAssessment migrate projects assessments machines to assess","microsoft.appassessment migrate projects assessments machines to asses","microsoft.appassessment migrate projects assessments machines to assess","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.appassessment/migrateprojects/assessments/machinestoassess.svg","" "microsoft.appassessment/migrateprojects/sites","Microsoft.AppAssessment migrate projects site","Microsoft.AppAssessment migrate projects sites","microsoft.appassessment migrate projects site","microsoft.appassessment migrate projects sites","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.appassessment/migrateprojects/sites.svg","" "microsoft.appassessment/migrateprojects/sites/applianceconfigurations","Microsoft.AppAssessment migrate projects sites appliance configuration","Microsoft.AppAssessment migrate projects sites appliance configurations","microsoft.appassessment migrate projects sites appliance configuration","microsoft.appassessment migrate projects sites appliance configurations","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.appassessment/migrateprojects/sites/applianceconfigurations.svg","" -"microsoft.appcomplianceautomation/reports","Microsoft.AppComplianceAutomation report","Microsoft.AppComplianceAutomation reports","microsoft.appcomplianceautomation report","microsoft.appcomplianceautomation reports","false","A class represent an AppComplianceAutomation report resource.","https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports.svg","" -"microsoft.appcomplianceautomation/reports/evidences","Microsoft.AppComplianceAutomation reports evidence","Microsoft.AppComplianceAutomation reports evidences","microsoft.appcomplianceautomation reports evidence","microsoft.appcomplianceautomation reports evidences","false","A class represent an AppComplianceAutomation evidence resource.","https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports/evidences.svg","" -"microsoft.appcomplianceautomation/reports/scopingconfigurations","Microsoft.AppComplianceAutomation reports scoping configuration","Microsoft.AppComplianceAutomation reports scoping configurations","microsoft.appcomplianceautomation reports scoping configuration","microsoft.appcomplianceautomation reports scoping configurations","false","A class represent an AppComplianceAutomation scoping configuration resource.","https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports/scopingconfigurations.svg","" -"microsoft.appcomplianceautomation/reports/snapshots","Microsoft.AppComplianceAutomation reports snapshot","Microsoft.AppComplianceAutomation reports snapshots","microsoft.appcomplianceautomation reports snapshot","microsoft.appcomplianceautomation reports snapshots","false","A class represent a AppComplianceAutomation snapshot resource.","https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports/snapshots.svg","" -"microsoft.appcomplianceautomation/reports/webhooks","Microsoft.AppComplianceAutomation reports webhook","Microsoft.AppComplianceAutomation reports webhooks","microsoft.appcomplianceautomation reports webhook","microsoft.appcomplianceautomation reports webhooks","false","A class represent an AppComplianceAutomation webhook resource.","https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports/webhooks.svg","" +"microsoft.appcomplianceautomation/reports","Microsoft.AppComplianceAutomation report","Microsoft.AppComplianceAutomation reports","microsoft.appcomplianceautomation report","microsoft.appcomplianceautomation reports","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports.svg","" +"microsoft.appcomplianceautomation/reports/evidences","Microsoft.AppComplianceAutomation reports evidence","Microsoft.AppComplianceAutomation reports evidences","microsoft.appcomplianceautomation reports evidence","microsoft.appcomplianceautomation reports evidences","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports/evidences.svg","" +"microsoft.appcomplianceautomation/reports/scopingconfigurations","Microsoft.AppComplianceAutomation reports scoping configuration","Microsoft.AppComplianceAutomation reports scoping configurations","microsoft.appcomplianceautomation reports scoping configuration","microsoft.appcomplianceautomation reports scoping configurations","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports/scopingconfigurations.svg","" +"microsoft.appcomplianceautomation/reports/snapshots","Microsoft.AppComplianceAutomation reports snapshot","Microsoft.AppComplianceAutomation reports snapshots","microsoft.appcomplianceautomation reports snapshot","microsoft.appcomplianceautomation reports snapshots","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports/snapshots.svg","" +"microsoft.appcomplianceautomation/reports/snapshots/controls","Microsoft.AppComplianceAutomation reports snapshots control","Microsoft.AppComplianceAutomation reports snapshots controls","microsoft.appcomplianceautomation reports snapshots control","microsoft.appcomplianceautomation reports snapshots controls","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports/snapshots/controls.svg","" +"microsoft.appcomplianceautomation/reports/webhooks","Microsoft.AppComplianceAutomation reports webhook","Microsoft.AppComplianceAutomation reports webhooks","microsoft.appcomplianceautomation reports webhook","microsoft.appcomplianceautomation reports webhooks","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports/webhooks.svg","" "microsoft.appconfiguration/configurationstores","App Configuration","App Configuration","app configuration","app configuration","false","Azure App Configuration lets you centrally manage application configuration and feature flags in the cloud. Create a resource today to be able to manage your configuration as code, propagate changes without having to redeploy, and easily integrate configuration with CI/CD processes.","https://microsoft.github.io/finops-toolkit/svg/microsoft.appconfiguration/configurationstores.svg","[{""title"":""Learn more about App Configuration & Pricing"",""uri"":""https://azure.microsoft.com/products/app-configuration/#overview""},{""title"":""Learn how to use the service with our documentation"",""uri"":""https://learn.microsoft.com/azure/azure-app-configuration/overview""}]" "microsoft.appplatform/spring","Azure Spring Apps","Azure Spring Apps","Azure Spring Apps","Azure Spring Apps","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.appplatform/spring.svg","[{""title"":""Learn more about Azure Spring Apps"",""uri"":""https://aka.ms/azurespringapps""}]" +"microsoft.appsecurity/appprotectmanagedrulesetmanifests","Microsoft.AppSecurity app protect managed rule set manifest","Microsoft.AppSecurity app protect managed rule set manifests","microsoft.appsecurity app protect managed rule set manifest","microsoft.appsecurity app protect managed rule set manifests","false","The managed rule set manifest resource definition.","https://microsoft.github.io/finops-toolkit/svg/microsoft.appsecurity/appprotectmanagedrulesetmanifests.svg","" "microsoft.appsecurity/policies","App Protect Policy","App Protect Policies","app protect policy","app protect policies","false","App Protect Policies are used to define the security policies (TBD)","https://microsoft.github.io/finops-toolkit/svg/microsoft.appsecurity/policies.svg","" "microsoft.arc/all","Azure Arc enabled resource","Azure Arc enabled resources","Azure Arc enabled resource","Azure Arc enabled resources","false","Azure Arc extends Azure management tools to on-premises, multi-cloud environments, and the edge. Start here by adding any of your existing resources.","https://microsoft.github.io/finops-toolkit/svg/microsoft.arc/all.svg","[{""title"":""Learn more"",""uri"":""https://aka.ms/moreaboutazurearc""}]" "microsoft.arc/allfairfax","Azure Arc enabled resource","Azure Arc enabled resources","Azure Arc enabled resource","Azure Arc enabled resources","false","Azure Arc extends Azure management tools to on-premises, multi-cloud environments, and the edge. Start here by adding any of your existing resources.","https://microsoft.github.io/finops-toolkit/svg/microsoft.arc/allfairfax.svg","[{""title"":""Learn more"",""uri"":""https://aka.ms/moreaboutazurearc""}]" @@ -254,7 +258,9 @@ "microsoft.azureactivedirectory/ciamdirectories","External Configuration Tenant","External Configuration Tenant","External Configuration Tenant","External Configuration Tenant","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azureactivedirectory/ciamdirectories.svg","" "microsoft.azureactivedirectory/guestusages","Guest Usage","Guest Usages","guest usage","guest usages","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azureactivedirectory/guestusages.svg","" "microsoft.azurearcdata/datacontrollers","Azure Arc data controller","Azure Arc data controllers","Azure Arc data controller","Azure Arc data controllers","false","Create an Azure Arc data controller to enable Azure data services in the Kubernetes environment of your choice.","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurearcdata/datacontrollers.svg","[{""title"":""Learn more"",""uri"":""https://aka.ms/azurearcdata""}]" +"microsoft.azurearcdata/mysqlserver","MySql Server - Azure Arc","MySql Server - Azure Arc","MySql Server - Azure Arc","MySql Server - Azure Arc","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurearcdata/mysqlserver.svg","" "microsoft.azurearcdata/postgresinstances","PostgreSQL server – Azure Arc","PostgreSQL servers – Azure Arc","PostgreSQL server – Azure Arc","PostgreSQL servers – Azure Arc","false","Create a semi-managed PostgreSQL enabled by Azure Arc on the infrastructure of your choice (on your premises, in the cloud, at the edge), with built-in management capabilities that drastically reduces your management overhead and meets your requirements of data residency and customer control.","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurearcdata/postgresinstances.svg","[{""title"":""Learn more"",""uri"":""https://aka.ms/arcpostgresqlhyperscale""}]" +"microsoft.azurearcdata/postgressqlserver","PostgresSql Server - Azure Arc","PostgresSql Server - Azure Arc","PostgresSql Server - Azure Arc","PostgresSql Server - Azure Arc","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurearcdata/postgressqlserver.svg","" "microsoft.azurearcdata/sqlmanagedinstances","SQL managed instance - Azure Arc","SQL managed instances - Azure Arc","SQL managed instance - Azure Arc","SQL managed instances - Azure Arc","false","Create a fully managed SQL Managed Instance enabled by Azure Arc on the infrastructure of your choice, with built-in management capabilities that drastically reduce your management overhead.","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurearcdata/sqlmanagedinstances.svg","[{""title"":""Learn more"",""uri"":""https://docs.microsoft.com/azure/azure-arc/data/managed-instance-overview""}]" "microsoft.azurearcdata/sqlserveresulicenses","SQL Server ESU license","SQL Server ESU licenses","SQL Server ESU license","SQL Server ESU licenses","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurearcdata/sqlserveresulicenses.svg","" "microsoft.azurearcdata/sqlserverinstances","SQL Server - Azure Arc","SQL Server - Azure Arc","SQL Server - Azure Arc","SQL Server - Azure Arc","false","SQL Server enabled by Azure Arc allows you to manage your global inventory of SQL servers, protect SQL Server instances with Microsoft Defender for Cloud or periodically assess and tune the health of your SQL Server configurations.","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurearcdata/sqlserverinstances.svg","[{""title"":""Learn more"",""uri"":""https://aka.ms/arc-enabled-sql-server""}]" @@ -263,23 +269,24 @@ "microsoft.azurebusinesscontinuity/deletedunifiedprotecteditems","Microsoft.AzureBusinessContinuity deleted unified protected item","Microsoft.AzureBusinessContinuity deleted unified protected items","microsoft.azurebusinesscontinuity deleted unified protected item","microsoft.azurebusinesscontinuity deleted unified protected items","false","A DeletedUnifiedProtectedItem represents a protected item by backup or replication solution of deleted resource.","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurebusinesscontinuity/deletedunifiedprotecteditems.svg","" "microsoft.azurebusinesscontinuity/unifiedprotecteditems","Microsoft.AzureBusinessContinuity unified protected item","Microsoft.AzureBusinessContinuity unified protected items","microsoft.azurebusinesscontinuity unified protected item","microsoft.azurebusinesscontinuity unified protected items","false","A UnifiedProtectedItem represents a protected item by backup or replication solution.","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurebusinesscontinuity/unifiedprotecteditems.svg","" "microsoft.azurecis/aadapplications","Microsoft.AzureCis AAD application","Microsoft.AzureCis AAD applications","microsoft.azurecis aad application","microsoft.azurecis aad applications","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/aadapplications.svg","" -"microsoft.azurecis/addressrecords","Microsoft.AzureCis address record","Microsoft.AzureCis address records","microsoft.azurecis address record","microsoft.azurecis address records","false","AddressRecord Resource","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/addressrecords.svg","" -"microsoft.azurecis/autopilotenvironments","Microsoft.AzureCis autopilot environment","Microsoft.AzureCis autopilot environments","microsoft.azurecis autopilot environment","microsoft.azurecis autopilot environments","false","Environment Resource","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/autopilotenvironments.svg","" -"microsoft.azurecis/autopilotmachinefunctions","Microsoft.AzureCis autopilot machine function","Microsoft.AzureCis autopilot machine functions","microsoft.azurecis autopilot machine function","microsoft.azurecis autopilot machine functions","false","AutopilotMachineFunction Resource","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/autopilotmachinefunctions.svg","" -"microsoft.azurecis/autopilotsoftwareloadbalancevirtualips","Microsoft.AzureCis auto pilot software load balance virtual IP","Microsoft.AzureCis auto pilot software load balance virtual ips","microsoft.azurecis auto pilot software load balance virtual ip","microsoft.azurecis auto pilot software load balance virtual ips","false","Autopilot software load balance VIP Resource","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/autopilotsoftwareloadbalancevirtualips.svg","" -"microsoft.azurecis/canonicalnamerecords","Microsoft.AzureCis canonical name record","Microsoft.AzureCis canonical name records","microsoft.azurecis canonical name record","microsoft.azurecis canonical name records","false","CanonicalNameRecord Resource","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/canonicalnamerecords.svg","" -"microsoft.azurecis/dsmsallowlists","Microsoft.AzureCis ds msallowlist","Microsoft.AzureCis ds msallowlists","microsoft.azurecis ds msallowlist","microsoft.azurecis ds msallowlists","false","dsmsAllowlist Resource","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dsmsallowlists.svg","" -"microsoft.azurecis/dsmscertificates","Microsoft.AzureCis dsms certificate","Microsoft.AzureCis dsms certificates","microsoft.azurecis dsms certificate","microsoft.azurecis dsms certificates","false","dsmsCertificate Resource","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dsmscertificates.svg","" -"microsoft.azurecis/dsmsrootfolders","Microsoft.AzureCis dsms root folder","Microsoft.AzureCis dsms root folders","microsoft.azurecis dsms root folder","microsoft.azurecis dsms root folders","false","dsmsRootFolder Resource","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dsmsrootfolders.svg","" -"microsoft.azurecis/dstsapplications","Microsoft.AzureCis dsts application","Microsoft.AzureCis dsts applications","microsoft.azurecis dsts application","microsoft.azurecis dsts applications","false","dstsApplication Resource","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dstsapplications.svg","" -"microsoft.azurecis/dstsserviceaccounts","Microsoft.AzureCis dsts service account","Microsoft.AzureCis dsts service accounts","microsoft.azurecis dsts service account","microsoft.azurecis dsts service accounts","false","dstsServiceAccount Resource.","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dstsserviceaccounts.svg","" -"microsoft.azurecis/dstsserviceclientidentities","Microsoft.AzureCis dsts service client identity","Microsoft.AzureCis dsts service client identities","microsoft.azurecis dsts service client identity","microsoft.azurecis dsts service client identities","false","dstsServiceClientIdentityResource Resource","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dstsserviceclientidentities.svg","" -"microsoft.azurecis/genericgenevaactions","Microsoft.AzureCis generic geneva action","Microsoft.AzureCis generic geneva actions","microsoft.azurecis generic geneva action","microsoft.azurecis generic geneva actions","false","genericGenevaActions Resource","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/genericgenevaactions.svg","" +"microsoft.azurecis/addressrecords","Microsoft.AzureCis address record","Microsoft.AzureCis address records","microsoft.azurecis address record","microsoft.azurecis address records","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/addressrecords.svg","" +"microsoft.azurecis/autopilotenvironments","Microsoft.AzureCis autopilot environment","Microsoft.AzureCis autopilot environments","microsoft.azurecis autopilot environment","microsoft.azurecis autopilot environments","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/autopilotenvironments.svg","" +"microsoft.azurecis/autopilotmachinefunctions","Microsoft.AzureCis autopilot machine function","Microsoft.AzureCis autopilot machine functions","microsoft.azurecis autopilot machine function","microsoft.azurecis autopilot machine functions","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/autopilotmachinefunctions.svg","" +"microsoft.azurecis/autopilotsoftwareloadbalancevirtualips","Microsoft.AzureCis auto pilot software load balance virtual IP","Microsoft.AzureCis auto pilot software load balance virtual ips","microsoft.azurecis auto pilot software load balance virtual ip","microsoft.azurecis auto pilot software load balance virtual ips","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/autopilotsoftwareloadbalancevirtualips.svg","" +"microsoft.azurecis/canonicalnamerecords","Microsoft.AzureCis canonical name record","Microsoft.AzureCis canonical name records","microsoft.azurecis canonical name record","microsoft.azurecis canonical name records","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/canonicalnamerecords.svg","" +"microsoft.azurecis/dsmsallowlists","Microsoft.AzureCis ds msallowlist","Microsoft.AzureCis ds msallowlists","microsoft.azurecis ds msallowlist","microsoft.azurecis ds msallowlists","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dsmsallowlists.svg","" +"microsoft.azurecis/dsmscertificates","Microsoft.AzureCis dsms certificate","Microsoft.AzureCis dsms certificates","microsoft.azurecis dsms certificate","microsoft.azurecis dsms certificates","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dsmscertificates.svg","" +"microsoft.azurecis/dsmsrootfolders","Microsoft.AzureCis dsms root folder","Microsoft.AzureCis dsms root folders","microsoft.azurecis dsms root folder","microsoft.azurecis dsms root folders","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dsmsrootfolders.svg","" +"microsoft.azurecis/dstsapplications","Microsoft.AzureCis dsts application","Microsoft.AzureCis dsts applications","microsoft.azurecis dsts application","microsoft.azurecis dsts applications","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dstsapplications.svg","" +"microsoft.azurecis/dstsserviceaccounts","Microsoft.AzureCis dsts service account","Microsoft.AzureCis dsts service accounts","microsoft.azurecis dsts service account","microsoft.azurecis dsts service accounts","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dstsserviceaccounts.svg","" +"microsoft.azurecis/dstsserviceclientidentities","Microsoft.AzureCis dsts service client identity","Microsoft.AzureCis dsts service client identities","microsoft.azurecis dsts service client identity","microsoft.azurecis dsts service client identities","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dstsserviceclientidentities.svg","" +"microsoft.azurecis/genericgenevaactions","Microsoft.AzureCis generic geneva action","Microsoft.AzureCis generic geneva actions","microsoft.azurecis generic geneva action","microsoft.azurecis generic geneva actions","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/genericgenevaactions.svg","" "microsoft.azurecis/plannedquotas","Microsoft.AzureCis planned quota","Microsoft.AzureCis planned quotas","microsoft.azurecis planned quota","microsoft.azurecis planned quotas","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/plannedquotas.svg","" -"microsoft.azurecis/pointerrecords","Microsoft.AzureCis pointer record","Microsoft.AzureCis pointer records","microsoft.azurecis pointer record","microsoft.azurecis pointer records","false","Pointer record resource","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/pointerrecords.svg","" +"microsoft.azurecis/pointerrecords","Microsoft.AzureCis pointer record","Microsoft.AzureCis pointer records","microsoft.azurecis pointer record","microsoft.azurecis pointer records","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/pointerrecords.svg","" "microsoft.azurecis/publishconfigvalues","Microsoft.AzureCis publish config value","Microsoft.AzureCis publish config values","microsoft.azurecis publish config value","microsoft.azurecis publish config values","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/publishconfigvalues.svg","" -"microsoft.azurecis/pushagentv2accounts","Microsoft.AzureCis push agent v2 account","Microsoft.AzureCis push agent v2 accounts","microsoft.azurecis push agent v2 account","microsoft.azurecis push agent v2 accounts","false","PushAgentV2Account Resource","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/pushagentv2accounts.svg","" -"microsoft.azurecis/servicerecords","Microsoft.AzureCis service record","Microsoft.AzureCis service records","microsoft.azurecis service record","microsoft.azurecis service records","false","ServiceRecord Resource","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/servicerecords.svg","" +"microsoft.azurecis/pushagentv2accounts","Microsoft.AzureCis push agent v2 account","Microsoft.AzureCis push agent v2 accounts","microsoft.azurecis push agent v2 account","microsoft.azurecis push agent v2 accounts","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/pushagentv2accounts.svg","" +"microsoft.azurecis/servicerecords","Microsoft.AzureCis service record","Microsoft.AzureCis service records","microsoft.azurecis service record","microsoft.azurecis service records","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/servicerecords.svg","" +"microsoft.azurecis/sharedconfigvalues","Microsoft.AzureCis shared config value","Microsoft.AzureCis shared config values","microsoft.azurecis shared config value","microsoft.azurecis shared config values","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/sharedconfigvalues.svg","" "microsoft.azuredatatransfer/connections","Connection","Connections","connection","connections","false","Utilize Azure Data Transfer to securely transfer data between various environments.","https://microsoft.github.io/finops-toolkit/svg/microsoft.azuredatatransfer/connections.svg","" "microsoft.azuredatatransfer/connections/flows","Flow","Flows","flow","flows","false","Utilize Azure Data Transfer to securely transfer data between various environments.","https://microsoft.github.io/finops-toolkit/svg/microsoft.azuredatatransfer/connections/flows.svg","" "microsoft.azuredatatransfer/pipelines","Pipeline","Pipelines","pipeline","pipelines","false","Utilize Azure Data Transfer to securely transfer data between various environments.","https://microsoft.github.io/finops-toolkit/svg/microsoft.azuredatatransfer/pipelines.svg","" @@ -313,8 +320,11 @@ "microsoft.azurestack/registrations/customersubscriptions","Microsoft.AzureStack registrations customer subscription","Microsoft.AzureStack registrations customer subscriptions","microsoft.azurestack registrations customer subscription","microsoft.azurestack registrations customer subscriptions","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestack/registrations/customersubscriptions.svg","" "microsoft.azurestack/registrations/products","Microsoft.AzureStack registrations product","Microsoft.AzureStack registrations products","microsoft.azurestack registrations product","microsoft.azurestack registrations products","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestack/registrations/products.svg","" "microsoft.azurestackhci/clusters","Azure Local","Azure Local","Azure Local","Azure Local","false","Azure Local","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestackhci/clusters.svg","[{""title"":""Learn more"",""uri"":""https://azure.com/hci""}]" +"microsoft.azurestackhci/devicepools","Microsoft.AzureStackHCI device pool","Microsoft.AzureStackHCI device pools","microsoft.azurestackhci device pool","microsoft.azurestackhci device pools","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestackhci/devicepools.svg","" "microsoft.azurestackhci/edgedevices","Microsoft.AzureStackHCI edge device","Microsoft.AzureStackHCI edge devices","microsoft.azurestackhci edge device","microsoft.azurestackhci edge devices","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestackhci/edgedevices.svg","" "microsoft.azurestackhci/edgedevices/jobs","Microsoft.AzureStackHCI edge devices job","Microsoft.AzureStackHCI edge devices jobs","microsoft.azurestackhci edge devices job","microsoft.azurestackhci edge devices jobs","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestackhci/edgedevices/jobs.svg","" +"microsoft.azurestackhci/edgemachines","Microsoft.AzureStackHCI edge machine","Microsoft.AzureStackHCI edge machines","microsoft.azurestackhci edge machine","microsoft.azurestackhci edge machines","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestackhci/edgemachines.svg","" +"microsoft.azurestackhci/edgemachines/jobs","Microsoft.AzureStackHCI edge machines job","Microsoft.AzureStackHCI edge machines jobs","microsoft.azurestackhci edge machines job","microsoft.azurestackhci edge machines jobs","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestackhci/edgemachines/jobs.svg","" "microsoft.azurestackhci/edgenodepools","Azure Stack","Azure Stack","azure stack","azure stack","true","Azure Stack","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestackhci/edgenodepools.svg","[{""title"":""Learn more"",""uri"":""https://aka.ms/azurestacklearnmore""}]" "microsoft.azurestackhci/galleryimages","Azure Local Gallery image","Azure Local Gallery images","azure local gallery image","azure local gallery images","false","Azure Local Gallery Images","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestackhci/galleryimages.svg","[{""title"":""Learn more"",""uri"":""https://azure.com/hci""}]" "microsoft.azurestackhci/logicalnetworks","Azure Local Logical network","Azure Local Logical networks","azure local logical network","azure local logical networks","false","Azure Local Logical Networks","https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestackhci/logicalnetworks.svg","[{""title"":""Learn more"",""uri"":""https://azure.com/hci""}]" @@ -335,7 +345,7 @@ "microsoft.baremetal/baremetalconnections","Microsoft.BareMetal bare metal connection","Microsoft.BareMetal bare metal connections","microsoft.baremetal bare metal connection","microsoft.baremetal bare metal connections","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.baremetal/baremetalconnections.svg","" "microsoft.baremetal/crayservers","Cray Server","Cray Servers","cray server","cray servers","false","Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.baremetal/crayservers.svg","" "microsoft.baremetal/monitoringservers","Monitoring Server","Monitoring Servers","monitoring server","monitoring servers","false","Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.baremetal/monitoringservers.svg","" -"microsoft.baremetal/peeringsettings","Microsoft.BareMetal peering setting","Microsoft.BareMetal peering settings","microsoft.baremetal peering setting","microsoft.baremetal peering settings","false","Model representing a Peering Setting object.","https://microsoft.github.io/finops-toolkit/svg/microsoft.baremetal/peeringsettings.svg","" +"microsoft.baremetal/peeringsettings","Microsoft.BareMetal peering setting","Microsoft.BareMetal peering settings","microsoft.baremetal peering setting","microsoft.baremetal peering settings","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.baremetal/peeringsettings.svg","" "microsoft.baremetalinfrastructure/baremetalinstances","BareMetal Instance","BareMetal Instances","bareMetal instance","bareMetal instances","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.baremetalinfrastructure/baremetalinstances.svg","" "microsoft.baremetalinfrastructure/baremetalstorageinstances","Microsoft.BareMetalInfrastructure bare metal storage instance","Microsoft.BareMetalInfrastructure bare metal storage instances","microsoft.baremetalinfrastructure bare metal storage instance","microsoft.baremetalinfrastructure bare metal storage instances","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.baremetalinfrastructure/baremetalstorageinstances.svg","" "microsoft.batch/batchaccounts","Batch account","Batch accounts","batch account","batch accounts","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.batch/batchaccounts.svg","" @@ -387,6 +397,7 @@ "microsoft.billing/billingaccounts/invoicesections/products","Microsoft.Billing billing accounts invoice sections product","Microsoft.Billing billing accounts invoice sections products","microsoft.billing billing accounts invoice sections product","microsoft.billing billing accounts invoice sections products","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.billing/billingaccounts/invoicesections/products.svg","" "microsoft.billing/billingaccounts/invoicesections/transfers","Microsoft.Billing billing accounts invoice sections transfer","Microsoft.Billing billing accounts invoice sections transfers","microsoft.billing billing accounts invoice sections transfer","microsoft.billing billing accounts invoice sections transfers","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.billing/billingaccounts/invoicesections/transfers.svg","" "microsoft.billing/billingaccounts/lineofcredit","Microsoft.Billing billing accounts line of credit","Microsoft.Billing billing accounts line of credit","microsoft.billing billing accounts line of credit","microsoft.billing billing accounts line of credit","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.billing/billingaccounts/lineofcredit.svg","" +"microsoft.billing/billingaccounts/migrations","Microsoft.Billing billing accounts migration","Microsoft.Billing billing accounts migrations","microsoft.billing billing accounts migration","microsoft.billing billing accounts migrations","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.billing/billingaccounts/migrations.svg","" "microsoft.billing/billingaccounts/paymentmethods","Microsoft.Billing billing accounts payment method","Microsoft.Billing billing accounts payment methods","microsoft.billing billing accounts payment method","microsoft.billing billing accounts payment methods","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.billing/billingaccounts/paymentmethods.svg","" "microsoft.billing/billingaccounts/policies","Microsoft.Billing billing accounts policy","Microsoft.Billing billing accounts policies","microsoft.billing billing accounts policy","microsoft.billing billing accounts policies","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.billing/billingaccounts/policies.svg","" "microsoft.billing/billingaccounts/products","Microsoft.Billing billing accounts product","Microsoft.Billing billing accounts products","microsoft.billing billing accounts product","microsoft.billing billing accounts products","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.billing/billingaccounts/products.svg","" @@ -434,7 +445,7 @@ "microsoft.capacity/reservationorders/reservations","Reservation","Reservations","reservation","reservations","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.capacity/reservationorders/reservations.svg","" "microsoft.cascade/sites","Microsoft.Cascade site","Microsoft.Cascade sites","microsoft.cascade site","microsoft.cascade sites","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.cascade/sites.svg","" "microsoft.cdn/cdnwebapplicationfirewallpolicies","Content Delivery Network WAF policy","Content Delivery Network WAF policies","content delivery network WAF policy","content delivery network WAF policies","false","Create a Web Application Firewall policy to protect your web applications from common exploits and vulnerabilities, keep your service available and help you meet compliance requirements.","https://microsoft.github.io/finops-toolkit/svg/microsoft.cdn/cdnwebapplicationfirewallpolicies.svg","[{""title"":""Learn more"",""uri"":""https://aka.ms/waf-overview""}]" -"microsoft.cdn/edgeactions","Edge Action","Edge Actions","edge action","edge actions","false","Azure Edge Actions is security and performance focused service, that enables customers to run short-lived and simple business logic code at the edge of Microsoft network, closer to users, apps and devices with the least possible latencies in a industry leading secure environment.","https://microsoft.github.io/finops-toolkit/svg/microsoft.cdn/edgeactions.svg","[{""title"":""Learn more"",""uri"":""https://aka.ms/portalfx/designpatterns""}]" +"microsoft.cdn/edgeactions","Edge Action","Edge Actions","edge action","edge actions","false","Azure Edge Actions is security and performance focused service, that enables customers to run short-lived and simple business logic code at the edge of Microsoft network, closer to users, apps and devices with the least possible latencies in a industry leading secure environment.","https://microsoft.github.io/finops-toolkit/svg/microsoft.cdn/edgeactions.svg","" "microsoft.cdn/profiles","Front Door and CDN profile","Front Door and CDN profiles","front door and CDN profile","front door and CDN profiles","false","Azure Front Door and CDN profiles is security led, modern cloud CDN that provides static and dynamic content acceleration, global load balancing and enhanced security for your apps, APIs and websites with intelligent threat protection.","https://microsoft.github.io/finops-toolkit/svg/microsoft.cdn/profiles.svg","[{""title"":""Learn more"",""uri"":""https://learn.microsoft.com/azure/frontdoor/front-door-overview""}]" "microsoft.cdn/profiles/afdendpoints","Endpoint","Endpoints","endpoint","endpoints","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.cdn/profiles/afdendpoints.svg","" "microsoft.cdn/profiles/afdendpoints/routes","Route","Routes","route","routes","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.cdn/profiles/afdendpoints/routes.svg","" @@ -473,10 +484,13 @@ "microsoft.classicstorage/storageaccounts/osimages","OS image (classic)","OS images (classic)","OS image (classic)","OS images (classic)","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.classicstorage/storageaccounts/osimages.svg","" "microsoft.classicstorage/storageaccounts/vmimages","VM image (classic)","VM images (classic)","VM image (classic)","VM images (classic)","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.classicstorage/storageaccounts/vmimages.svg","" "microsoft.cleanroom/cleanrooms","Microsoft.CleanRoom cleanroom","Microsoft.CleanRoom cleanrooms","microsoft.cleanroom cleanroom","microsoft.cleanroom cleanrooms","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.cleanroom/cleanrooms.svg","" +"microsoft.cleanroom/collaborations","Microsoft.CleanRoom collaboration","Microsoft.CleanRoom collaborations","microsoft.cleanroom collaboration","microsoft.cleanroom collaborations","false","Defines the collaboration.","https://microsoft.github.io/finops-toolkit/svg/microsoft.cleanroom/collaborations.svg","" +"microsoft.cleanroom/collaborations/contracts","Microsoft.CleanRoom collaborations contract","Microsoft.CleanRoom collaborations contracts","microsoft.cleanroom collaborations contract","microsoft.cleanroom collaborations contracts","false","Defines the contract.","https://microsoft.github.io/finops-toolkit/svg/microsoft.cleanroom/collaborations/contracts.svg","" +"microsoft.cleanroom/consortiums","Microsoft.CleanRoom consortium","Microsoft.CleanRoom consortiums","microsoft.cleanroom consortium","microsoft.cleanroom consortiums","false","Defines the consortium.","https://microsoft.github.io/finops-toolkit/svg/microsoft.cleanroom/consortiums.svg","" "microsoft.cleanroom/microservices","Microsoft.CleanRoom microservice","Microsoft.CleanRoom microservices","microsoft.cleanroom microservice","microsoft.cleanroom microservices","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.cleanroom/microservices.svg","" "microsoft.cloud/hubs","FinOps hub","FinOps hubs","FinOps hub","FinOps hubs","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.cloud/hubs.svg","" "microsoft.clouddeviceplatform/delegatedidentities","Microsoft.CloudDevicePlatform delegated identity","Microsoft.CloudDevicePlatform delegated identities","microsoft.clouddeviceplatform delegated identity","microsoft.clouddeviceplatform delegated identities","false","Represents a CloudDevicePlatform delegated identity resource.","https://microsoft.github.io/finops-toolkit/svg/microsoft.clouddeviceplatform/delegatedidentities.svg","" -"microsoft.cloudhealth/healthmodels","Health Model","Health Models","health model","health models","false","A health model augments metric and logs with critical business context of a workload, enabling the automated evaluation of quantified health states.","https://microsoft.github.io/finops-toolkit/svg/microsoft.cloudhealth/healthmodels.svg","[{""title"":""Build health models"",""uri"":""https://aka.ms/portalfx/designpatterns""},{""title"":""Learn more"",""uri"":""https://aka.ms/portalfx/browse""}]" +"microsoft.cloudhealth/healthmodels","Health Model","Health Models","health model","health models","false","A health model augments metric and logs with critical business context of a workload, enabling the automated evaluation of quantified health states.","https://microsoft.github.io/finops-toolkit/svg/microsoft.cloudhealth/healthmodels.svg","" "microsoft.cloudtest/accounts","CloudTest Account","CloudTest Accounts","CloudTest account","CloudTest accounts","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.cloudtest/accounts.svg","" "microsoft.cloudtest/buildcaches","1ES Build Cache","1ES Build Caches","1ES Build Cache","1ES Build Caches","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.cloudtest/buildcaches.svg","" "microsoft.cloudtest/hostedpools","1ES Hosted Pool","1ES Hosted Pools","1ES Hosted Pool","1ES Hosted Pools","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.cloudtest/hostedpools.svg","" @@ -527,39 +541,39 @@ "microsoft.compute/virtualmachinecomputehub","Virtual machine","Virtual machines","virtual machine","virtual machines","false","Create a virtual machine that runs Linux or Windows. Select an image from the marketplace or use your own customized image.","https://microsoft.github.io/finops-toolkit/svg/microsoft.compute/virtualmachinecomputehub.svg","[{""title"":""Learn more about Windows virtual machines"",""uri"":""https://go.microsoft.com/fwlink/p/?linkid=847684""},{""title"":""Learn more about Linux virtual machines"",""uri"":""https://go.microsoft.com/fwlink/p/?linkid=847683""}]" "microsoft.compute/virtualmachineflexinstances","Instance","Instances","instance","instances","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.compute/virtualmachineflexinstances.svg","" "microsoft.compute/virtualmachines","Virtual machine","Virtual machines","virtual machine","virtual machines","false","Create a virtual machine that runs Linux or Windows. Select an image from the marketplace or use your own customized image.","https://microsoft.github.io/finops-toolkit/svg/microsoft.compute/virtualmachines.svg","[{""title"":""Learn more about Windows virtual machines"",""uri"":""https://go.microsoft.com/fwlink/p/?linkid=847684""},{""title"":""Learn more about Linux virtual machines"",""uri"":""https://go.microsoft.com/fwlink/p/?linkid=847683""}]" -"microsoft.compute/virtualmachines/providers/guestconfigurationassignments","Guest Assignment","Guest Assignments","guest assignment","guest assignments","false","Guest Assignment","https://microsoft.github.io/finops-toolkit/svg/microsoft.compute/virtualmachines/providers/guestconfigurationassignments.svg","" +"microsoft.compute/virtualmachines/providers/guestconfigurationassignments","Guest Assignment","Guest Assignments","guest assignment","guest assignments","false","A guest assignment links a virtual machine to a specific configuration defined by Azure Policy. Use guest assignments to enforce compliance and security policies on your virtual machines, such as ensuring that only certain users have administrative privileges, or that certain software is installed and updated. A guest assignment can also perform actions on your virtual machines, such as installing or removing software, or changing settings.","https://microsoft.github.io/finops-toolkit/svg/microsoft.compute/virtualmachines/providers/guestconfigurationassignments.svg","" "microsoft.compute/virtualmachinescalesets","Virtual machine scale set","Virtual machine scale sets","virtual machine scale set","virtual machine scale sets","false","Create a virtual machine scale set to deploy and manage a load balanced set of identical Windows or Linux virtual machines. Use autoscale to automatically scale virtual machine resources in and out.","https://microsoft.github.io/finops-toolkit/svg/microsoft.compute/virtualmachinescalesets.svg","[{""title"":""Learn more"",""uri"":""https://go.microsoft.com/fwlink/p/?linkid=848151""}]" "microsoft.compute/virtualmachinescalesets/providers/guestconfigurationassignments","Guest Assignment","Guest Assignments","guest assignment","guest assignments","false","A guest assignment links a virtual machine to a specific configuration defined by Azure Policy. Use guest assignments to enforce compliance and security policies on your virtual machines, such as ensuring that only certain users have administrative privileges, or that certain software is installed and updated. A guest assignment can also perform actions on your virtual machines, such as installing or removing software, or changing settings.","https://microsoft.github.io/finops-toolkit/svg/microsoft.compute/virtualmachinescalesets/providers/guestconfigurationassignments.svg","" "microsoft.compute/virtualmachinescalesets/virtualmachines","Virtual machine scale set instance","Virtual machine scale set instances","virtual machine scale set instance","virtual machine scale set instances","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.compute/virtualmachinescalesets/virtualmachines.svg","" "microsoft.compute/virtualmachinescalesets/virtualmachines/networkinterfaces/ipconfigurations/publicipaddresses","Public IP address","Public IP addresses","Public IP address","Public IP addresses","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.compute/virtualmachinescalesets/virtualmachines/networkinterfaces/ipconfigurations/publicipaddresses.svg","" "microsoft.compute/virtualmachinescalesetscomputehub","Virtual machine scale set","Virtual machine scale sets","virtual machine scale set","virtual machine scale sets","false","Create a virtual machine scale set to deploy and manage a load balanced set of identical Windows or Linux virtual machines. Use autoscale to automatically scale virtual machine resources in and out.","https://microsoft.github.io/finops-toolkit/svg/microsoft.compute/virtualmachinescalesetscomputehub.svg","[{""title"":""Learn more"",""uri"":""https://go.microsoft.com/fwlink/p/?linkid=848151""}]" -"microsoft.computehub/advisorcost","Recommendations","Recommendations","Recommendations","Recommendations","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/advisorcost.svg","[{""title"":""Get consistent"",""uri"":""https://aka.ms/portalfx/designpatterns""}]" -"microsoft.computehub/advisoroperationalexcellence","Recommendations","Recommendations","Recommendations","Recommendations","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/advisoroperationalexcellence.svg","[{""title"":""Get consistent"",""uri"":""https://aka.ms/portalfx/designpatterns""}]" -"microsoft.computehub/advisorperformance","Recommendations","Recommendations","Recommendations","Recommendations","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/advisorperformance.svg","[{""title"":""Get consistent"",""uri"":""https://aka.ms/portalfx/designpatterns""}]" -"microsoft.computehub/advisorreliability","Recommendations","Recommendations","Recommendations","Recommendations","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/advisorreliability.svg","[{""title"":""Get consistent"",""uri"":""https://aka.ms/portalfx/designpatterns""}]" -"microsoft.computehub/advisorsecurity","Recommendations","Recommendations","Recommendations","Recommendations","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/advisorsecurity.svg","[{""title"":""Get consistent"",""uri"":""https://aka.ms/portalfx/designpatterns""}]" -"microsoft.computehub/all","All resources","All resources","All resources","All resources","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/all.svg","[{""title"":""Get consistent"",""uri"":""https://aka.ms/portalfx/designpatterns""}]" -"microsoft.computehub/backup","Backup job","Backup job","Backup job","Backup job","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/backup.svg","[{""title"":""Get consistent"",""uri"":""https://aka.ms/portalfx/designpatterns""}]" +"microsoft.computehub/advisorcost","Recommendations","Recommendations","Recommendations","Recommendations","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/advisorcost.svg","" +"microsoft.computehub/advisoroperationalexcellence","Recommendations","Recommendations","Recommendations","Recommendations","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/advisoroperationalexcellence.svg","" +"microsoft.computehub/advisorperformance","Recommendations","Recommendations","Recommendations","Recommendations","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/advisorperformance.svg","" +"microsoft.computehub/advisorreliability","Recommendations","Recommendations","Recommendations","Recommendations","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/advisorreliability.svg","" +"microsoft.computehub/advisorsecurity","Recommendations","Recommendations","Recommendations","Recommendations","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/advisorsecurity.svg","" +"microsoft.computehub/all","All resources","All resources","All resources","All resources","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/all.svg","" +"microsoft.computehub/backup","Backup job","Backup job","Backup job","Backup job","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/backup.svg","" "microsoft.computehub/computehubmain","Compute infrastructure","Compute infrastructure","compute infrastructure","compute infrastructure","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/computehubmain.svg","" "microsoft.computehub/healthevents","Health events","Health events","Health events","Health events","false","No resource has availability related health events.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/healthevents.svg","" -"microsoft.computehub/linuxostype","Linux OS","Linux OS","Linux OS","Linux OS","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/linuxostype.svg","[{""title"":""Get consistent"",""uri"":""https://aka.ms/portalfx/designpatterns""}]" -"microsoft.computehub/microsoftdefenderfreetrialsubscription","Microsoft defender","Microsoft defender","Microsoft defender","Microsoft defender","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/microsoftdefenderfreetrialsubscription.svg","[{""title"":""Get consistent"",""uri"":""https://aka.ms/portalfx/designpatterns""}]" -"microsoft.computehub/microsoftdefenderstandardsubscription","Microsoft defender","Microsoft defender","Microsoft defender","Microsoft defender","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/microsoftdefenderstandardsubscription.svg","[{""title"":""Get consistent"",""uri"":""https://aka.ms/portalfx/designpatterns""}]" -"microsoft.computehub/outages","Outages","Outages","Outages","Outages","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/outages.svg","[{""title"":""Get consistent"",""uri"":""https://aka.ms/portalfx/designpatterns""}]" -"microsoft.computehub/powerstatedeallocated","Power states","Power states","Power states","Power states","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/powerstatedeallocated.svg","[{""title"":""Get consistent"",""uri"":""https://aka.ms/portalfx/designpatterns""}]" -"microsoft.computehub/powerstaterunning","Power states","Power states","Power states","Power states","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/powerstaterunning.svg","[{""title"":""Get consistent"",""uri"":""https://aka.ms/portalfx/designpatterns""}]" -"microsoft.computehub/powerstatestopped","Power states","Power states","Power states","Power states","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/powerstatestopped.svg","[{""title"":""Get consistent"",""uri"":""https://aka.ms/portalfx/designpatterns""}]" -"microsoft.computehub/provisioningstatefailedresources","Provisioning states","Provisioning states","Provisioning states","Provisioning states","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/provisioningstatefailedresources.svg","[{""title"":""Get consistent"",""uri"":""https://aka.ms/portalfx/designpatterns""}]" -"microsoft.computehub/provisioningstatesucceededresources","Provisioning states","Provisioning states","Provisioning states","Provisioning states","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/provisioningstatesucceededresources.svg","[{""title"":""Get consistent"",""uri"":""https://aka.ms/portalfx/designpatterns""}]" -"microsoft.computehub/windowsostype","Windows OS","Windows OS","Windows OS","Windows OS","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/windowsostype.svg","[{""title"":""Get consistent"",""uri"":""https://aka.ms/portalfx/designpatterns""}]" -"microsoft.computeschedule/autoactions","Microsoft.ComputeSchedule auto action","Microsoft.ComputeSchedule auto actions","microsoft.computeschedule auto action","microsoft.computeschedule auto actions","false","The auto action resource","https://microsoft.github.io/finops-toolkit/svg/microsoft.computeschedule/autoactions.svg","" +"microsoft.computehub/linuxostype","Linux OS","Linux OS","Linux OS","Linux OS","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/linuxostype.svg","" +"microsoft.computehub/microsoftdefenderfreetrialsubscription","Microsoft defender","Microsoft defender","Microsoft defender","Microsoft defender","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/microsoftdefenderfreetrialsubscription.svg","" +"microsoft.computehub/microsoftdefenderstandardsubscription","Microsoft defender","Microsoft defender","Microsoft defender","Microsoft defender","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/microsoftdefenderstandardsubscription.svg","" +"microsoft.computehub/outages","Outages","Outages","Outages","Outages","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/outages.svg","" +"microsoft.computehub/powerstatedeallocated","Power states","Power states","Power states","Power states","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/powerstatedeallocated.svg","" +"microsoft.computehub/powerstaterunning","Power states","Power states","Power states","Power states","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/powerstaterunning.svg","" +"microsoft.computehub/powerstatestopped","Power states","Power states","Power states","Power states","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/powerstatestopped.svg","" +"microsoft.computehub/provisioningstatefailedresources","Provisioning states","Provisioning states","Provisioning states","Provisioning states","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/provisioningstatefailedresources.svg","" +"microsoft.computehub/provisioningstatesucceededresources","Provisioning states","Provisioning states","Provisioning states","Provisioning states","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/provisioningstatesucceededresources.svg","" +"microsoft.computehub/windowsostype","Windows OS","Windows OS","Windows OS","Windows OS","false","Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/windowsostype.svg","" +"microsoft.computeschedule/autoactions","Automatic Action","Automatic Actions","automatic action","automatic actions","false","Automatic actions allow you to schedule a Start, Stop, or Hibernate on your virtual machines.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computeschedule/autoactions.svg","[{""title"":""Learn more"",""uri"":""https://go.microsoft.com/fwlink/?linkid=2275442""}]" "microsoft.computeschedule/autoactions/occurrences","Microsoft.ComputeSchedule auto actions occurrence","Microsoft.ComputeSchedule auto actions occurrences","microsoft.computeschedule auto actions occurrence","microsoft.computeschedule auto actions occurrences","false","Concrete proxy resource types can be created by aliasing this type using a specific property type.","https://microsoft.github.io/finops-toolkit/svg/microsoft.computeschedule/autoactions/occurrences.svg","" "microsoft.confidentialledger/ledgers","Confidential Ledger","Confidential Ledgers","confidential ledger","confidential ledgers","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.confidentialledger/ledgers.svg","" "microsoft.confidentialledger/managedccfs","Managed CCF App","Managed CCF Apps","managed ccf app","managed ccf apps","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.confidentialledger/managedccfs.svg","" "microsoft.confluent/agreements","Microsoft.Confluent agreement","Microsoft.Confluent agreements","microsoft.confluent agreement","microsoft.confluent agreements","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.confluent/agreements.svg","" "microsoft.confluent/organizations","Confluent organization","Apache Kafka® & Apache Flink® on Confluent Cloud™ - An Azure Native ISV Service","Confluent organization","Apache Kafka® & Apache Flink® on Confluent Cloud™ - An Azure Native ISV Service","false","Create a Confluent organization using Azure Marketplace with Pay as you Go or Commits","https://microsoft.github.io/finops-toolkit/svg/microsoft.confluent/organizations.svg","[{""title"":""Get started with Pay as you Go"",""uri"":""https://docs.confluent.io/cloud/current/billing/ccloud-azure-payg.html""},{""title"":""Get started with Commits"",""uri"":""https://docs.confluent.io/cloud/current/billing/ccloud-azure-ubb.html""}]" -"microsoft.connectedcache/cachenodes","Connected Cache for ISP (early preview)","Connected Cache for ISPs (early preview)","Connected Cache for ISP (early preview)","Microsoft Connected Cache for Internet Service Providers (early preview)","true","Software-only caching solution that delivers Microsoft static content within operator networks for ISP early preview customers.","https://microsoft.github.io/finops-toolkit/svg/microsoft.connectedcache/cachenodes.svg","[{""title"":""Learn more"",""uri"":""https://learn.microsoft.com/windows/deployment/do/waas-microsoft-connected-cache""}]" -"microsoft.connectedcache/enterprisecustomers","Connected Cache for Enterprise & Education (early preview)","Connected Caches for Enterprise & Education (early preview)","Connected Cache for Enterprise & Education (early preview)","Microsoft Connected Cache Enterprise (early preview)","true","Software-only caching solution that delivers Microsoft static content within operator networks for Enterprise early preview customers.","https://microsoft.github.io/finops-toolkit/svg/microsoft.connectedcache/enterprisecustomers.svg","[{""title"":""Learn more"",""uri"":""https://learn.microsoft.com/windows/deployment/do/waas-microsoft-connected-cache""}]" +"microsoft.connectedcache/cachenodes","Connected Cache for ISP","Connected Cache for ISPs","Connected Cache for ISP","Microsoft Connected Cache for Internet Service Providers","false","Software-only caching solution that delivers Microsoft static content within operator networks.","https://microsoft.github.io/finops-toolkit/svg/microsoft.connectedcache/cachenodes.svg","[{""title"":""Learn more"",""uri"":""https://learn.microsoft.com/windows/deployment/do/waas-microsoft-connected-cache""}]" +"microsoft.connectedcache/enterprisecustomers","Connected Cache for Enterprise & Education","Connected Caches for Enterprise & Education","Connected Cache for Enterprise & Education","Microsoft Connected Cache Enterprise","false","Software-only caching solution that delivers Microsoft static content within operator networks.","https://microsoft.github.io/finops-toolkit/svg/microsoft.connectedcache/enterprisecustomers.svg","[{""title"":""Learn more"",""uri"":""https://learn.microsoft.com/windows/deployment/do/waas-microsoft-connected-cache""}]" "microsoft.connectedcache/enterprisemcccustomers","Connected Cache for Enterprise & Education","Connected Caches for Enterprise & Education","Connected Cache for Enterprise & Education","Microsoft Connected Caches for Enterprise & Education","false","Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.connectedcache/enterprisemcccustomers.svg","[{""title"":""Learn more"",""uri"":""https://learn.microsoft.com/windows/deployment/do/waas-microsoft-connected-cache""}]" "microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes","MCC CacheNode for Enterprise","MCC CacheNodes for Enterprise","MCC CacheNode for Enterprise","MCC CacheNodes for Enterprise","false","Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes.svg","" "microsoft.connectedcache/ispcustomers","Connected Cache for ISP","Microsoft Connected Cache for Internet Service Providers","Connected Cache for ISP","Microsoft Connected Cache for Internet Service Providers","false","Software-only caching solution that delivers Microsoft static content within operator networks.","https://microsoft.github.io/finops-toolkit/svg/microsoft.connectedcache/ispcustomers.svg","[{""title"":""Learn more"",""uri"":""https://learn.microsoft.com/windows/deployment/do/waas-microsoft-connected-cache""}]" @@ -617,13 +631,14 @@ "microsoft.customerlockbox/tenantoptedin","Microsoft.CustomerLockbox tenant opted in","Microsoft.CustomerLockbox tenant opted in","microsoft.customerlockbox tenant opted in","microsoft.customerlockbox tenant opted in","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.customerlockbox/tenantoptedin.svg","" "microsoft.customproviders/associations","Microsoft.CustomProviders association","Microsoft.CustomProviders associations","microsoft.customproviders association","microsoft.customproviders associations","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.customproviders/associations.svg","" "microsoft.customproviders/resourceproviders","Microsoft.CustomProviders resource provider","Microsoft.CustomProviders resource providers","microsoft.customproviders resource provider","microsoft.customproviders resource providers","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.customproviders/resourceproviders.svg","" +"microsoft.dashboard/dashboards","Azure Monitor Dashboard","Azure Monitor Dashboard","Azure Monitor Dashboard","Azure Monitor Dashboard","false","Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.dashboard/dashboards.svg","[{""title"":""Learn more"",""uri"":""https://learn.microsoft.com/azure/managed-grafana/""}]" "microsoft.dashboard/grafana","Azure Managed Grafana","Azure Managed Grafana","Azure Managed Grafana","Azure Managed Grafana","false","Run a fully managed instance of Grafana that's automatically connected to your Azure resources.","https://microsoft.github.io/finops-toolkit/svg/microsoft.dashboard/grafana.svg","" "microsoft.dataaccelerator/indexclusters","Microsoft.DataAccelerator index cluster","Microsoft.DataAccelerator index clusters","microsoft.dataaccelerator index cluster","microsoft.dataaccelerator index clusters","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.dataaccelerator/indexclusters.svg","" "microsoft.databasefleetmanager/fleets","Database fleet manager","Database fleet managers","database fleet manager","database fleet managers","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.databasefleetmanager/fleets.svg","" "microsoft.databasefleetmanager/fleets/fleetspaces","Fleetspaces","Fleetspaces","fleetspaces","fleetspaces","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.databasefleetmanager/fleets/fleetspaces.svg","" -"microsoft.databasefleetmanager/fleets/fleetspaces/databases","Fleet Managed Database","Fleet Managed Databases","fleet managed database","fleet managed databases","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.databasefleetmanager/fleets/fleetspaces/databases.svg","" +"microsoft.databasefleetmanager/fleets/fleetspaces/databases","Fleet managed database","Fleet managed databases","fleet managed database","fleet managed databases","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.databasefleetmanager/fleets/fleetspaces/databases.svg","" "microsoft.databasefleetmanager/fleets/tiers","tier","Tiers","tier","tiers","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.databasefleetmanager/fleets/tiers.svg","" -"microsoft.databasewatcher/watchers","Database watcher","Database watchers","database watcher","database watchers","false","Database watcher is a managed monitoring solution for database services in the Azure SQL family. Create a watcher to monitor your Azure SQL estate in depth and with low latency.","https://microsoft.github.io/finops-toolkit/svg/microsoft.databasewatcher/watchers.svg","[{""title"":""Overview"",""uri"":""https://aka.ms/portalfx/designpatterns""},{""title"":""Get started"",""uri"":""https://aka.ms/portalfx/browse""}]" +"microsoft.databasewatcher/watchers","Database watcher","Database watchers","database watcher","database watchers","false","Database watcher is a managed monitoring solution for database services in the Azure SQL family. Create a watcher to monitor your Azure SQL estate in depth and with low latency.","https://microsoft.github.io/finops-toolkit/svg/microsoft.databasewatcher/watchers.svg","" "microsoft.databox/jobs","Azure Data Box","Azure Data Box","azure data box","azure data box","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.databox/jobs.svg","" "microsoft.databoxedge/databoxedgedevices","Azure Stack Edge / Data Box Gateway","Azure Stack Edge / Data Box Gateway","azure stack edge / data box gateway","azure stack edge / data box gateway","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.databoxedge/databoxedgedevices.svg","" "microsoft.databricks/accessconnectors","Access Connector for Azure Databricks","Access Connector for Azure Databricks","access connector for azure databricks","access connectors for azure databricks","false","Unity Catalog provides unified governance for all data and AI assets in your Lakehouse. Unity Catalog can be configured to use an Azure managed identity to access storage containers on behalf of Unity Catalog users. Managed identities provide an identity for applications to use when they connect to resources that support Microsoft Entra ID authentication.","https://microsoft.github.io/finops-toolkit/svg/microsoft.databricks/accessconnectors.svg","[{""title"":""Documentation"",""uri"":""https://go.microsoft.com/fwlink/?linkid=2281480""}]" @@ -656,6 +671,9 @@ "microsoft.datareplication/replicationvaults/jobs","Microsoft.DataReplication replication vaults job","Microsoft.DataReplication replication vaults jobs","microsoft.datareplication replication vaults job","microsoft.datareplication replication vaults jobs","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.datareplication/replicationvaults/jobs.svg","" "microsoft.datareplication/replicationvaults/jobs/operations","Microsoft.DataReplication replication vaults jobs operation","Microsoft.DataReplication replication vaults jobs operations","microsoft.datareplication replication vaults jobs operation","microsoft.datareplication replication vaults jobs operations","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.datareplication/replicationvaults/jobs/operations.svg","" "microsoft.datareplication/replicationvaults/operations","Microsoft.DataReplication replication vaults operation","Microsoft.DataReplication replication vaults operations","microsoft.datareplication replication vaults operation","microsoft.datareplication replication vaults operations","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.datareplication/replicationvaults/operations.svg","" +"microsoft.datareplication/replicationvaults/privateendpointconnectionproxies","Microsoft.DataReplication replication vaults private endpoint connection proxy","Microsoft.DataReplication replication vaults private endpoint connection proxies","microsoft.datareplication replication vaults private endpoint connection proxy","microsoft.datareplication replication vaults private endpoint connection proxies","false","Represents private endpoint connection proxy request.","https://microsoft.github.io/finops-toolkit/svg/microsoft.datareplication/replicationvaults/privateendpointconnectionproxies.svg","" +"microsoft.datareplication/replicationvaults/privateendpointconnections","Microsoft.DataReplication replication vaults private endpoint connection","Microsoft.DataReplication replication vaults private endpoint connections","microsoft.datareplication replication vaults private endpoint connection","microsoft.datareplication replication vaults private endpoint connections","false","Represents private endpoint connection.","https://microsoft.github.io/finops-toolkit/svg/microsoft.datareplication/replicationvaults/privateendpointconnections.svg","" +"microsoft.datareplication/replicationvaults/privatelinkresources","Microsoft.DataReplication replication vaults private link resource","Microsoft.DataReplication replication vaults private link resources","microsoft.datareplication replication vaults private link resource","microsoft.datareplication replication vaults private link resources","false","Represents private link resource.","https://microsoft.github.io/finops-toolkit/svg/microsoft.datareplication/replicationvaults/privatelinkresources.svg","" "microsoft.datareplication/replicationvaults/protecteditems","Microsoft.DataReplication replication vaults protected item","Microsoft.DataReplication replication vaults protected items","microsoft.datareplication replication vaults protected item","microsoft.datareplication replication vaults protected items","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.datareplication/replicationvaults/protecteditems.svg","" "microsoft.datareplication/replicationvaults/protecteditems/operations","Microsoft.DataReplication replication vaults protected items operation","Microsoft.DataReplication replication vaults protected items operations","microsoft.datareplication replication vaults protected items operation","microsoft.datareplication replication vaults protected items operations","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.datareplication/replicationvaults/protecteditems/operations.svg","" "microsoft.datareplication/replicationvaults/protecteditems/recoverypoints","Microsoft.DataReplication replication vaults protected items recovery point","Microsoft.DataReplication replication vaults protected items recovery points","microsoft.datareplication replication vaults protected items recovery point","microsoft.datareplication replication vaults protected items recovery points","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.datareplication/replicationvaults/protecteditems/recoverypoints.svg","" @@ -667,7 +685,7 @@ "microsoft.dbformariadb/servers","Azure Database for MariaDB server","Azure Database for MariaDB servers","Azure Database for MariaDB server","Azure Database for MariaDB servers","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.dbformariadb/servers.svg","" "microsoft.dbformysql/flexibleservers","Azure Database for MySQL flexible server","Azure Database for MySQL flexible servers","Azure Database for MySQL flexible server","Azure Database for MySQL flexible servers","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.dbformysql/flexibleservers.svg","" "microsoft.dbformysql/servers","MySQL server","MySQL servers","Azure Database for MySQL server","Azure Database for MySQL servers","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.dbformysql/servers.svg","" -"microsoft.dbforpostgresql/flexibleservers","Azure Database for PostgreSQL - Flexible Server","Azure Database for PostgreSQL - Flexible Servers","Azure Database for PostgreSQL - Flexible Server","Azure Database for PostgreSQL - Flexible Servers","false","Azure Database for PostgreSQL flexible server is a fully managed Azure Database service based on the PostgreSQL open source relational database, optimized for performance, security and cost efficiency.","https://microsoft.github.io/finops-toolkit/svg/microsoft.dbforpostgresql/flexibleservers.svg","" +"microsoft.dbforpostgresql/flexibleservers","Azure Database for PostgreSQL flexible server","Azure Database for PostgreSQL flexible servers","Azure Database for PostgreSQL flexible server","Azure Database for PostgreSQL flexible servers","false","Azure Database for PostgreSQL flexible server is a fully managed Azure Database service based on the PostgreSQL open source relational database, optimized for performance, security and cost efficiency.","https://microsoft.github.io/finops-toolkit/svg/microsoft.dbforpostgresql/flexibleservers.svg","" "microsoft.dbforpostgresql/servergroupsv2","Azure Cosmos DB for PostgreSQL Cluster","Azure Cosmos DB for PostgreSQL Cluster","Azure Cosmos DB for PostgreSQL Cluster","Azure Cosmos DB for PostgreSQL Cluster","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.dbforpostgresql/servergroupsv2.svg","" "microsoft.dbforpostgresql/servers","PostgreSQL server","PostgreSQL servers","Azure Database for PostgreSQL server","Azure Database for PostgreSQL servers","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.dbforpostgresql/servers.svg","" "microsoft.delegatednetwork/controller","Microsoft.DelegatedNetwork controller","Microsoft.DelegatedNetwork controller","microsoft.delegatednetwork controller","microsoft.delegatednetwork controller","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.delegatednetwork/controller.svg","" @@ -698,6 +716,8 @@ "microsoft.devcenter/projects/pools","Pool","Pools","pool","pools","false","Create a dev box pool to allow developers to self-serve developer workstations using pre-approved templates and settings.","https://microsoft.github.io/finops-toolkit/svg/microsoft.devcenter/projects/pools.svg","[{""title"":""Learn more"",""uri"":""https://aka.ms/pools/overview""}]" "microsoft.developmentwindows365/developmentcloudpcdelegatedmsis","Microsoft.DevelopmentWindows365 development cloud pc delegated msi","Microsoft.DevelopmentWindows365 development cloud pc delegated msis","microsoft.developmentwindows365 development cloud pc delegated msi","microsoft.developmentwindows365 development cloud pc delegated msis","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.developmentwindows365/developmentcloudpcdelegatedmsis.svg","" "microsoft.devhub/iacprofiles","Infrastructure as Code Automation","Infrastructure as Code Automation","IaC automation profile","IaC automation profiles","false","Simplify how you manage your edge infrastrucutre using industry leading processes and tools.","https://microsoft.github.io/finops-toolkit/svg/microsoft.devhub/iacprofiles.svg","[{""title"":""Learn more"",""uri"":""https://aka.ms/iacdoc""}]" +"microsoft.devhub/templates","Microsoft.DevHub template","Microsoft.DevHub templates","microsoft.devhub template","microsoft.devhub templates","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.devhub/templates.svg","" +"microsoft.devhub/templates/versions","Microsoft.DevHub templates version","Microsoft.DevHub templates versions","microsoft.devhub templates version","microsoft.devhub templates versions","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.devhub/templates/versions.svg","" "microsoft.devhub/workflows","Microsoft.DevHub workflow","Microsoft.DevHub workflows","microsoft.devhub workflow","microsoft.devhub workflows","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.devhub/workflows.svg","" "microsoft.deviceonboarding/discoveryservices","Microsoft.DeviceOnboarding discovery service","Microsoft.DeviceOnboarding discovery services","microsoft.deviceonboarding discovery service","microsoft.deviceonboarding discovery services","false","A discovery resource.","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceonboarding/discoveryservices.svg","" "microsoft.deviceonboarding/discoveryservices/ownershipvoucherpublickeys","Microsoft.DeviceOnboarding discovery services ownership voucher public key","Microsoft.DeviceOnboarding discovery services ownership voucher public keys","microsoft.deviceonboarding discovery services ownership voucher public key","microsoft.deviceonboarding discovery services ownership voucher public keys","false","Ownership voucher public key resource.","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceonboarding/discoveryservices/ownershipvoucherpublickeys.svg","" @@ -705,22 +725,28 @@ "microsoft.deviceonboarding/onboardingservices/policies","Microsoft.DeviceOnboarding onboarding services policy","Microsoft.DeviceOnboarding onboarding services policies","microsoft.deviceonboarding onboarding services policy","microsoft.deviceonboarding onboarding services policies","false","An onboarding policy resource.","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceonboarding/onboardingservices/policies.svg","" "microsoft.deviceregistry/assetendpointprofiles","IoT Asset Endpoint Profile","IoT Asset Endpoint Profiles","IoT asset endpoint profile","IoT asset endpoint profiles","false","Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/assetendpointprofiles.svg","" "microsoft.deviceregistry/assets","IoT Asset","IoT Assets","IoT asset","IoT assets","false","An asset is a physical or logical entity that represents a device, machine, system, or process. When you create an asset, it will appear here and can be managed from this table.","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/assets.svg","[{""title"":""Learn more about IoT assets"",""uri"":""https://aka.ms/azure-iot-operations-assets""}]" -"microsoft.deviceregistry/billingcontainers","Microsoft.DeviceRegistry billing container","Microsoft.DeviceRegistry billing containers","microsoft.deviceregistry billing container","microsoft.deviceregistry billing containers","false","billingContainer Model as Azure resource whose sole purpose is to keep track of billables resources under a subscription.","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/billingcontainers.svg","" +"microsoft.deviceregistry/billingcontainers","Microsoft.DeviceRegistry billing container","Microsoft.DeviceRegistry billing containers","microsoft.deviceregistry billing container","microsoft.deviceregistry billing containers","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/billingcontainers.svg","" "microsoft.deviceregistry/devices","IoT Device","IoT Devices","IoT device","IoT devices","false","Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/devices.svg","" -"microsoft.deviceregistry/discoveredassetendpointprofiles","Microsoft.DeviceRegistry discovered asset endpoint profile","Microsoft.DeviceRegistry discovered asset endpoint profiles","microsoft.deviceregistry discovered asset endpoint profile","microsoft.deviceregistry discovered asset endpoint profiles","false","Discovered Asset Endpoint Profile definition.","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/discoveredassetendpointprofiles.svg","" -"microsoft.deviceregistry/discoveredassets","Microsoft.DeviceRegistry discovered asset","Microsoft.DeviceRegistry discovered assets","microsoft.deviceregistry discovered asset","microsoft.deviceregistry discovered assets","false","Discovered Asset definition.","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/discoveredassets.svg","" +"microsoft.deviceregistry/discoveredassetendpointprofiles","Microsoft.DeviceRegistry discovered asset endpoint profile","Microsoft.DeviceRegistry discovered asset endpoint profiles","microsoft.deviceregistry discovered asset endpoint profile","microsoft.deviceregistry discovered asset endpoint profiles","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/discoveredassetendpointprofiles.svg","" +"microsoft.deviceregistry/discoveredassets","Microsoft.DeviceRegistry discovered asset","Microsoft.DeviceRegistry discovered assets","microsoft.deviceregistry discovered asset","microsoft.deviceregistry discovered assets","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/discoveredassets.svg","" +"microsoft.deviceregistry/namespaces","Microsoft.DeviceRegistry namespace","Microsoft.DeviceRegistry namespaces","microsoft.deviceregistry namespace","microsoft.deviceregistry namespaces","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/namespaces.svg","" +"microsoft.deviceregistry/namespaces/assetendpointprofiles","Microsoft.DeviceRegistry namespaces asset endpoint profile","Microsoft.DeviceRegistry namespaces asset endpoint profiles","microsoft.deviceregistry namespaces asset endpoint profile","microsoft.deviceregistry namespaces asset endpoint profiles","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/namespaces/assetendpointprofiles.svg","" +"microsoft.deviceregistry/namespaces/assets","Microsoft.DeviceRegistry namespaces asset","Microsoft.DeviceRegistry namespaces assets","microsoft.deviceregistry namespaces asset","microsoft.deviceregistry namespaces assets","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/namespaces/assets.svg","" +"microsoft.deviceregistry/namespaces/devices","Microsoft.DeviceRegistry namespaces device","Microsoft.DeviceRegistry namespaces devices","microsoft.deviceregistry namespaces device","microsoft.deviceregistry namespaces devices","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/namespaces/devices.svg","" +"microsoft.deviceregistry/namespaces/discoveredassetendpointprofiles","Microsoft.DeviceRegistry namespaces discovered asset endpoint profile","Microsoft.DeviceRegistry namespaces discovered asset endpoint profiles","microsoft.deviceregistry namespaces discovered asset endpoint profile","microsoft.deviceregistry namespaces discovered asset endpoint profiles","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/namespaces/discoveredassetendpointprofiles.svg","" +"microsoft.deviceregistry/namespaces/discoveredassets","Microsoft.DeviceRegistry namespaces discovered asset","Microsoft.DeviceRegistry namespaces discovered assets","microsoft.deviceregistry namespaces discovered asset","microsoft.deviceregistry namespaces discovered assets","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/namespaces/discoveredassets.svg","" "microsoft.deviceregistry/schemaregistries","IoT Schema Registry","IoT Schema Registries","IoT schema registry","IoT schema registries","false","Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/schemaregistries.svg","" "microsoft.deviceregistry/schemaregistries/schemas","Microsoft.DeviceRegistry schema registries schema","Microsoft.DeviceRegistry schema registries schemas","microsoft.deviceregistry schema registries schema","microsoft.deviceregistry schema registries schemas","false","Schema definition.","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/schemaregistries/schemas.svg","" "microsoft.deviceregistry/schemaregistries/schemas/schemaversions","Microsoft.DeviceRegistry schema registries schemas schema version","Microsoft.DeviceRegistry schema registries schemas schema versions","microsoft.deviceregistry schema registries schemas schema version","microsoft.deviceregistry schema registries schemas schema versions","false","Schema version's definition.","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/schemaregistries/schemas/schemaversions.svg","" "microsoft.devices/iothubs","IoT hub","IoT hubs","IoT hub","IoT hub","false","Create an IoT hub to help you connect, monitor, and manage billions of your IoT assets.","https://microsoft.github.io/finops-toolkit/svg/microsoft.devices/iothubs.svg","[{""title"":""Learn more about IoT Hub"",""uri"":""https://docs.microsoft.com/azure/iot-hub/about-iot-hub""},{""title"":""Quickstart: send telemetry from device"",""uri"":""https://docs.microsoft.com/azure/iot-hub/quickstart-send-telemetry-node""}]" "microsoft.devices/provisioningservices","Azure IoT Hub Device Provisioning Service (DPS)","Azure IoT Hub Device Provisioning Services","device provisioning service","device provisioning services","false","Use Azure IoT Hub Device Provisioning Service to automate IoT device provisioning and registration.","https://microsoft.github.io/finops-toolkit/svg/microsoft.devices/provisioningservices.svg","[{""title"":""Learn more about Azure IoT Hub Device Provisioning Service"",""uri"":""https://docs.microsoft.com/azure/iot-dps/about-iot-dps""},{""title"":""Quickstart: set up auto-provisioning"",""uri"":""https://docs.microsoft.com/azure/iot-dps/quick-setup-auto-provision""}]" "microsoft.deviceupdate/accounts","Device Update for IoT Hub","Device Update for IoT Hubs","Device Update for IoT Hub","Device Update for IoT Hubs","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/accounts.svg","[{""title"":""Learn more about Device Update for IoT Hub"",""uri"":""https://docs.microsoft.com/azure/iot-hub-device-update""},{""title"":""Quickstart: create a device update account"",""uri"":""https://docs.microsoft.com/azure/iot-hub-device-update/create-device-update-account""}]" -"microsoft.deviceupdate/updateaccounts","Device Update Account","Device Update Accounts","Device Update Account","Device Update Accounts","false","Device Update Accounts allow you to manage the deployment of updates to your IoT Devices.","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts.svg","[{""title"":""Learn more"",""uri"":""https://aka.ms/portalfx/designpatterns""}]" -"microsoft.deviceupdate/updateaccounts/activedeployments","Device Update Active Deployment","Device Update Active Deployments","Device Update Active Deployment","Device Update Active Deployments","false","Device Update Active Deployments monitor deployment of updates to your devices.","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts/activedeployments.svg","[{""title"":""Learn more"",""uri"":""https://aka.ms/portalfx/designpatterns""}]" -"microsoft.deviceupdate/updateaccounts/agents","Device Update Agent","Device Update Agents","Device Update Agent","Device Update Agents","false","Device Update Agents manage deployment of updates to your devices.","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts/agents.svg","[{""title"":""Learn more"",""uri"":""https://aka.ms/portalfx/designpatterns""}]" -"microsoft.deviceupdate/updateaccounts/deployments","Device Update Deployment","Device Update Deployments","Device Update Deployment","Device Update Deployments","false","Device Update Deployments record deployment of updates to your devices.","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts/deployments.svg","[{""title"":""Learn more"",""uri"":""https://aka.ms/portalfx/designpatterns""}]" -"microsoft.deviceupdate/updateaccounts/deviceclasses","Device Update Device Class","Device Update Device Classes","Device Update Device Class","Device Update Device Classes","false","Device Update Device Classes identify the best possible update for your devices based on their properties.","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts/deviceclasses.svg","[{""title"":""Learn more"",""uri"":""https://aka.ms/portalfx/designpatterns""}]" -"microsoft.deviceupdate/updateaccounts/updates","Device Update","Device Updates","Device Update","Device Updates","false","Device Updates represent updates to be deployed to your devices.","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts/updates.svg","[{""title"":""Learn more"",""uri"":""https://aka.ms/portalfx/designpatterns""}]" +"microsoft.deviceupdate/updateaccounts","Device Update Account","Device Update Accounts","Device Update Account","Device Update Accounts","false","Device Update Accounts allow you to manage the deployment of updates to your IoT Devices.","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts.svg","" +"microsoft.deviceupdate/updateaccounts/activedeployments","Device Update Active Deployment","Device Update Active Deployments","Device Update Active Deployment","Device Update Active Deployments","false","Device Update Active Deployments monitor deployment of updates to your devices.","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts/activedeployments.svg","" +"microsoft.deviceupdate/updateaccounts/agents","Device Update Agent","Device Update Agents","Device Update Agent","Device Update Agents","false","Device Update Agents manage deployment of updates to your devices.","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts/agents.svg","" +"microsoft.deviceupdate/updateaccounts/deployments","Device Update Deployment","Device Update Deployments","Device Update Deployment","Device Update Deployments","false","Device Update Deployments record deployment of updates to your devices.","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts/deployments.svg","" +"microsoft.deviceupdate/updateaccounts/deviceclasses","Device Update Device Class","Device Update Device Classes","Device Update Device Class","Device Update Device Classes","false","Device Update Device Classes identify the best possible update for your devices based on their properties.","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts/deviceclasses.svg","" +"microsoft.deviceupdate/updateaccounts/updates","Device Update","Device Updates","Device Update","Device Updates","false","Device Updates represent updates to be deployed to your devices.","https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts/updates.svg","" "microsoft.devops/pipelines","Microsoft.DevOps pipeline","Microsoft.DevOps pipelines","microsoft.devops pipeline","microsoft.devops pipelines","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.devops/pipelines.svg","" "microsoft.devopsinfrastructure/pools","Managed DevOps Pool","Managed DevOps Pools","Managed DevOps Pool","Managed DevOps Pools","false","Managed DevOps Pools that meet your team needs.","https://microsoft.github.io/finops-toolkit/svg/microsoft.devopsinfrastructure/pools.svg","[{""title"":""Learn more"",""uri"":""https://aka.ms/mdp-documentation""}]" "microsoft.devspaces/controllers","Microsoft.DevSpaces controller","Microsoft.DevSpaces controllers","microsoft.devspaces controller","microsoft.devspaces controllers","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.devspaces/controllers.svg","" @@ -732,15 +758,16 @@ "microsoft.digitaltwins/digitaltwinsinstances","Azure Digital Twins","Azure Digital Twins","Azure Digital Twins","Azure Digital Twins","false","Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.digitaltwins/digitaltwinsinstances.svg","" "microsoft.documentdb/cassandraclusters","Azure Managed Instance for Apache Cassandra","Azure Managed Instance for Apache Cassandra","Azure Managed Instance for Apache Cassandra","Azure Managed Instance for Apache Cassandra","false","Create a Microsoft Azure Managed Instance for Apache Cassandra","https://microsoft.github.io/finops-toolkit/svg/microsoft.documentdb/cassandraclusters.svg","[{""title"":""Try now"",""uri"":""https://aka.ms/AzureMIApacheCassandra""}]" "microsoft.documentdb/databaseaccounts","Cosmos DB account","Cosmos DB accounts","Azure Cosmos DB account","Azure Cosmos DB accounts","false","Create a globally distributed, multi-model, fully managed database using API of your choice. Or try it for free, up to 20k RU/s, for 30 days with unlimited renewal.","https://microsoft.github.io/finops-toolkit/svg/microsoft.documentdb/databaseaccounts.svg","[{""title"":""Try now"",""uri"":""https://aka.ms/trycosmosdb""}]" +"microsoft.documentdb/fleets","Cosmos DB Fleet","Cosmos DB Fleets","Cosmos DB Fleet","Cosmos DB Fleets","false","Cosmos DB Fleet description goes here","https://microsoft.github.io/finops-toolkit/svg/microsoft.documentdb/fleets.svg","[{""title"":""Cosmos DB Fleet learn more link"",""uri"":""https://aka.ms/cosmosfleet""}]" "microsoft.documentdb/mongoclusters","Azure Cosmos DB for MongoDB (vCore)","Azure Cosmos DB for MongoDB (vCore)","Azure Cosmos DB for MongoDB (vCore)","Azure Cosmos DB for MongoDB (vCore)","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.documentdb/mongoclusters.svg","" "microsoft.documentdb/throughputpools","Microsoft.DocumentDB throughput pool","Microsoft.DocumentDB throughput pools","microsoft.documentdb throughput pool","microsoft.documentdb throughput pools","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.documentdb/throughputpools.svg","" "microsoft.documentdb/throughputpools/throughputpoolaccounts","Microsoft.DocumentDB throughput pools throughput pool account","Microsoft.DocumentDB throughput pools throughput pool accounts","microsoft.documentdb throughput pools throughput pool account","microsoft.documentdb throughput pools throughput pool accounts","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.documentdb/throughputpools/throughputpoolaccounts.svg","" "microsoft.domainregistration/domains","App Service Domain","App Service Domains","App Service domain","App Service domains","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.domainregistration/domains.svg","" "microsoft.domainregistration/topleveldomains","Microsoft.DomainRegistration top level domain","Microsoft.DomainRegistration top level domains","microsoft.domainregistration top level domain","microsoft.domainregistration top level domains","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.domainregistration/topleveldomains.svg","" -"microsoft.durabletask/namespaces","Durable Task Scheduler","Durable Task Schedulers","durable task managed backend","durable task managed backends","false","A Durable Task Scheduler namespace resource","https://microsoft.github.io/finops-toolkit/svg/microsoft.durabletask/namespaces.svg","" +"microsoft.durabletask/namespaces","Microsoft.DurableTask namespace","Microsoft.DurableTask namespaces","microsoft.durabletask namespace","microsoft.durabletask namespaces","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.durabletask/namespaces.svg","" "microsoft.durabletask/namespaces/taskhubs","Task Hub","Task Hubs","task hub","task hubs","false","A Task Hub resource belonging to the namespace","https://microsoft.github.io/finops-toolkit/svg/microsoft.durabletask/namespaces/taskhubs.svg","" -"microsoft.durabletask/schedulers","Durable Task Scheduler","Durable Task Schedulers","durable task managed backend","durable task managed backends","false","A Durable Task Scheduler resource","https://microsoft.github.io/finops-toolkit/svg/microsoft.durabletask/schedulers.svg","" -"microsoft.durabletask/schedulers/taskhubs","Task Hub","Task Hubs","task hub","task hubs","false","A Task Hub resource belonging to the scheduler","https://microsoft.github.io/finops-toolkit/svg/microsoft.durabletask/schedulers/taskhubs.svg","" +"microsoft.durabletask/schedulers","Durable Task Scheduler","Durable Task Schedulers","durable task managed backend","durable task managed backends","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.durabletask/schedulers.svg","" +"microsoft.durabletask/schedulers/taskhubs","Task Hub","Task Hubs","task hub","task hubs","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.durabletask/schedulers/taskhubs.svg","" "microsoft.dynamics365fraudprotection/instances","Microsoft.Dynamics365FraudProtection instance","Microsoft.Dynamics365FraudProtection instances","microsoft.dynamics365fraudprotection instance","microsoft.dynamics365fraudprotection instances","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.dynamics365fraudprotection/instances.svg","" "microsoft.easm/workspaces","Microsoft Defender EASM","Microsoft Defender EASM","Microsoft Defender EASM workspace","Microsoft Defender EASM workspaces","false","Microsoft Defender External Attack Surface Management (Defender EASM) uses proprietary technology to build a dynamic inventory of your web applications, third-party dependencies, and web infrastructure. We combine that with latest threat research and vulnerability intelligence to give you visibility into your organization's security posture.","https://microsoft.github.io/finops-toolkit/svg/microsoft.easm/workspaces.svg","[{""title"":""Learn more"",""uri"":""https://learn.microsoft.com/azure/external-attack-surface-management/deploying-the-defender-easm-azure-resource#create-resources-in-a-resource-group""}]" "microsoft.edge/configurations","Site configuration","Site configurations","site configuration","site configurations","false","Sites","https://microsoft.github.io/finops-toolkit/svg/microsoft.edge/configurations.svg","" @@ -752,15 +779,16 @@ "microsoft.edge/configurations/securityconfigurations","Microsoft.Edge configurations security configuration","Microsoft.Edge configurations security configurations","microsoft.edge configurations security configuration","microsoft.edge configurations security configurations","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.edge/configurations/securityconfigurations.svg","" "microsoft.edge/configurations/timeserverconfigurations","Microsoft.Edge configurations time server configuration","Microsoft.Edge configurations time server configurations","microsoft.edge configurations time server configuration","microsoft.edge configurations time server configurations","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.edge/configurations/timeserverconfigurations.svg","" "microsoft.edge/connectivitystatuses","Microsoft.Edge connectivity statuse","Microsoft.Edge connectivity statuses","microsoft.edge connectivity statuse","microsoft.edge connectivity statuses","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.edge/connectivitystatuses.svg","" +"microsoft.edge/disconnectedoperations","Azure Local - disconnected operations","Azure Local - disconnected operations","Azure Local - disconnected operations","Azure Local - disconnected operations","false","Create a virtual appliance to run Azure Local disconnected operations","https://microsoft.github.io/finops-toolkit/svg/microsoft.edge/disconnectedoperations.svg","[{""title"":""Learn more"",""uri"":""https://azure.com/hci""}]" "microsoft.edge/siteawareresourcetypes","Microsoft.Edge site aware resource type","Microsoft.Edge site aware resource types","microsoft.edge site aware resource type","microsoft.edge site aware resource types","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.edge/siteawareresourcetypes.svg","" "microsoft.edge/sites","Site manager - Azure Arc","Site manager - Azure Arc","site manager - azure arc","site manager - azure arc","false","Sites","https://microsoft.github.io/finops-toolkit/svg/microsoft.edge/sites.svg","" "microsoft.edge/updates","Microsoft.Edge update","Microsoft.Edge updates","microsoft.edge update","microsoft.edge updates","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.edge/updates.svg","" "microsoft.edgemarketplace/offers","Microsoft.EdgeMarketplace offer","Microsoft.EdgeMarketplace offers","microsoft.edgemarketplace offer","microsoft.edgemarketplace offers","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.edgemarketplace/offers.svg","" "microsoft.edgemarketplace/publishers","Microsoft.EdgeMarketplace publisher","Microsoft.EdgeMarketplace publishers","microsoft.edgemarketplace publisher","microsoft.edgemarketplace publishers","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.edgemarketplace/publishers.svg","" "microsoft.edgeorder/addresses","Azure Edge Hardware Center Address","Azure Edge Hardware Center Address","azure edge hardware center address","azure edge hardware center address","false","Addresses created while ordering hardware through Azure Edge Hardware Center are displayed here.","https://microsoft.github.io/finops-toolkit/svg/microsoft.edgeorder/addresses.svg","[{""title"":""Get consistent"",""uri"":""https://aka.ms/edgeHWcenter-learnmore""},{""title"":""Learn more"",""uri"":""https://aka.ms/edgeHWcenter-learnmore""}]" -"microsoft.edgeorder/bootstrapconfigurations","Site Bootstrap Key","Site Bootstrap Keys","site bootstrap key","keys","false","You can generate a Site Bootstrap key to start provisioning your devices at your Site.","https://microsoft.github.io/finops-toolkit/svg/microsoft.edgeorder/bootstrapconfigurations.svg","[{""title"":""Learn More"",""uri"":""https://aka.ms/adaptivecloud/ztp/lm-sitebootstrapkey""}]" +"microsoft.edgeorder/bootstrapconfigurations","Site Key","Site Keys","site key","keys","false","You can generate a Site key to start provisioning your devices at your Site.","https://microsoft.github.io/finops-toolkit/svg/microsoft.edgeorder/bootstrapconfigurations.svg","[{""title"":""Learn more"",""uri"":""https://aka.ms/ztp/guide/gs-learn-more""}]" "microsoft.edgeorder/orderitems","Azure Edge Hardware Center","Azure Edge Hardware Center","azure edge hardware center","azure edge hardware center","false","Azure Edge Hardware Center lets you explore and order a variety of first party Azure hardware helping you build and run hybrid apps across datacenters, edge locations, remote offices and the cloud.","https://microsoft.github.io/finops-toolkit/svg/microsoft.edgeorder/orderitems.svg","[{""title"":""Get consistent"",""uri"":""https://aka.ms/edgeHWcenter-learnmore""},{""title"":""Learn more"",""uri"":""https://aka.ms/edgeHWcenter-learnmore""}]" -"microsoft.edgeorder/virtual_orderitems","Device","Devices","device","device","false","Follow the secure, low-touch step by step procedure to set up one or thousands of devices.","https://microsoft.github.io/finops-toolkit/svg/microsoft.edgeorder/virtual_orderitems.svg","" +"microsoft.edgeorder/virtual_orderitems","Device","Devices","device","device","false","Follow the secure, low-touch step by step procedure to set up one or thousands of devices.","https://microsoft.github.io/finops-toolkit/svg/microsoft.edgeorder/virtual_orderitems.svg","[{""title"":""Learn more"",""uri"":""https://aka.ms/ztp/guide/gs-learn-more""}]" "microsoft.edgezones/extendedzones","Microsoft.EdgeZones extended zone","Microsoft.EdgeZones extended zones","microsoft.edgezones extended zone","microsoft.edgezones extended zones","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.edgezones/extendedzones.svg","" "microsoft.education/grants","Microsoft.Education grant","Microsoft.Education grants","microsoft.education grant","microsoft.education grants","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.education/grants.svg","" "microsoft.education/labs","Microsoft.Education lab","Microsoft.Education labs","microsoft.education lab","microsoft.education labs","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.education/labs.svg","" @@ -836,6 +864,7 @@ "microsoft.gallery/myareas/galleryitems","Template","Templates","template","templates","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.gallery/myareas/galleryitems.svg","" "microsoft.genomics/accounts","Genomics account","Genomics accounts","genomics account","genomics accounts","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.genomics/accounts.svg","" "microsoft.graph/azureadapplication","Entra application","Entra applications","Entra application","Entra applications","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.graph/azureadapplication.svg","" +"microsoft.graph/azureadapplicationprototype","Microsoft.Graph Azure ad application prototype","Microsoft.Graph Azure ad application prototype","microsoft.graph azure ad application prototype","microsoft.graph azure ad application prototype","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.graph/azureadapplicationprototype.svg","" "microsoft.graphservices/accounts","Metered API account","Metered API accounts","metered API account","metered API accounts","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.graphservices/accounts.svg","" "microsoft.guestconfiguration/guestconfigurationassignments","Microsoft.GuestConfiguration guest configuration assignment","Microsoft.GuestConfiguration guest configuration assignments","microsoft.guestconfiguration guest configuration assignment","microsoft.guestconfiguration guest configuration assignments","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.guestconfiguration/guestconfigurationassignments.svg","" "microsoft.guestconfiguration/guestconfigurationassignments/reports","Microsoft.GuestConfiguration guest configuration assignments report","Microsoft.GuestConfiguration guest configuration assignments reports","microsoft.guestconfiguration guest configuration assignments report","microsoft.guestconfiguration guest configuration assignments reports","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.guestconfiguration/guestconfigurationassignments/reports.svg","" @@ -843,8 +872,9 @@ "microsoft.hanaonazure/sapmonitors","Azure Monitor for SAP Solutions (classic)","Azure Monitors for SAP Solutions (classic)","Azure monitor for SAP Solutions (classic)","Azure monitors for SAP Solutions (classic)","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.hanaonazure/sapmonitors.svg","" "microsoft.hardware/orders","Microsoft.Hardware order","Microsoft.Hardware orders","microsoft.hardware order","microsoft.hardware orders","false","A Hardware Resource Provider Order resource","https://microsoft.github.io/finops-toolkit/svg/microsoft.hardware/orders.svg","" "microsoft.hardwaresecuritymodules/cloudhsmclusters","Azure Cloud HSM","Azure Cloud HSMs","azure cloud hsm","azure cloud hsms","false","Azure Cloud HSM provides customer-managed, single tenant, highly available HSMs to store and manage your cryptographic keys.","https://microsoft.github.io/finops-toolkit/svg/microsoft.hardwaresecuritymodules/cloudhsmclusters.svg","" -"microsoft.hdinsight/clusterpools","Azure HDInsight on AKS cluster pool","Azure HDInsight on AKS cluster pools","Azure HDInsight on AKS cluster pool","Azure HDInsight on AKS cluster pools","true","Create an Azure HDInsight on AKS cluster pool to organize your HDInsight on AKS clusters. You can have multiple clusters in the same cluster pool.","https://microsoft.github.io/finops-toolkit/svg/microsoft.hdinsight/clusterpools.svg","[{""title"":""Learn more about HDInsight on AKS cluster pool"",""uri"":""https://go.microsoft.com/fwlink/?linkid=2241255""}]" -"microsoft.hdinsight/clusterpools/clusters","Azure HDInsight on AKS cluster","Azure HDInsight on AKS clusters","Azure HDInsight on AKS cluster","Azure HDInsight on AKS clusters","true","Create an Azure HDInsight on AKS cluster to process massive amounts of data using modern and latest open-source frameworks such as Apache Flink, Trino, Apache Spark, and more.","https://microsoft.github.io/finops-toolkit/svg/microsoft.hdinsight/clusterpools/clusters.svg","[{""title"":""Learn more about HDInsight on AKS cluster"",""uri"":""https://go.microsoft.com/fwlink/?linkid=2241255""}]" +"microsoft.hdinsight/clusterpools","Azure HDInsight on AKS cluster pool","Azure HDInsight on AKS cluster pools","Azure HDInsight on AKS cluster pool","Azure HDInsight on AKS cluster pools","false","Create an Azure HDInsight on AKS cluster pool to organize your HDInsight on AKS clusters. You can have multiple clusters in the same cluster pool.","https://microsoft.github.io/finops-toolkit/svg/microsoft.hdinsight/clusterpools.svg","[{""title"":""Learn more about HDInsight on AKS cluster pool"",""uri"":""https://go.microsoft.com/fwlink/?linkid=2241255""}]" +"microsoft.hdinsight/clusterpools/clusters","Azure HDInsight on AKS cluster","Azure HDInsight on AKS clusters","Azure HDInsight on AKS cluster","Azure HDInsight on AKS clusters","false","Create an Azure HDInsight on AKS cluster to process massive amounts of data using modern and latest open-source frameworks such as Apache Flink, Trino, Apache Spark, and more.","https://microsoft.github.io/finops-toolkit/svg/microsoft.hdinsight/clusterpools/clusters.svg","[{""title"":""Learn more about HDInsight on AKS cluster"",""uri"":""https://go.microsoft.com/fwlink/?linkid=2241255""}]" +"microsoft.hdinsight/clusterpools/clusters/instanceviews","Microsoft.HDInsight clusterpools clusters instance view","Microsoft.HDInsight clusterpools clusters instance views","microsoft.hdinsight clusterpools clusters instance view","microsoft.hdinsight clusterpools clusters instance views","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.hdinsight/clusterpools/clusters/instanceviews.svg","" "microsoft.hdinsight/clusters","HDInsight cluster","HDInsight clusters","HDInsight cluster","HDInsight clusters","false","Create an HDInsight cluster to process massive amounts of data using popular open-source frameworks such as Hadoop, Spark, Hive, LLAP, Kafka, Storm, ML Services, and more.","https://microsoft.github.io/finops-toolkit/svg/microsoft.hdinsight/clusters.svg","[{""title"":""Learn more about HDInsight"",""uri"":""https://go.microsoft.com/fwlink/?linkid=2033939""}]" "microsoft.healthbot/healthbots","Healthcare agent service","Healthcare agent service","Healthcare agent service","Healthcare agent service instances","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.healthbot/healthbots.svg","" "microsoft.healthcareapis/services","Azure API for FHIR","Azure API for FHIR","Azure API for FHIR","Azure API for FHIR","false","Azure API for FHIR® is a managed, standards-based, and compliant healthcare data platform. It enables organizations to bring their clinical health data into the cloud based on the interoperable data standard FHIR®.","https://microsoft.github.io/finops-toolkit/svg/microsoft.healthcareapis/services.svg","" @@ -853,7 +883,8 @@ "microsoft.healthcareapis/workspaces/fhirservices","FHIR service","FHIR service","FHIR service","FHIR service","false","Health Data Services is a secure platform designed for Protected Health Information and related health data workloads in the cloud. It enables analytics and machine learning with health data, and powers scalable solutions in health and life sciences. The Azure Health Data Services are based on the interoperable data standard FHIR® and DICOMweb™. Each instance of Azure Health Data Services is a unique workspace, which is a grouping of data services that share commonality. Within a single workspace, you can provision multiple FHIR services, DICOM services and MedTech service which work seamlessly with one another.","https://microsoft.github.io/finops-toolkit/svg/microsoft.healthcareapis/workspaces/fhirservices.svg","" "microsoft.healthcareapis/workspaces/iotconnectors","MedTech service","MedTech service","MedTech service","MedTech service","false","Health Data Services is a secure platform designed for Protected Health Information and related health data workloads in the cloud. It enables analytics and machine learning with health data, and powers scalable solutions in health and life sciences. The Azure Health Data Services are based on the interoperable data standard FHIR® and DICOMweb™. Each instance of Azure Health Data Services is a unique workspace, which is a grouping of data services that share commonality. Within a single workspace, you can provision multiple FHIR services, DICOM services and MedTech service which work seamlessly with one another.","https://microsoft.github.io/finops-toolkit/svg/microsoft.healthcareapis/workspaces/iotconnectors.svg","" "microsoft.healthdataaiservices/deidservices","De-identification Service","De-identification Services","de-identification service","de-identification services","false","De-identification for Health Data and AI Services is a cloud-based API service that applies machine-learning intelligence to extract and label, redact, or surrogate protected health information (PHI) from a variety of unstructured texts such as doctor's notes, clinical documents, clinical transcripts, and electronic health records. The service performs three key functions which are tag, redact, or surrogate, through synchronous (“real time”) or asynchronous (“batch”) API calls.","https://microsoft.github.io/finops-toolkit/svg/microsoft.healthdataaiservices/deidservices.svg","" -"microsoft.healthmodel/healthmodels","Health Model","Health Models","health model","health models","true","A health model augments metric and logs with critical business context of a workload, enabling the automated evaluation of quantified health states.","https://microsoft.github.io/finops-toolkit/svg/microsoft.healthmodel/healthmodels.svg","[{""title"":""Build health models"",""uri"":""https://aka.ms/portalfx/designpatterns""},{""title"":""Learn more"",""uri"":""https://aka.ms/portalfx/browse""}]" +"microsoft.healthmodel/healthmodels","Health Model","Health Models","health model","health models","true","A health model augments metric and logs with critical business context of a workload, enabling the automated evaluation of quantified health states.","https://microsoft.github.io/finops-toolkit/svg/microsoft.healthmodel/healthmodels.svg","" +"microsoft.healthplatform/accounts","Microsoft.HealthPlatform account","Microsoft.HealthPlatform accounts","microsoft.healthplatform account","microsoft.healthplatform accounts","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.healthplatform/accounts.svg","" "microsoft.help/diagnostics","Microsoft.Help diagnostic","Microsoft.Help diagnostics","microsoft.help diagnostic","microsoft.help diagnostics","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.help/diagnostics.svg","" "microsoft.help/selfhelp","Microsoft.Help self help","Microsoft.Help self help","microsoft.help self help","microsoft.help self help","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.help/selfhelp.svg","" "microsoft.help/simplifiedsolutions","Microsoft.Help simplified solution","Microsoft.Help simplified solutions","microsoft.help simplified solution","microsoft.help simplified solutions","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.help/simplifiedsolutions.svg","" @@ -936,7 +967,7 @@ "microsoft.impact/impactcategories","Microsoft.Impact impact category","Microsoft.Impact impact categories","microsoft.impact impact category","microsoft.impact impact categories","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.impact/impactcategories.svg","" "microsoft.impact/topologyimpacts","Microsoft.Impact topology impact","Microsoft.Impact topology impacts","microsoft.impact topology impact","microsoft.impact topology impacts","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.impact/topologyimpacts.svg","" "microsoft.impact/workloadimpacts","Microsoft.Impact workload impact","Microsoft.Impact workload impacts","microsoft.impact workload impact","microsoft.impact workload impacts","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.impact/workloadimpacts.svg","" -"microsoft.impact/workloadimpacts/insights","Microsoft.Impact workload impacts insight","Microsoft.Impact workload impacts insights","microsoft.impact workload impacts insight","microsoft.impact workload impacts insights","false","Insight resource","https://microsoft.github.io/finops-toolkit/svg/microsoft.impact/workloadimpacts/insights.svg","" +"microsoft.impact/workloadimpacts/insights","Microsoft.Impact workload impacts insight","Microsoft.Impact workload impacts insights","microsoft.impact workload impacts insight","microsoft.impact workload impacts insights","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.impact/workloadimpacts/insights.svg","" "microsoft.importexport/jobs","Microsoft.ImportExport job","Microsoft.ImportExport jobs","microsoft.importexport job","microsoft.importexport jobs","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.importexport/jobs.svg","" "microsoft.insights/actiongroups","Action group","Action groups","action group","action groups","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.insights/actiongroups.svg","" "microsoft.insights/activitylogalerts","Activity log alert rule","Activity log alert rules","activity log alert rule","activity log alert rules","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.insights/activitylogalerts.svg","" @@ -971,7 +1002,7 @@ "microsoft.intelligentitdigitaltwin/digitaltwins/tests","Microsoft.IntelligentITDigitalTwin digital twins test","Microsoft.IntelligentITDigitalTwin digital twins tests","microsoft.intelligentitdigitaltwin digital twins test","microsoft.intelligentitdigitaltwin digital twins tests","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.intelligentitdigitaltwin/digitaltwins/tests.svg","" "microsoft.inventory/subscriptioninternalproperties","Microsoft.Inventory subscription internal property","Microsoft.Inventory subscription internal properties","microsoft.inventory subscription internal property","microsoft.inventory subscription internal properties","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.inventory/subscriptioninternalproperties.svg","" "microsoft.iotcentral/iotapps","IoT Central Application","IoT Central Applications","iot central application","iot central applications","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.iotcentral/iotapps.svg","" -"microsoft.iotfirmwaredefense/workspaces","Microsoft.IoTFirmwareDefense workspace","Microsoft.IoTFirmwareDefense workspaces","microsoft.iotfirmwaredefense workspace","microsoft.iotfirmwaredefense workspaces","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.iotfirmwaredefense/workspaces.svg","" +"microsoft.iotfirmwaredefense/workspaces","Firmware analysis workspace","Firmware analysis workspaces","firmware analysis workspace","firmware analysis workspaces","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.iotfirmwaredefense/workspaces.svg","" "microsoft.iotfirmwaredefense/workspaces/firmwares","Microsoft.IoTFirmwareDefense workspaces firmware","Microsoft.IoTFirmwareDefense workspaces firmwares","microsoft.iotfirmwaredefense workspaces firmware","microsoft.iotfirmwaredefense workspaces firmwares","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.iotfirmwaredefense/workspaces/firmwares.svg","" "microsoft.iotfirmwaredefense/workspaces/firmwares/summaries","Microsoft.IoTFirmwareDefense workspaces firmwares summary","Microsoft.IoTFirmwareDefense workspaces firmwares summaries","microsoft.iotfirmwaredefense workspaces firmwares summary","microsoft.iotfirmwaredefense workspaces firmwares summaries","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.iotfirmwaredefense/workspaces/firmwares/summaries.svg","" "microsoft.iotoperations/instances","Azure IoT Operations","Azure IoT Operations","Azure IoT Operations","Azure IoT Operations","false","Azure IoT Operations is a set of composable services that run on Azure Arc-enabled edge Kubernetes clusters. These services can be deployed and managed together.","https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperations/instances.svg","" @@ -986,6 +1017,17 @@ "microsoft.iotoperationsdataprocessor/instances/datasets","Microsoft.IoTOperationsDataProcessor instances dataset","Microsoft.IoTOperationsDataProcessor instances datasets","microsoft.iotoperationsdataprocessor instances dataset","microsoft.iotoperationsdataprocessor instances datasets","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsdataprocessor/instances/datasets.svg","" "microsoft.iotoperationsdataprocessor/instances/pipelines","Microsoft.IoTOperationsDataProcessor instances pipeline","Microsoft.IoTOperationsDataProcessor instances pipelines","microsoft.iotoperationsdataprocessor instances pipeline","microsoft.iotoperationsdataprocessor instances pipelines","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsdataprocessor/instances/pipelines.svg","" "microsoft.iotoperationsmq/mq","IoT Operations Ops MQ","IoT Operations Ops MQs","ioT operations ops mq","iot operations ops mqs","false","Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq.svg","" +"microsoft.iotoperationsmq/mq/broker","Microsoft.IoTOperationsMQ mq broker","Microsoft.IoTOperationsMQ mq broker","microsoft.iotoperationsmq mq broker","microsoft.iotoperationsmq mq broker","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/broker.svg","" +"microsoft.iotoperationsmq/mq/broker/authentication","Microsoft.IoTOperationsMQ mq broker authentication","Microsoft.IoTOperationsMQ mq broker authentication","microsoft.iotoperationsmq mq broker authentication","microsoft.iotoperationsmq mq broker authentication","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/broker/authentication.svg","" +"microsoft.iotoperationsmq/mq/broker/authorization","Microsoft.IoTOperationsMQ mq broker authorization","Microsoft.IoTOperationsMQ mq broker authorization","microsoft.iotoperationsmq mq broker authorization","microsoft.iotoperationsmq mq broker authorization","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/broker/authorization.svg","" +"microsoft.iotoperationsmq/mq/broker/listener","Microsoft.IoTOperationsMQ mq broker listener","Microsoft.IoTOperationsMQ mq broker listener","microsoft.iotoperationsmq mq broker listener","microsoft.iotoperationsmq mq broker listener","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/broker/listener.svg","" +"microsoft.iotoperationsmq/mq/datalakeconnector","Microsoft.IoTOperationsMQ mq data lake connector","Microsoft.IoTOperationsMQ mq data lake connector","microsoft.iotoperationsmq mq data lake connector","microsoft.iotoperationsmq mq data lake connector","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/datalakeconnector.svg","" +"microsoft.iotoperationsmq/mq/datalakeconnector/topicmap","Microsoft.IoTOperationsMQ mq data lake connector topic map","Microsoft.IoTOperationsMQ mq data lake connector topic map","microsoft.iotoperationsmq mq data lake connector topic map","microsoft.iotoperationsmq mq data lake connector topic map","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/datalakeconnector/topicmap.svg","" +"microsoft.iotoperationsmq/mq/diagnosticservice","Microsoft.IoTOperationsMQ mq diagnostic service","Microsoft.IoTOperationsMQ mq diagnostic service","microsoft.iotoperationsmq mq diagnostic service","microsoft.iotoperationsmq mq diagnostic service","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/diagnosticservice.svg","" +"microsoft.iotoperationsmq/mq/kafkaconnector","Microsoft.IoTOperationsMQ mq kafka connector","Microsoft.IoTOperationsMQ mq kafka connector","microsoft.iotoperationsmq mq kafka connector","microsoft.iotoperationsmq mq kafka connector","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/kafkaconnector.svg","" +"microsoft.iotoperationsmq/mq/kafkaconnector/topicmap","Microsoft.IoTOperationsMQ mq kafka connector topic map","Microsoft.IoTOperationsMQ mq kafka connector topic map","microsoft.iotoperationsmq mq kafka connector topic map","microsoft.iotoperationsmq mq kafka connector topic map","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/kafkaconnector/topicmap.svg","" +"microsoft.iotoperationsmq/mq/mqttbridgeconnector","Microsoft.IoTOperationsMQ mq mqtt bridge connector","Microsoft.IoTOperationsMQ mq mqtt bridge connector","microsoft.iotoperationsmq mq mqtt bridge connector","microsoft.iotoperationsmq mq mqtt bridge connector","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/mqttbridgeconnector.svg","" +"microsoft.iotoperationsmq/mq/mqttbridgeconnector/topicmap","Microsoft.IoTOperationsMQ mq mqtt bridge connector topic map","Microsoft.IoTOperationsMQ mq mqtt bridge connector topic map","microsoft.iotoperationsmq mq mqtt bridge connector topic map","microsoft.iotoperationsmq mq mqtt bridge connector topic map","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/mqttbridgeconnector/topicmap.svg","" "microsoft.iotoperationsorchestrator/instances","Microsoft.IoTOperationsOrchestrator instance","Microsoft.IoTOperationsOrchestrator instances","microsoft.iotoperationsorchestrator instance","microsoft.iotoperationsorchestrator instances","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsorchestrator/instances.svg","" "microsoft.iotoperationsorchestrator/solutions","Microsoft.IoTOperationsOrchestrator solution","Microsoft.IoTOperationsOrchestrator solutions","microsoft.iotoperationsorchestrator solution","microsoft.iotoperationsorchestrator solutions","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsorchestrator/solutions.svg","" "microsoft.iotoperationsorchestrator/targets","Microsoft.IoTOperationsOrchestrator target","Microsoft.IoTOperationsOrchestrator targets","microsoft.iotoperationsorchestrator target","microsoft.iotoperationsorchestrator targets","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsorchestrator/targets.svg","" @@ -1020,13 +1062,14 @@ "microsoft.labservices/labaccounts/labs","Lab","Labs","lab","labs","false","Lab Creators use the Azure Lab Services website to create labs, provision virtual machines, install software and more. To create labs, at least one lab plan is needed.","https://microsoft.github.io/finops-toolkit/svg/microsoft.labservices/labaccounts/labs.svg","[{""title"":""Go to labs.azure.com"",""uri"":""https://labs.azure.com""},{""title"":""Learn more"",""uri"":""https://aka.ms/azlabs-setupLab""}]" "microsoft.labservices/labplans","Lab plan","Lab plans","lab plan","lab plans","false","Lab plans allow settings and configurations to be applied to labs. Create a lab plan to enable the creation of labs in your organization.","https://microsoft.github.io/finops-toolkit/svg/microsoft.labservices/labplans.svg","[{""title"":""Learn more"",""uri"":""https://aka.ms/azlabs-setupLabPlan""}]" "microsoft.labservices/labs","Lab","Labs","lab","labs","false","Lab Creators use the Azure Lab Services website to create labs, provision virtual machines, install software and more. To create labs, at least one lab plan is needed.","https://microsoft.github.io/finops-toolkit/svg/microsoft.labservices/labs.svg","[{""title"":""Go to labs.azure.com"",""uri"":""https://labs.azure.com""},{""title"":""Learn more"",""uri"":""https://aka.ms/azlabs-setupLab""}]" -"microsoft.liftrpilot/organizations","Microsoft.LiftrPilot organization","Microsoft.LiftrPilot organizations","microsoft.liftrpilot organization","microsoft.liftrpilot organizations","false","Concrete tracked resource types can be created by aliasing this type using a specific property type.","https://microsoft.github.io/finops-toolkit/svg/microsoft.liftrpilot/organizations.svg","" +"microsoft.liftrpilot/organizations","Microsoft.LiftrPilot organization","Microsoft.LiftrPilot organizations","microsoft.liftrpilot organization","microsoft.liftrpilot organizations","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.liftrpilot/organizations.svg","" "microsoft.loadtestservice/loadtestmappings","Microsoft.LoadTestService load test mapping","Microsoft.LoadTestService load test mappings","microsoft.loadtestservice load test mapping","microsoft.loadtestservice load test mappings","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.loadtestservice/loadtestmappings.svg","" "microsoft.loadtestservice/loadtestprofilemappings","Microsoft.LoadTestService load test profile mapping","Microsoft.LoadTestService load test profile mappings","microsoft.loadtestservice load test profile mapping","microsoft.loadtestservice load test profile mappings","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.loadtestservice/loadtestprofilemappings.svg","" "microsoft.loadtestservice/loadtests","Azure Load Testing","Azure Load Testing","Azure load testing resource","Azure load testing resources","false","Azure Load Testing is a fully managed load testing service that enables developers and testers to generate high-scale load and reveals actionable insights into app performance, scalability, and capacity.","https://microsoft.github.io/finops-toolkit/svg/microsoft.loadtestservice/loadtests.svg","[{""title"":""Learn more about Azure Load Testing"",""uri"":""https://azure.microsoft.com/services/load-testing""},{""title"":""Documentation"",""uri"":""https://docs.microsoft.com/azure/load-testing/""}]" "microsoft.logic/businessprocesses","Business Process","Business Process Tracking","business process","business processes","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.logic/businessprocesses.svg","" "microsoft.logic/integrationaccounts","Logic app integration account","Logic app integration accounts","integration account","integration accounts","false","Build enterprise integration and B2B/EDI solutions with Logic Apps.","https://microsoft.github.io/finops-toolkit/svg/microsoft.logic/integrationaccounts.svg","" "microsoft.logic/integrationserviceenvironments","Integration Service Environment","Integration Service Environments","integration service environment","integration service environments","false","Fully isolated and dedicated environment for Logic Apps. Please note that the deployment of ISE can take up to 4 hours to complete.","https://microsoft.github.io/finops-toolkit/svg/microsoft.logic/integrationserviceenvironments.svg","" +"microsoft.logic/integrationserviceenvironments/health","Microsoft.Logic integration service environments health","Microsoft.Logic integration service environments health","microsoft.logic integration service environments health","microsoft.logic integration service environments health","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.logic/integrationserviceenvironments/health.svg","" "microsoft.logic/integrationserviceenvironments/managedapis","Managed Connector","Managed Connector","managed connector","managed connectors","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.logic/integrationserviceenvironments/managedapis.svg","" "microsoft.logic/workflows","Logic app","Logic apps","logic app","logic apps","false","Create workflows leveraging hundreds of connectors and the visual designer.","https://microsoft.github.io/finops-toolkit/svg/microsoft.logic/workflows.svg","" "microsoft.logz/monitors","Logz.io","Logz.io","Logz.io","Logz.io","false","Integration with Logz.io enables our customers to send all the logs for non compute resources to Logz.io without having to configure event hubs or enable diagnostic settings. Creating the main account and providing SSO allows user to dynamically include/ exclude tags and SSO into their Logz.io account hassle free. ","https://microsoft.github.io/finops-toolkit/svg/microsoft.logz/monitors.svg","" @@ -1047,6 +1090,7 @@ "microsoft.machinelearningservices/workspaces/onlineendpoints/deployments","Machine learning online deployment","Machine learning online deployments","machine learning online deployment","machine learning online deployments","false","Workspaces are where you manage all the models, assets, and data related to your machine learning projects. Create one now to start using Azure Machine Learning.","https://microsoft.github.io/finops-toolkit/svg/microsoft.machinelearningservices/workspaces/onlineendpoints/deployments.svg","" "microsoft.maintenance/configurationassignments","Microsoft.Maintenance configuration assignment","Microsoft.Maintenance configuration assignments","microsoft.maintenance configuration assignment","microsoft.maintenance configuration assignments","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.maintenance/configurationassignments.svg","" "microsoft.maintenance/maintenanceconfigurations","Maintenance Configuration","Maintenance Configurations","maintenance configuration","maintenance configurations","false","Manage platform updates that don't require a reboot using maintenance control. Maintenance control lets you decide when to apply updates to your virtual infrastructure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.maintenance/maintenanceconfigurations.svg","[{""title"":""Learn more"",""uri"":""https://go.microsoft.com/fwlink/?linkid=2160306""}]" +"microsoft.maintenance/maintenanceconfigurationsbladeresource","Maintenance configuration","Maintenance configuration","Maintenance configuration","Maintenance configuration","true","","https://microsoft.github.io/finops-toolkit/svg/microsoft.maintenance/maintenanceconfigurationsbladeresource.svg","" "microsoft.maintenance/publicmaintenanceconfigurations","Microsoft.Maintenance public maintenance configuration","Microsoft.Maintenance public maintenance configurations","microsoft.maintenance public maintenance configuration","microsoft.maintenance public maintenance configurations","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.maintenance/publicmaintenanceconfigurations.svg","" "microsoft.managedidentity/identities","Microsoft.ManagedIdentity identity","Microsoft.ManagedIdentity identities","microsoft.managedidentity identity","microsoft.managedidentity identities","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.managedidentity/identities.svg","" "microsoft.managedidentity/userassignedidentities","Managed Identity","Managed Identities","managed identity","managed identities","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.managedidentity/userassignedidentities.svg","" @@ -1070,7 +1114,7 @@ "microsoft.managednetworkfabric/networkfabrics","Network Fabric (Operator Nexus)","Network Fabrics (Operator Nexus)","network fabric (operator nexus)","network fabrics (operator nexus)","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.managednetworkfabric/networkfabrics.svg","" "microsoft.managednetworkfabric/networkfabrics/networktonetworkinterconnects","Network to Network Interconnect (Operator Nexus)","Network to Network Interconnects (Operator Nexus)","network to network interconnect (operator nexus)","network to network interconnects (operator nexus)","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.managednetworkfabric/networkfabrics/networktonetworkinterconnects.svg","" "microsoft.managednetworkfabric/networkfabricskus","Network Fabric SKU (Operator Nexus)","Network Fabric SKUs (Operator Nexus)","network fabric sku (operator nexus)","network fabric skus (operator nexus)","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.managednetworkfabric/networkfabricskus.svg","" -"microsoft.managednetworkfabric/networkmonitors","Microsoft.ManagedNetworkFabric network monitor","Microsoft.ManagedNetworkFabric network monitors","microsoft.managednetworkfabric network monitor","microsoft.managednetworkfabric network monitors","false","The NetworkMonitor resource definition.","https://microsoft.github.io/finops-toolkit/svg/microsoft.managednetworkfabric/networkmonitors.svg","" +"microsoft.managednetworkfabric/networkmonitors","Microsoft.ManagedNetworkFabric network monitor","Microsoft.ManagedNetworkFabric network monitors","microsoft.managednetworkfabric network monitor","microsoft.managednetworkfabric network monitors","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.managednetworkfabric/networkmonitors.svg","" "microsoft.managednetworkfabric/networkpacketbrokers","Network Packet Broker (Operator Nexus)","Network Packet Brokers (Operator Nexus)","network packet broker (operator nexus)","network packet brokers (operator nexus)","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.managednetworkfabric/networkpacketbrokers.svg","" "microsoft.managednetworkfabric/networkracks","Network Rack (Operator Nexus)","Network Racks (Operator Nexus)","network rack (operator nexus)","network racks (operator nexus)","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.managednetworkfabric/networkracks.svg","" "microsoft.managednetworkfabric/networktaprules","Network Tap Rule (Operator Nexus)","Network Tap Rules (Operator Nexus)","network tap rule (operator nexus)","network tap rules (operator nexus)","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.managednetworkfabric/networktaprules.svg","" @@ -1086,7 +1130,7 @@ "microsoft.management/managementgroups/settings","Microsoft.Management management groups setting","Microsoft.Management management groups settings","microsoft.management management groups setting","microsoft.management management groups settings","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.management/managementgroups/settings.svg","" "microsoft.management/managementgroups/subscriptions","Microsoft.Management management groups subscription","Microsoft.Management management groups subscriptions","microsoft.management management groups subscription","microsoft.management management groups subscriptions","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.management/managementgroups/subscriptions.svg","" "microsoft.managementpartner/partners","Microsoft.ManagementPartner partner","Microsoft.ManagementPartner partners","microsoft.managementpartner partner","microsoft.managementpartner partners","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.managementpartner/partners.svg","" -"microsoft.manufacturingplatform/manufacturingdataservices","Factory Operations Agent in Azure AI","Factory Operations Agent in Azure AI","Factory Operations Agent in Azure AI","Factory Operations Agent in Azure AI","false","Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.manufacturingplatform/manufacturingdataservices.svg","" +"microsoft.manufacturingplatform/manufacturingdataservices","Factory Operations Agent in Azure AI Foundry","Factory Operations Agent in Azure AI Foundry","Factory Operations Agent in Azure AI Foundry","Factory Operations Agent in Azure AI Foundry","false","Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.manufacturingplatform/manufacturingdataservices.svg","" "microsoft.maps/accounts","Azure Maps Account","Azure Maps Accounts","azure maps accounts","Azure Maps account","false","Azure Maps is a portfolio of geospatial services that include service APIs for Maps, Search, Routing, Traffic and Time Zones. The portfolio of Azure OneAPI compliant services allows you to use familiar developer tools to quickly develop and scale solutions that integrate location information into your Azure solutions. Azure Maps provides developers from all industries powerful geospatial capabilities packed with fresh mapping data imperative to providing geographic context to web and mobile applications.","https://microsoft.github.io/finops-toolkit/svg/microsoft.maps/accounts.svg","[{""title"":""Learn more about Azure Maps"",""uri"":""https://aka.ms/albs""}]" "microsoft.maps/accounts/creators","Azure Maps Creator Resource","Azure Maps Creator Resources","Azure Maps creator resources","Azure Maps creator resource","false","Creator allows you to create private maps and map applications using Azure Maps API and SDK.","https://microsoft.github.io/finops-toolkit/svg/microsoft.maps/accounts/creators.svg","" "microsoft.marketplace/privatestores","Microsoft.Marketplace private store","Microsoft.Marketplace private stores","microsoft.marketplace private store","microsoft.marketplace private stores","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.marketplace/privatestores.svg","" @@ -1096,8 +1140,22 @@ "microsoft.marketplace/privatestores/offers","Microsoft.Marketplace private stores offer","Microsoft.Marketplace private stores offers","microsoft.marketplace private stores offer","microsoft.marketplace private stores offers","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.marketplace/privatestores/offers.svg","" "microsoft.marketplace/privatestores/requestapprovals","Microsoft.Marketplace private stores request approval","Microsoft.Marketplace private stores request approvals","microsoft.marketplace private stores request approval","microsoft.marketplace private stores request approvals","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.marketplace/privatestores/requestapprovals.svg","" "microsoft.media/mediaservices","Media service","Media Services","media service","Media Services","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices.svg","" +"microsoft.media/mediaservices/accountfilters","Microsoft.Media media services account filter","Microsoft.Media media services account filters","microsoft.media media services account filter","microsoft.media media services account filters","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/accountfilters.svg","" +"microsoft.media/mediaservices/assets","Microsoft.Media media services asset","Microsoft.Media media services assets","microsoft.media media services asset","microsoft.media media services assets","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/assets.svg","" +"microsoft.media/mediaservices/assets/assetfilters","Microsoft.Media media services assets asset filter","Microsoft.Media media services assets asset filters","microsoft.media media services assets asset filter","microsoft.media media services assets asset filters","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/assets/assetfilters.svg","" +"microsoft.media/mediaservices/assets/tracks","Microsoft.Media media services assets track","Microsoft.Media media services assets tracks","microsoft.media media services assets track","microsoft.media media services assets tracks","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/assets/tracks.svg","" +"microsoft.media/mediaservices/assets/tracks/operationresults","Microsoft.Media media services assets tracks operation result","Microsoft.Media media services assets tracks operation results","microsoft.media media services assets tracks operation result","microsoft.media media services assets tracks operation results","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/assets/tracks/operationresults.svg","" +"microsoft.media/mediaservices/assets/tracks/operationstatuses","Microsoft.Media media services assets tracks operation statuse","Microsoft.Media media services assets tracks operation statuses","microsoft.media media services assets tracks operation statuse","microsoft.media media services assets tracks operation statuses","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/assets/tracks/operationstatuses.svg","" +"microsoft.media/mediaservices/contentkeypolicies","Microsoft.Media media services content key policy","Microsoft.Media media services content key policies","microsoft.media media services content key policy","microsoft.media media services content key policies","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/contentkeypolicies.svg","" "microsoft.media/mediaservices/liveevents","Live event","Live events","live event","live events","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/liveevents.svg","" +"microsoft.media/mediaservices/liveevents/liveoutputs","Microsoft.Media mediaservices live events live output","Microsoft.Media mediaservices live events live outputs","microsoft.media mediaservices live events live output","microsoft.media mediaservices live events live outputs","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/liveevents/liveoutputs.svg","" +"microsoft.media/mediaservices/privateendpointconnections","Microsoft.Media mediaservices private endpoint connection","Microsoft.Media mediaservices private endpoint connections","microsoft.media mediaservices private endpoint connection","microsoft.media mediaservices private endpoint connections","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/privateendpointconnections.svg","" +"microsoft.media/mediaservices/privatelinkresources","Microsoft.Media mediaservices private link resource","Microsoft.Media mediaservices private link resources","microsoft.media mediaservices private link resource","microsoft.media mediaservices private link resources","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/privatelinkresources.svg","" "microsoft.media/mediaservices/streamingendpoints","Streaming Endpoint","Streaming Endpoints","streaming endpoint","streaming endpoints","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/streamingendpoints.svg","" +"microsoft.media/mediaservices/streaminglocators","Microsoft.Media media services streaming locator","Microsoft.Media media services streaming locators","microsoft.media media services streaming locator","microsoft.media media services streaming locators","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/streaminglocators.svg","" +"microsoft.media/mediaservices/streamingpolicies","Microsoft.Media media services streaming policy","Microsoft.Media media services streaming policies","microsoft.media media services streaming policy","microsoft.media media services streaming policies","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/streamingpolicies.svg","" +"microsoft.media/mediaservices/transforms","Microsoft.Media media services transform","Microsoft.Media media services transforms","microsoft.media media services transform","microsoft.media media services transforms","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/transforms.svg","" +"microsoft.media/mediaservices/transforms/jobs","Microsoft.Media media services transforms job","Microsoft.Media media services transforms jobs","microsoft.media media services transforms job","microsoft.media media services transforms jobs","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/transforms/jobs.svg","" "microsoft.mesh/worlds","Microsoft.Mesh world","Microsoft.Mesh worlds","microsoft.mesh world","microsoft.mesh worlds","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.mesh/worlds.svg","" "microsoft.mesh/worlds/events","Microsoft.Mesh worlds event","Microsoft.Mesh worlds events","microsoft.mesh worlds event","microsoft.mesh worlds events","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.mesh/worlds/events.svg","" "microsoft.mesh/worlds/events/accesspolicies","Microsoft.Mesh worlds events access policy","Microsoft.Mesh worlds events access policies","microsoft.mesh worlds events access policy","microsoft.mesh worlds events access policies","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.mesh/worlds/events/accesspolicies.svg","" @@ -1184,8 +1242,8 @@ "microsoft.mission/communities/communityendpoints","Community endpoint","Community endpoints","community endpoint","community endpoints","false","Community endpoints are collections of networking rules that enable external connectivity to trusted destinations including public websites, well-known services, and external private networks","https://microsoft.github.io/finops-toolkit/svg/microsoft.mission/communities/communityendpoints.svg","[{""title"":""Learn more"",""uri"":""CommunityEndpoint.linkValue""}]" "microsoft.mission/communities/transithubs","Transit hub","Transit hubs","transit hub","transit hubs","false","Create transit hubs to securely allow network traffic through the community firewall to and from external destinations.","https://microsoft.github.io/finops-toolkit/svg/microsoft.mission/communities/transithubs.svg","[{""title"":""Learn more"",""uri"":""TransitHub.linkValue""}]" "microsoft.mission/enclaveconnections","Enclave connection","Enclave connections","enclave connection","enclave connections","false","Enclave connections associate two virtual enclaves within a community using exposed endpoints that define security rules and firewall policies for connecting.","https://microsoft.github.io/finops-toolkit/svg/microsoft.mission/enclaveconnections.svg","[{""title"":""Learn more"",""uri"":""EnclaveConnection.linkValue""}]" -"microsoft.mission/externalconnections","Microsoft.Mission external connection","Microsoft.Mission external connections","microsoft.mission external connection","microsoft.mission external connections","false","Describes an External Connection.","https://microsoft.github.io/finops-toolkit/svg/microsoft.mission/externalconnections.svg","" -"microsoft.mission/internalconnections","Microsoft.Mission internal connection","Microsoft.Mission internal connections","microsoft.mission internal connection","microsoft.mission internal connections","false","Describes an Internal Connection.","https://microsoft.github.io/finops-toolkit/svg/microsoft.mission/internalconnections.svg","" +"microsoft.mission/externalconnections","Microsoft.Mission external connection","Microsoft.Mission external connections","microsoft.mission external connection","microsoft.mission external connections","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.mission/externalconnections.svg","" +"microsoft.mission/internalconnections","Microsoft.Mission internal connection","Microsoft.Mission internal connections","microsoft.mission internal connection","microsoft.mission internal connections","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.mission/internalconnections.svg","" "microsoft.mission/virtualenclaves","Enclave","Enclaves","enclave","enclaves","false","Create an enclave within a community. Enclaves are isolated virtual networks that host workloads and are secured through managed routes, connections, and Azure Policy.","https://microsoft.github.io/finops-toolkit/svg/microsoft.mission/virtualenclaves.svg","[{""title"":""Learn more"",""uri"":""https://azure.microsoft.com/""}]" "microsoft.mission/virtualenclaves/enclaveendpoints","Enclave endpoint","Enclave endpoints","enclave endpoint","enclave endpoints","false","Community endpoints are collections of networking rules that enable external connectivity to trusted destinations including public websites, well-known services, and external private networks","https://microsoft.github.io/finops-toolkit/svg/microsoft.mission/virtualenclaves/enclaveendpoints.svg","[{""title"":""Learn more"",""uri"":""EnclaveEndpoint.linkValue""}]" "microsoft.mission/virtualenclaves/endpoints","Endpoint","Endpoints","endpoint","endpoints","false","Community endpoints are collections of networking rules that enable external connectivity to trusted destinations including public websites, well-known services, and external private networks","https://microsoft.github.io/finops-toolkit/svg/microsoft.mission/virtualenclaves/endpoints.svg","[{""title"":""Learn more"",""uri"":""https://azure.microsoft.com/""}]" @@ -1292,7 +1350,7 @@ "microsoft.network/networkmanagerconnections","Microsoft.Network network manager connection","Microsoft.Network network manager connections","microsoft.network network manager connection","microsoft.network network manager connections","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkmanagerconnections.svg","" "microsoft.network/networkmanagers","Network manager","Network managers","network manager","network managers","false","Azure Virtual Network Manager enables you to define and apply connectivity and security configurations for your virtual networks across subscriptions and management groups.","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkmanagers.svg","" "microsoft.network/networkmanagers/connectivityconfigurations","Network manager","Network managers","network manager","network managers","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkmanagers/connectivityconfigurations.svg","" -"microsoft.network/networkmanagers/ipampools","IP address pool","IP address pools","ip address pool","ip address pools","false","Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkmanagers/ipampools.svg","[{""title"":""Get consistent"",""uri"":""https://aka.ms/portalfx/browse""}]" +"microsoft.network/networkmanagers/ipampools","IP address pool","IP address pools","ip address pool","ip address pools","false","Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkmanagers/ipampools.svg","" "microsoft.network/networkmanagers/networkgroups","Network manager","Network managers","network manager","network managers","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkmanagers/networkgroups.svg","" "microsoft.network/networkmanagers/routingconfigurations","Network manager","Network managers","network manager","network managers","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkmanagers/routingconfigurations.svg","" "microsoft.network/networkmanagers/securityadminconfigurations","Network manager","Network managers","network manager","network managers","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkmanagers/securityadminconfigurations.svg","" @@ -1300,13 +1358,13 @@ "microsoft.network/networkmanagers/verifierworkspaces","Verifier Workspace","Verifier workspaces","verifier workspace","verifier workspaces","false","Azure Virtual Network Manager's verifier workspace enables you to check if your network policies allow or disallow traffic between your Azure network resources. You can create a verifier workspace from your network manager instance.","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkmanagers/verifierworkspaces.svg","[{""title"":""Learn more"",""uri"":""https://learn.microsoft.com/azure/virtual-network-manager/concept-virtual-network-verifier""}]" "microsoft.network/networkprofiles","Microsoft.Network network profile","Microsoft.Network network profiles","microsoft.network network profile","microsoft.network network profiles","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkprofiles.svg","" "microsoft.network/networksecuritygroups","Network security group","Network security groups","network security group","network security groups","false","Create a network security group with rules to filter inbound traffic to, and outbound traffic from, virtual machines and subnets.","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networksecuritygroups.svg","[{""title"":""Learn more"",""uri"":""https://go.microsoft.com/fwlink/p/?linkid=851112""}]" -"microsoft.network/networksecurityperimeters","Network Security Perimeter","Network Security Perimeters","network security perimeter","network security perimeters","false","Network Security Perimeter is a boundary around PaaS resources. Access between resources on the same network security perimeter is allowed by default.","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networksecurityperimeters.svg","[{""title"":""Learn more"",""uri"":""https://aka.ms/portalfx/browse""}]" -"microsoft.network/networksecurityperimeters/profiles","Network Security Perimeter","Network Security Perimeters","network security perimeter","network security perimeters","false","Network Security Perimeter is a boundary around PaaS resources. Access between resources on the same network security perimeter is allowed by default.","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networksecurityperimeters/profiles.svg","[{""title"":""Learn more"",""uri"":""https://aka.ms/portalfx/browse""}]" +"microsoft.network/networksecurityperimeters","Network Security Perimeter","Network Security Perimeters","network security perimeter","network security perimeters","false","Network Security Perimeter is a boundary around PaaS resources. Access between resources on the same network security perimeter is allowed by default.","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networksecurityperimeters.svg","" +"microsoft.network/networksecurityperimeters/profiles","Network Security Perimeter Profile","Network Security Perimeter Profiles","network security perimeter profile","network security perimeter profiles","false","Network Security Perimeter is a boundary around PaaS resources. Access between resources on the same network security perimeter is allowed by default.","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networksecurityperimeters/profiles.svg","" "microsoft.network/networkverifiers","Virtual Network Verifier","Virtual Network Verifiers","virtual network verifier","virtual network verifiers","false","Azure Virtual Network Verifier enables you to verify your virtual network configurations.","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkverifiers.svg","" "microsoft.network/networkvirtualappliances","Microsoft.Network network virtual appliance","Microsoft.Network network virtual appliances","microsoft.network network virtual appliance","microsoft.network network virtual appliances","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkvirtualappliances.svg","" "microsoft.network/networkwatchers","Network Watcher","Network Watchers","network watcher","network watchers","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkwatchers.svg","" "microsoft.network/networkwatchers/flowlogs","Flow log","Flow logs","flow log","flow logs","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkwatchers/flowlogs.svg","" -"microsoft.network/p2svpngateways","Microsoft.Network P2S VPN gateway","Microsoft.Network P2S VPN gateways","microsoft.network p2s vpn gateway","microsoft.network p2s vpn gateways","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/p2svpngateways.svg","" +"microsoft.network/p2svpngateways","VPN Gateway (Point to Site)","VPN Gateways","vpn gateway","vpn gateways","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/p2svpngateways.svg","" "microsoft.network/privatednszones","Private DNS zone","Private DNS zones","private dns zone","private dns zones","false","Azure Private DNS provides a reliable, secure DNS service to manage and resolve domain names in a virtual network without the need to add a custom DNS solution. By using private DNS zones, you can use your own custom domain names rather than the Azure-provided names available today. Using custom domain names helps you to tailor your virtual network architecture to best suit your organization's needs. It provides name resolution for virtual machines (VMs) within a virtual network and between virtual networks. Additionally, you can configure zones names with a split-horizon view, which allows a private and a public DNS zone to share the name.","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/privatednszones.svg","[{""title"":""Learn more"",""uri"":""https://docs.microsoft.com/azure/dns/private-dns-overview""}]" "microsoft.network/privateendpoints","Private endpoint","Private endpoints","private endpoint","private endpoints","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/privateendpoints.svg","" "microsoft.network/privatelinkservices","Private link service","Private link services","private link service","private link services","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/privatelinkservices.svg","" @@ -1317,7 +1375,7 @@ "microsoft.network/securitypartnerproviders","Microsoft.Network security partner provider","Microsoft.Network security partner providers","microsoft.network security partner provider","microsoft.network security partner providers","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/securitypartnerproviders.svg","" "microsoft.network/serviceendpointpolicies","Service endpoint policy","Service endpoint policies","service endpoint policy","service endpoint policies","false","Service endpoint policies provide granular access control to specific service resources over the direct connection of service endpoints.","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/serviceendpointpolicies.svg","[{""title"":""Learn more about Service endpoint policy"",""uri"":""https://aka.ms/sepolicydoc""}]" "microsoft.network/trafficmanagergeographichierarchies","Microsoft.Network traffic manager geographic hierarchy","Microsoft.Network traffic manager geographic hierarchies","microsoft.network traffic manager geographic hierarchy","microsoft.network traffic manager geographic hierarchies","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/trafficmanagergeographichierarchies.svg","" -"microsoft.network/trafficmanagerprofiles","Traffic Manager profile","Traffic Manager profiles","traffic manager profile","traffic manager profiles","false","Azure Traffic Manager is a DNS-based traffic load balancer. This service allows you to distribute traffic to your public facing applications across the global Azure regions. Traffic Manager also provides your public endpoints with high availability and quick responsiveness.","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/trafficmanagerprofiles.svg","[{""title"":""Learn more"",""uri"":""https://azure.microsoft.com/products/traffic-manager/""}]" +"microsoft.network/trafficmanagerprofiles","Traffic Manager profile","Traffic Manager profiles","traffic manager profile","traffic manager profiles","false","Azure Traffic Manager is a DNS-based traffic load balancer. This service allows you to distribute traffic to your public facing applications across the global Azure regions. Traffic Manager also provides your public endpoints with high availability and quick responsiveness.","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/trafficmanagerprofiles.svg","[{""title"":""Learn more"",""uri"":""https://go.microsoft.com/fwlink/p/?linkid=847681""}]" "microsoft.network/trafficmanagerusermetricskeys","Microsoft.Network traffic manager user metrics key","Microsoft.Network traffic manager user metrics keys","microsoft.network traffic manager user metrics key","microsoft.network traffic manager user metrics keys","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/trafficmanagerusermetricskeys.svg","" "microsoft.network/virtualhubs","Microsoft.Network/virtualHub","Microsoft.Network/virtualHubs","microsoft.network/virtualHub","microsoft.network/virtualHubs","false","Create a Route Server to get started.","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/virtualhubs.svg","" "microsoft.network/virtualnetworkgateways","Virtual network gateway","Virtual network gateways","virtual network gateway","virtual network gateways","false","Azure VPN Gateway connects your on-premises networks to Azure through Site-to-Site VPNs in a similar way that you set up and connect to a remote branch office. The connectivity is secure and uses the industry-standard protocols Internet Protocol Security (IPsec) and Internet Key Exchange (IKE).","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/virtualnetworkgateways.svg","[{""title"":""Learn more about Virtual network gateway"",""uri"":""https://azure.microsoft.com/services/vpn-gateway/""}]" @@ -1326,7 +1384,7 @@ "microsoft.network/virtualrouters","Microsoft.Network virtual router","Microsoft.Network virtual routers","microsoft.network virtual router","microsoft.network virtual routers","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/virtualrouters.svg","" "microsoft.network/virtualrouters/peerings","Microsoft.Network virtual routers peering","Microsoft.Network virtual routers peerings","microsoft.network virtual routers peering","microsoft.network virtual routers peerings","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/virtualrouters/peerings.svg","" "microsoft.network/virtualwans","Virtual WAN","Virtual WANs","virtual WAN","virtual WANs","false","Create a virtual WAN to get started. Next, create sites in your virtual WAN and connect them to virtual hubs in your preferred Azure regions. Within your virtual WAN, you can also connect hubs to your existing virtual networks.","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/virtualwans.svg","" -"microsoft.network/vpngateways","VPN Gateway","VPN Gateways","vpn gateway","vpn gateways","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/vpngateways.svg","" +"microsoft.network/vpngateways","VPN Gateway (Site to Site)","VPN Gateways","vpn gateway","vpn gateways","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/vpngateways.svg","" "microsoft.network/vpngateways/vpnconnections","Microsoft.Network VPN gateways VPN connection","Microsoft.Network VPN gateways VPN connections","microsoft.network vpn gateways vpn connection","microsoft.network vpn gateways vpn connections","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/vpngateways/vpnconnections.svg","" "microsoft.network/vpngateways/vpnconnections/vpnlinkconnections","Microsoft.Network VPN gateways VPN connections VPN link connection","Microsoft.Network VPN gateways VPN connections VPN link connections","microsoft.network vpn gateways vpn connections vpn link connection","microsoft.network vpn gateways vpn connections vpn link connections","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/vpngateways/vpnconnections/vpnlinkconnections.svg","" "microsoft.network/vpnserverconfigurations","Microsoft.Network VPN server configuration","Microsoft.Network VPN server configurations","microsoft.network vpn server configuration","microsoft.network vpn server configurations","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.network/vpnserverconfigurations.svg","" @@ -1353,6 +1411,7 @@ "microsoft.networkcloud/edgeclusterskus","Microsoft.NetworkCloud edge cluster SKU","Microsoft.NetworkCloud edge cluster skus","microsoft.networkcloud edge cluster sku","microsoft.networkcloud edge cluster skus","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.networkcloud/edgeclusterskus.svg","" "microsoft.networkcloud/kubernetesclusters","Kubernetes Cluster (Operator Nexus)","Kubernetes Clusters (Operator Nexus)","kubernetes cluster (operator nexus)","kubernetes clusters (operator nexus)","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.networkcloud/kubernetesclusters.svg","" "microsoft.networkcloud/kubernetesclusters/agentpools","Agent Pool (Operator Nexus)","Agent Pools (Operator Nexus)","agent pool (operator nexus)","agent pools (operator nexus)","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.networkcloud/kubernetesclusters/agentpools.svg","" +"microsoft.networkcloud/kubernetesclusters/features","Kubernetes Cluster Feature (Operator Nexus)","Kubernetes Cluster Features (Operator Nexus)","kubernetes cluster feature (operator nexus)","kubernetes cluster features (operator nexus)","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.networkcloud/kubernetesclusters/features.svg","" "microsoft.networkcloud/l2networks","Layer 2 Network (Operator Nexus)","Layer 2 Networks (Operator Nexus)","layer 2 network (operator nexus)","layer 2 networks (operator nexus)","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.networkcloud/l2networks.svg","" "microsoft.networkcloud/l3networks","Layer 3 Network (Operator Nexus)","Layer 3 Networks (Operator Nexus)","layer 3 network (operator nexus)","layer 3 networks (operator nexus)","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.networkcloud/l3networks.svg","" "microsoft.networkcloud/racks","Compute Rack (Operator Nexus)","Compute Racks (Operator Nexus)","compute rack (operator nexus)","compute racks (operator nexus)","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.networkcloud/racks.svg","" @@ -1426,6 +1485,7 @@ "microsoft.offazurespringboot/springbootsites/springbootapps","Microsoft.OffAzureSpringBoot springbootsites springbootapp","Microsoft.OffAzureSpringBoot springbootsites springbootapps","microsoft.offazurespringboot springbootsites springbootapp","microsoft.offazurespringboot springbootsites springbootapps","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.offazurespringboot/springbootsites/springbootapps.svg","" "microsoft.offazurespringboot/springbootsites/springbootservers","Microsoft.OffAzureSpringBoot springbootsites springbootserver","Microsoft.OffAzureSpringBoot springbootsites springbootservers","microsoft.offazurespringboot springbootsites springbootserver","microsoft.offazurespringboot springbootsites springbootservers","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.offazurespringboot/springbootsites/springbootservers.svg","" "microsoft.offazurespringboot/springbootsites/summaries","Microsoft.OffAzureSpringBoot springbootsites summary","Microsoft.OffAzureSpringBoot springbootsites summaries","microsoft.offazurespringboot springbootsites summary","microsoft.offazurespringboot springbootsites summaries","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.offazurespringboot/springbootsites/summaries.svg","" +"microsoft.onlineexperimentation/workspaces","Online Experimentation Workspace","Online Experimentation Workspaces","online experimentation workspace","online experimentation workspaces","false","An online experiment workspace resource.","https://microsoft.github.io/finops-toolkit/svg/microsoft.onlineexperimentation/workspaces.svg","[{""title"":""Learn Online Experimentation"",""uri"":""https://aka.ms/exp/public/docs""}]" "microsoft.openenergyplatform/energyservices","Azure Data Manager for Energy","Azure Data Manager for Energy","Azure Data Manager for Energy","Azure Data Manager for Energy","false","Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.openenergyplatform/energyservices.svg","" "microsoft.openlogisticsplatform/workspaces","Microsoft.OpenLogisticsPlatform workspace","Microsoft.OpenLogisticsPlatform workspaces","microsoft.openlogisticsplatform workspace","microsoft.openlogisticsplatform workspaces","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.openlogisticsplatform/workspaces.svg","" "microsoft.openlogisticsplatform/workspaces/applicationregistrations","Microsoft.OpenLogisticsPlatform workspaces application registration","Microsoft.OpenLogisticsPlatform workspaces application registrations","microsoft.openlogisticsplatform workspaces application registration","microsoft.openlogisticsplatform workspaces application registrations","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.openlogisticsplatform/workspaces/applicationregistrations.svg","" @@ -1433,7 +1493,7 @@ "microsoft.openlogisticsplatform/workspaces/eventgridfilters","Microsoft.OpenLogisticsPlatform workspaces event grid filter","Microsoft.OpenLogisticsPlatform workspaces event grid filters","microsoft.openlogisticsplatform workspaces event grid filter","microsoft.openlogisticsplatform workspaces event grid filters","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.openlogisticsplatform/workspaces/eventgridfilters.svg","" "microsoft.openlogisticsplatform/workspaces/shares","Microsoft.OpenLogisticsPlatform workspaces share","Microsoft.OpenLogisticsPlatform workspaces shares","microsoft.openlogisticsplatform workspaces share","microsoft.openlogisticsplatform workspaces shares","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.openlogisticsplatform/workspaces/shares.svg","" "microsoft.openlogisticsplatform/workspaces/sharesubscriptions","Microsoft.OpenLogisticsPlatform workspaces share subscription","Microsoft.OpenLogisticsPlatform workspaces share subscriptions","microsoft.openlogisticsplatform workspaces share subscription","microsoft.openlogisticsplatform workspaces share subscriptions","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.openlogisticsplatform/workspaces/sharesubscriptions.svg","" -"microsoft.operationalinsights/clusters","Log Analytics dedicated cluster","Log Analytics dedicated clusters","log analytics dedicated cluster","log analytics dedicated clusters","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.operationalinsights/clusters.svg","" +"microsoft.operationalinsights/clusters","Log Analytics dedicated cluster","Log Analytics dedicated clusters","log analytics dedicated cluster","log analytics dedicated clusters","false","Dedicated cluster in Azure Monitor enables advanced security and control capabilities including Customer-managed keys, Lockbox, Availability zones, Ingest from Azure Event Hubs, and cost optimization. Linking and unlinking workspaces from cluster has no interruption to ingestion and query operations.","https://microsoft.github.io/finops-toolkit/svg/microsoft.operationalinsights/clusters.svg","[{""title"":""Learn more"",""uri"":""https://aka.ms/LogsDCluster""}]" "microsoft.operationalinsights/querypacks","Log Analytics query pack","Log Analytics query packs","log analytics query pack","log analytics query packs","false","Azure Monitor Log Analytics query packs are used to hold and manage Log Analytics queries.","https://microsoft.github.io/finops-toolkit/svg/microsoft.operationalinsights/querypacks.svg","[{""title"":""Click this link to learn more."",""uri"":""https://go.microsoft.com/fwlink/?linkid=2142312""}]" "microsoft.operationalinsights/workspaces","Log Analytics workspace","Log Analytics workspaces","log analytics workspace","log analytics workspaces","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.operationalinsights/workspaces.svg","" "microsoft.operationsmanagement/managementassociations","Microsoft.OperationsManagement management association","Microsoft.OperationsManagement management associations","microsoft.operationsmanagement management association","microsoft.operationsmanagement management associations","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.operationsmanagement/managementassociations.svg","" @@ -1492,7 +1552,7 @@ "microsoft.programmableconnectivity/gateways","APC Gateway","APC Gateways","apc gateway","apc gateways","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.programmableconnectivity/gateways.svg","" "microsoft.programmableconnectivity/operatorapiconnections","APC Operator API Connection","APC Operator API Connections","apc operator api connection","apc operator api connections","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.programmableconnectivity/operatorapiconnections.svg","" "microsoft.programmableconnectivity/operatorapiplans","APC Operator API Plan","APC Operator API Plans","apc operator api plan","apc operator api plans","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.programmableconnectivity/operatorapiplans.svg","" -"microsoft.proposal/proposals","Microsoft.Proposal proposal","Microsoft.Proposal proposals","microsoft.proposal proposal","microsoft.proposal proposals","false","A ProposalProviderHub resource","https://microsoft.github.io/finops-toolkit/svg/microsoft.proposal/proposals.svg","" +"microsoft.proposal/proposals","Microsoft.Proposal proposal","Microsoft.Proposal proposals","microsoft.proposal proposal","microsoft.proposal proposals","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.proposal/proposals.svg","" "microsoft.providerhub/providerregistrations","Resource Provider as a Service","Resource Providers","resource provider as a service","resource providers","false","Create a fully-integrated Azure service with Resource Provider as a Service","https://microsoft.github.io/finops-toolkit/svg/microsoft.providerhub/providerregistrations.svg","" "microsoft.providerhub/providerregistrations/customrollouts","Rollout","Rollouts","rollout","rollouts","false","Azure resource provider enables you to deliver your service functionality as native Azure resources in the Azure Control Plane. Deliver them to your organization or release globally and monetize as a part of a new Azure service​.","https://microsoft.github.io/finops-toolkit/svg/microsoft.providerhub/providerregistrations/customrollouts.svg","" "microsoft.providerhub/providerregistrations/defaultrollouts","Rollout","Rollouts","rollout","rollouts","false","Azure resource provider enables you to deliver your service functionality as native Azure resources in the Azure Control Plane. Deliver them to your organization or release globally and monetize as a part of a new Azure service​.","https://microsoft.github.io/finops-toolkit/svg/microsoft.providerhub/providerregistrations/defaultrollouts.svg","" @@ -1558,6 +1618,7 @@ "microsoft.saas/applications","Software as a Service (classic)","Software as a Service (classic)","Software as a Service (classic)","Software as a Service (classic)","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.saas/applications.svg","" "microsoft.saas/resources","SaaS","SaaS","SaaS","SaaS","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.saas/resources.svg","" "microsoft.saas/saasresources","SaaS (classic)","SaaS (classic)","SaaS (classic)","SaaS (classic)","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.saas/saasresources.svg","" +"microsoft.saashub/cloudservices","Microsoft.SaaSHub cloud service","Microsoft.SaaSHub cloud services","microsoft.saashub cloud service","microsoft.saashub cloud services","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.saashub/cloudservices.svg","" "microsoft.saashub/cloudservices/hidden","Microsoft SaaS","Microsoft SaaS","Microsoft SaaS","Microsoft SaaS","true","Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.saashub/cloudservices/hidden.svg","" "microsoft.salescopilot/conversationintelligencerecordingaccounts","Microsoft.SalesCopilot conversation intelligence recording account","Microsoft.SalesCopilot conversation intelligence recording accounts","microsoft.salescopilot conversation intelligence recording account","microsoft.salescopilot conversation intelligence recording accounts","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.salescopilot/conversationintelligencerecordingaccounts.svg","" "microsoft.scheduler/jobcollections","Scheduler job collection","Scheduler job collections","microsoft.scheduler job collection","microsoft.scheduler job collections","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.scheduler/jobcollections.svg","" @@ -1573,6 +1634,7 @@ "microsoft.scvmm/virtualnetworks","Microsoft.ScVmm virtual network","Microsoft.ScVmm virtual networks","microsoft.scvmm virtual network","microsoft.scvmm virtual networks","false","The VirtualNetworks resource definition.","https://microsoft.github.io/finops-toolkit/svg/microsoft.scvmm/virtualnetworks.svg","" "microsoft.scvmm/vmmservers","SCVMM management server","SCVMM management servers","SCVMM management server","SCVMM management servers","false","Connect your existing SCVMM management server to Azure so you can provision and manage VMs on it through Azure Arc.","https://microsoft.github.io/finops-toolkit/svg/microsoft.scvmm/vmmservers.svg","" "microsoft.search/searchservices","Search service","Search services","search service","search services","false","Information retrieval at scale for generative AI (RAG) and classic search over user-owned content.","https://microsoft.github.io/finops-toolkit/svg/microsoft.search/searchservices.svg","" +"microsoft.secretmanagementsampleprovider/forecasts","Microsoft.SecretManagementSampleProvider forecast","Microsoft.SecretManagementSampleProvider forecasts","microsoft.secretmanagementsampleprovider forecast","microsoft.secretmanagementsampleprovider forecasts","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.secretmanagementsampleprovider/forecasts.svg","" "microsoft.secretsynccontroller/azurekeyvaultsecretproviderclasses","Microsoft.SecretSyncController Azure key vault secret provider class","Microsoft.SecretSyncController Azure key vault secret provider classes","microsoft.secretsynccontroller azure key vault secret provider class","microsoft.secretsynccontroller azure key vault secret provider classes","false","The AzureKeyVaultSecretProviderClass resource.","https://microsoft.github.io/finops-toolkit/svg/microsoft.secretsynccontroller/azurekeyvaultsecretproviderclasses.svg","" "microsoft.secretsynccontroller/secretsyncs","Microsoft.SecretSyncController secret sync","Microsoft.SecretSyncController secret syncs","microsoft.secretsynccontroller secret sync","microsoft.secretsynccontroller secret syncs","false","The SecretSync resource.","https://microsoft.github.io/finops-toolkit/svg/microsoft.secretsynccontroller/secretsyncs.svg","" "microsoft.security/adaptivenetworkhardenings","Microsoft.Security adaptive network hardening","Microsoft.Security adaptive network hardenings","microsoft.security adaptive network hardening","microsoft.security adaptive network hardenings","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.security/adaptivenetworkhardenings.svg","" @@ -1685,6 +1747,7 @@ "microsoft.storageactions/storagetasks","Storage task - Azure Storage Actions","Storage tasks - Azure Storage Actions","storage task - azure storage actions","storage tasks - azure storage actions","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.storageactions/storagetasks.svg","[{""title"":""Learn more"",""uri"":""https://www.bing.com""}]" "microsoft.storagecache/amlfilesystems","Azure Managed Lustre","Azure Managed Lustre","azure managed lustre","azure managed lustre","false","File caching for high-performance computing (HPC). Run flexible, file-based workloads in Azure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.storagecache/amlfilesystems.svg","" "microsoft.storagecache/caches","HPC cache","HPC caches","hpc cache","hpc caches","false","File caching for high-performance computing (HPC). Run flexible, file-based workloads in Azure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.storagecache/caches.svg","" +"microsoft.storagediscovery/storagediscoveryworkspaces","Storage Discovery workspace","Storage Discovery workspaces","storage discovery workspace","storage discovery workspaces","false","Storage Discovery placeholder description","https://microsoft.github.io/finops-toolkit/svg/microsoft.storagediscovery/storagediscoveryworkspaces.svg","[{""title"":""Learn more"",""uri"":""https://microsoft.com""}]" "microsoft.storageinsights/storagecollectionrules","Microsoft.StorageInsights storage collection rule","Microsoft.StorageInsights storage collection rules","microsoft.storageinsights storage collection rule","microsoft.storageinsights storage collection rules","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.storageinsights/storagecollectionrules.svg","" "microsoft.storagemover/storagemovers","Storage mover","Storage movers","storage mover","storage movers","false","Azure Storage Mover is a migration service for your on-premises file shares to Azure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.storagemover/storagemovers.svg","[{""title"":""Learn more about storage mover"",""uri"":""https://go.microsoft.com/fwlink/?LinkId=2236486""}]" "microsoft.storagepool/diskpools","Microsoft.StoragePool disk pool","Microsoft.StoragePool disk pools","microsoft.storagepool disk pool","microsoft.storagepool disk pools","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.storagepool/diskpools.svg","" @@ -1728,7 +1791,7 @@ "microsoft.support/services","Microsoft.Support service","Microsoft.Support services","microsoft.support service","microsoft.support services","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.support/services.svg","" "microsoft.support/services/problemclassifications","Microsoft.Support services problem classification","Microsoft.Support services problem classifications","microsoft.support services problem classification","microsoft.support services problem classifications","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.support/services/problemclassifications.svg","" "microsoft.support/supporttickets","Support Request","Manage support requests","support request","support requests","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.support/supporttickets.svg","" -"microsoft.sustainabilityservices/calculations","Microsoft.SustainabilityServices calculation","Microsoft.SustainabilityServices calculations","microsoft.sustainabilityservices calculation","microsoft.sustainabilityservices calculations","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.sustainabilityservices/calculations.svg","" +"microsoft.sustainabilityservices/calculations","Project Sustainability Calculator","Project Sustainability Calculator","Project Sustainability Calculator","Project Sustainability Calculator","true","Start assessing your organization’s environmental emissions footprint across scope 1, scope 2, and scope 3 by creating a Project Sustainability Calculator resource.","https://microsoft.github.io/finops-toolkit/svg/microsoft.sustainabilityservices/calculations.svg","" "microsoft.symphony/instances","Microsoft.Symphony instance","Microsoft.Symphony instances","microsoft.symphony instance","microsoft.symphony instances","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.symphony/instances.svg","" "microsoft.symphony/solutions","Microsoft.Symphony solution","Microsoft.Symphony solutions","microsoft.symphony solution","microsoft.symphony solutions","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.symphony/solutions.svg","" "microsoft.symphony/targets","Microsoft.Symphony target","Microsoft.Symphony targets","microsoft.symphony target","microsoft.symphony targets","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.symphony/targets.svg","" @@ -1751,6 +1814,7 @@ "microsoft.toolchainorchestrator/campaigns/versions","Microsoft.ToolchainOrchestrator campaigns version","Microsoft.ToolchainOrchestrator campaigns versions","microsoft.toolchainorchestrator campaigns version","microsoft.toolchainorchestrator campaigns versions","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/campaigns/versions.svg","" "microsoft.toolchainorchestrator/catalogs","Microsoft.ToolchainOrchestrator catalog","Microsoft.ToolchainOrchestrator catalogs","microsoft.toolchainorchestrator catalog","microsoft.toolchainorchestrator catalogs","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/catalogs.svg","" "microsoft.toolchainorchestrator/catalogs/versions","Microsoft.ToolchainOrchestrator catalogs version","Microsoft.ToolchainOrchestrator catalogs versions","microsoft.toolchainorchestrator catalogs version","microsoft.toolchainorchestrator catalogs versions","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/catalogs/versions.svg","" +"microsoft.toolchainorchestrator/diagnostics","Microsoft.ToolchainOrchestrator diagnostic","Microsoft.ToolchainOrchestrator diagnostics","microsoft.toolchainorchestrator diagnostic","microsoft.toolchainorchestrator diagnostics","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/diagnostics.svg","" "microsoft.toolchainorchestrator/instances","Microsoft.ToolchainOrchestrator instance","Microsoft.ToolchainOrchestrator instances","microsoft.toolchainorchestrator instance","microsoft.toolchainorchestrator instances","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/instances.svg","" "microsoft.toolchainorchestrator/instances/versions","Microsoft.ToolchainOrchestrator instances version","Microsoft.ToolchainOrchestrator instances versions","microsoft.toolchainorchestrator instances version","microsoft.toolchainorchestrator instances versions","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/instances/versions.svg","" "microsoft.toolchainorchestrator/solutions","Microsoft.ToolchainOrchestrator solution","Microsoft.ToolchainOrchestrator solutions","microsoft.toolchainorchestrator solution","microsoft.toolchainorchestrator solutions","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/solutions.svg","" @@ -1809,13 +1873,17 @@ "microsoft.windowspushnotificationservices/registrations","Windows Push Notification Service","Windows Push Notification Services","windows push notification service","windows push notification services","false","Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.windowspushnotificationservices/registrations.svg","" "microsoft.workloadmonitor/monitors","Microsoft.WorkloadMonitor monitor","Microsoft.WorkloadMonitor monitors","microsoft.workloadmonitor monitor","microsoft.workloadmonitor monitors","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.workloadmonitor/monitors.svg","" "microsoft.workloadmonitor/monitors/history","Microsoft.WorkloadMonitor monitors history","Microsoft.WorkloadMonitor monitors history","microsoft.workloadmonitor monitors history","microsoft.workloadmonitor monitors history","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.workloadmonitor/monitors/history.svg","" -"microsoft.workloads/configurationvalidationresults","Microsoft.Workloads configuration validation result","Microsoft.Workloads configuration validation results","microsoft.workloads configuration validation result","microsoft.workloads configuration validation results","false","Configuration validation results.","https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/configurationvalidationresults.svg","" +"microsoft.workloads/configurationvalidationresults","Microsoft.Workloads configuration validation result","Microsoft.Workloads configuration validation results","microsoft.workloads configuration validation result","microsoft.workloads configuration validation results","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/configurationvalidationresults.svg","" "microsoft.workloads/connectors","Microsoft.Workloads connector","Microsoft.Workloads connectors","microsoft.workloads connector","microsoft.workloads connectors","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/connectors.svg","" "microsoft.workloads/connectors/acssbackups","Microsoft.Workloads connectors acss backup","Microsoft.Workloads connectors acss backups","microsoft.workloads connectors acss backup","microsoft.workloads connectors acss backups","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/connectors/acssbackups.svg","" "microsoft.workloads/connectors/amsinsights","Microsoft.Workloads connectors ams insight","Microsoft.Workloads connectors ams insights","microsoft.workloads connectors ams insight","microsoft.workloads connectors ams insights","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/connectors/amsinsights.svg","" "microsoft.workloads/connectors/sapvirtualinstancemonitors","Microsoft.Workloads connectors sap virtual instance monitor","Microsoft.Workloads connectors sap virtual instance monitors","microsoft.workloads connectors sap virtual instance monitor","microsoft.workloads connectors sap virtual instance monitors","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/connectors/sapvirtualinstancemonitors.svg","" "microsoft.workloads/epicvirtualinstances","Virtual Instance for Epic solution","Virtual Instance for Epic solutions","virtual instance for epic solution","virtual instance for epic solutions","false","Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/epicvirtualinstances.svg","" "microsoft.workloads/insights","Microsoft.Workloads insight","Microsoft.Workloads insights","microsoft.workloads insight","microsoft.workloads insights","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/insights.svg","" +"microsoft.workloads/instancegroupmonitors","Microsoft.Workloads instance group monitor","Microsoft.Workloads instance group monitors","microsoft.workloads instance group monitor","microsoft.workloads instance group monitors","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/instancegroupmonitors.svg","" +"microsoft.workloads/instancehealthdefinitions","Microsoft.Workloads instance health definition","Microsoft.Workloads instance health definitions","microsoft.workloads instance health definition","microsoft.workloads instance health definitions","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/instancehealthdefinitions.svg","" +"microsoft.workloads/instancehealthdefinitions/signaldefinitions","Microsoft.Workloads instance health definitions signal definition","Microsoft.Workloads instance health definitions signal definitions","microsoft.workloads instance health definitions signal definition","microsoft.workloads instance health definitions signal definitions","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/instancehealthdefinitions/signaldefinitions.svg","" +"microsoft.workloads/instancemonitors","Microsoft.Workloads instance monitor","Microsoft.Workloads instance monitors","microsoft.workloads instance monitor","microsoft.workloads instance monitors","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/instancemonitors.svg","" "microsoft.workloads/monitors","Azure Monitor for SAP solutions","Azure Monitors for SAP solutions","azure monitor for SAP solutions","azure monitors for SAP solutions","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/monitors.svg","[{""title"":""Learn more about architecture"",""uri"":""https://go.microsoft.com/fwlink/?linkid=2205007""}]" "microsoft.workloads/oraclevirtualinstances","Microsoft.Workloads oracle virtual instance","Microsoft.Workloads oracle virtual instances","microsoft.workloads oracle virtual instance","microsoft.workloads oracle virtual instances","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/oraclevirtualinstances.svg","" "microsoft.workloads/oraclevirtualinstances/databaseinstances","Microsoft.Workloads oracle virtual instances database instance","Microsoft.Workloads oracle virtual instances database instances","microsoft.workloads oracle virtual instances database instance","microsoft.workloads oracle virtual instances database instances","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/oraclevirtualinstances/databaseinstances.svg","" @@ -1828,16 +1896,18 @@ "microsoft.workloads/sapvirtualinstances/applicationinstances","App server instance for SAP solutions","App server instances for SAP solutions","App server instance for SAP solutions","App server instances for SAP solutions","false","App server instance is part of a Virtual Instance for SAP solutions. Try changing or clearing your filters. You can also Create a Virtual instance for SAP solutions that runs on Azure to take advantage of the best that Azure has to offer.","https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/sapvirtualinstances/applicationinstances.svg","" "microsoft.workloads/sapvirtualinstances/centralinstances","Central service instance for SAP solutions","Central service instances for SAP solutions","Central service instance for SAP solutions","Central service instances for SAP solutions","false","Central service instance is part of a Virtual Instance for SAP solutions. Try changing or clearing your filters. You can also Create a Virtual instance for SAP solutions that runs on Azure to take advantage of the best that Azure has to offer.","https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/sapvirtualinstances/centralinstances.svg","" "microsoft.workloads/sapvirtualinstances/databaseinstances","Database for SAP solutions","Databases for SAP solutions","Database for SAP solutions","Databases for SAP solutions","false","Database is part of a Virtual Instance for SAP solutions. Try changing or clearing your filters. You can also Create a Virtual instance for SAP solutions that runs on Azure to take advantage of the best that Azure has to offer.","https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/sapvirtualinstances/databaseinstances.svg","" -"microsoft.workloads/virtualinstances","Microsoft.Workloads virtual instance","Microsoft.Workloads virtual instances","microsoft.workloads virtual instance","microsoft.workloads virtual instances","false","Defines the Virtual Instance (VI) resource.","https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/virtualinstances.svg","" -"microsoft.workloads/virtualinstances/components","Microsoft.Workloads virtual instances component","Microsoft.Workloads virtual instances components","microsoft.workloads virtual instances component","microsoft.workloads virtual instances components","false","Defines the Workload Component resource.","https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/virtualinstances/components.svg","" -"microsoft.zerotrustsegmentation/segmentationmanagers","Microsoft.ZeroTrustSegmentation segmentation manager","Microsoft.ZeroTrustSegmentation segmentation managers","microsoft.zerotrustsegmentation segmentation manager","microsoft.zerotrustsegmentation segmentation managers","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.zerotrustsegmentation/segmentationmanagers.svg","" -"mongodb.atlas/organizations","MongoDB Atlas - An Azure Native ISV Service","MongoDB Atlas - An Azure Native ISV Service","MongoDB Atlas - An Azure Native ISV Service","MongoDB Atlas - An Azure Native ISV Service","false","Concrete tracked resource types can be created by aliasing this type using a specific property type.","https://microsoft.github.io/finops-toolkit/svg/mongodb.atlas/organizations.svg","" +"microsoft.workloads/virtualinstances","Microsoft.Workloads virtual instance","Microsoft.Workloads virtual instances","microsoft.workloads virtual instance","microsoft.workloads virtual instances","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/virtualinstances.svg","" +"microsoft.workloads/virtualinstances/components","Microsoft.Workloads virtual instances component","Microsoft.Workloads virtual instances components","microsoft.workloads virtual instances component","microsoft.workloads virtual instances components","false","","https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/virtualinstances/components.svg","" +"microsoft.zerotrustsegmentation/segmentationmanagers","Segmentation Manager","Segmentation Managers","segmentation manager","segmentation managers","false","Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.","https://microsoft.github.io/finops-toolkit/svg/microsoft.zerotrustsegmentation/segmentationmanagers.svg","" +"mongodb.atlas/organizations","MongoDB Atlas Organization","MongoDB Atlas","MongoDB Atlas Organization","MongoDB Atlas Organization","false","MongoDB Atlas as an Azure Native ISV Service integrates the fully-managed document database, including native vector search capabilities, directly into the Azure ecosystem. Build and scale modern AI applications with a streamlined setup of an Atlas Organization, unified billing management, and seamless access to Azure services.","https://microsoft.github.io/finops-toolkit/svg/mongodb.atlas/organizations.svg","[{""title"":""Learn more about MongoDB Atlas"",""uri"":""https://www.mongodb.com/lp/cloud/atlas/try4-reg""}]" "neon.postgres/organizations","Neon Serverless Postgres Organization","Neon Serverless Postgres","Neon Serverless Postgres Organization","Neon Serverless Postgres Organizations","false","Neon is a cloud-native Postgres solution designed for modern applications. It offers a serverless, fully managed, and scalable Postgres database with advanced features like automatic scaling, high availability, and robust security. ","https://microsoft.github.io/finops-toolkit/svg/neon.postgres/organizations.svg","[{""title"":""Learn more"",""uri"":""https://aka.ms/ANI/NeonServerlessPostgres/Docs""}]" "newrelic.observability/monitors","New Relic","Azure Native New Relic Service","a New Relic resource","New Relic resources","false","Create a New Relic resource using Azure Marketplace.","https://microsoft.github.io/finops-toolkit/svg/newrelic.observability/monitors.svg","[{""title"":""Get started with New Relic"",""uri"":""https://portal.azure.com/#view/Microsoft_Azure_Marketplace/GalleryItemDetailsBladeNopdl/id/newrelicinc1635200720692.newrelic_liftr_payg""}]" "nginx.nginxplus/nginxdeployments","NGINXaaS","NGINXaaS","NGINXaaS","NGINXaaS","false","Fully managed NGINX service on Azure provides the capabilities of a load balancer and reverse proxy to deliver your content at scale, secure!","https://microsoft.github.io/finops-toolkit/svg/nginx.nginxplus/nginxdeployments.svg","[{""title"":""Learn more about NGINXaaS"",""uri"":""https://docs.nginx.com/nginxaas/azure/""}]" "oracle.database/autonomousdatabases","Autonomous Database","Autonomous Databases","autonomous database","autonomous databases","false","","https://microsoft.github.io/finops-toolkit/svg/oracle.database/autonomousdatabases.svg","" "oracle.database/cloudexadatainfrastructures","Oracle Exadata Infrastructure","Oracle Exadata Infrastructures","cloud exadata infrastructure","cloud exadata infrastructures","false","","https://microsoft.github.io/finops-toolkit/svg/oracle.database/cloudexadatainfrastructures.svg","" "oracle.database/cloudvmclusters","Oracle Exadata VM Cluster","Oracle Exadata VM Clusters","Oracle Exadata VM Cluster","Oracle Exadata VM Clusters","false","","https://microsoft.github.io/finops-toolkit/svg/oracle.database/cloudvmclusters.svg","" +"oracle.database/exadbvmclusters","Oracle Exascale VM Cluster","Oracle Exascale VM Clusters","Oracle Exascale VM Cluster","Oracle Exascale VM Clusters","false","","https://microsoft.github.io/finops-toolkit/svg/oracle.database/exadbvmclusters.svg","" +"oracle.database/exascaledbstoragevaults","Oracle Exascale DB Storage Vault","Oracle Exascale VM Clusters","Oracle Exascale DB Storage Vault","Oracle Exascale VM Clusters","false","","https://microsoft.github.io/finops-toolkit/svg/oracle.database/exascaledbstoragevaults.svg","" "oracle.database/oraclesubscriptions","OracleSubscription","OracleSubscriptions","OracleSubscription","OracleSubscriptions","false","","https://microsoft.github.io/finops-toolkit/svg/oracle.database/oraclesubscriptions.svg","" "paloaltonetworks.cloudngfw/firewalls","Cloud NGFW by Palo Alto Networks","Cloud NGFWs by Palo Alto Networks","Cloud NGFW by Palo Alto Networks","Cloud NGFWs by Palo Alto Networks","false","","https://microsoft.github.io/finops-toolkit/svg/paloaltonetworks.cloudngfw/firewalls.svg","" "paloaltonetworks.cloudngfw/globalrulestacks","Global Rulestack","Global Rulestacks","global rulestack","global rulestacks","false","","https://microsoft.github.io/finops-toolkit/svg/paloaltonetworks.cloudngfw/globalrulestacks.svg","" diff --git a/src/open-data/ResourceTypes.json b/src/open-data/ResourceTypes.json index e409e4f6b..d4c050402 100644 --- a/src/open-data/ResourceTypes.json +++ b/src/open-data/ResourceTypes.json @@ -57,7 +57,7 @@ "lowerSingularDisplayName": "commvault cloud account", "lowerPluralDisplayName": "commvault cloud accounts", "isPreview": false, - "description": "A Commvault Cloud Account Resource", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/commvault.contentstore/cloudaccounts.svg", "links": null }, @@ -70,7 +70,8 @@ "isPreview": false, "description": "A Commvault Plan Resource", "icon": "https://microsoft.github.io/finops-toolkit/svg/commvault.contentstore/cloudaccounts/plans.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "commvault.contentstore/cloudaccounts/protectiongroups", @@ -81,7 +82,8 @@ "isPreview": false, "description": "A Commvault Plan Resource", "icon": "https://microsoft.github.io/finops-toolkit/svg/commvault.contentstore/cloudaccounts/protectiongroups.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "commvault.contentstore/cloudaccounts/protectiongroups/protecteditems", @@ -92,7 +94,8 @@ "isPreview": false, "description": "Concrete proxy resource types can be created by aliasing this type using a specific property type.", "icon": "https://microsoft.github.io/finops-toolkit/svg/commvault.contentstore/cloudaccounts/protectiongroups/protecteditems.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "commvault.contentstore/cloudaccounts/storages", @@ -103,7 +106,8 @@ "isPreview": false, "description": "A Commvault Storage Resource", "icon": "https://microsoft.github.io/finops-toolkit/svg/commvault.contentstore/cloudaccounts/storages.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "dell.storage/filesystems", @@ -166,7 +170,7 @@ "lowerSingularDisplayName": "Azure Native LambdaTest Cloud Service", "lowerPluralDisplayName": "Azure Native LambdaTest Cloud Service", "isPreview": false, - "description": "Concrete tracked resource types can be created by aliasing this type using a specific property type.", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/lambdatest.hyperexecute/organizations.svg", "links": null }, @@ -179,7 +183,12 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.aad/domainservices.svg", - "links": null + "links": [ + { + "title": "Learn more", + "uri": "https://learn.microsoft.com/entra/identity/domain-services/overview" + } + ] }, { "resourceType": "microsoft.aadiam/diagnosticsettings", @@ -215,6 +224,17 @@ "links": null, "missingMetadata": true }, + { + "resourceType": "microsoft.advisor/assessments", + "singularDisplayName": "Microsoft.Advisor assessment", + "pluralDisplayName": "Microsoft.Advisor assessments", + "lowerSingularDisplayName": "microsoft.advisor assessment", + "lowerPluralDisplayName": "microsoft.advisor assessments", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.advisor/assessments.svg", + "links": null + }, { "resourceType": "microsoft.advisor/configurations", "singularDisplayName": "Microsoft.Advisor configuration", @@ -272,6 +292,17 @@ "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.advisor/recommendations/suppressions.svg", "links": null }, + { + "resourceType": "microsoft.advisor/resiliencyreviews", + "singularDisplayName": "Microsoft.Advisor resiliency review", + "pluralDisplayName": "Microsoft.Advisor resiliency reviews", + "lowerSingularDisplayName": "microsoft.advisor resiliency review", + "lowerPluralDisplayName": "microsoft.advisor resiliency reviews", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.advisor/resiliencyreviews.svg", + "links": null + }, { "resourceType": "microsoft.agfoodplatform/farmbeats", "singularDisplayName": "Azure Data Manager for Agriculture", @@ -307,10 +338,10 @@ }, { "resourceType": "microsoft.agricultureplatform/agriservices", - "singularDisplayName": "Azure Data Manager for Agriculture", - "pluralDisplayName": "Azure Data Manager for Agriculture", - "lowerSingularDisplayName": "Azure Data Manager for Agriculture", - "lowerPluralDisplayName": "Azure Data Manager for Agriculture", + "singularDisplayName": "Agriculture data solutions", + "pluralDisplayName": "Agriculture data solutions", + "lowerSingularDisplayName": "Agriculture data solutions", + "lowerPluralDisplayName": "Agriculture data solutions", "isPreview": false, "description": "Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.agricultureplatform/agriservices.svg", @@ -799,7 +830,7 @@ "lowerSingularDisplayName": "microsoft.appcomplianceautomation report", "lowerPluralDisplayName": "microsoft.appcomplianceautomation reports", "isPreview": false, - "description": "A class represent an AppComplianceAutomation report resource.", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports.svg", "links": null }, @@ -810,7 +841,7 @@ "lowerSingularDisplayName": "microsoft.appcomplianceautomation reports evidence", "lowerPluralDisplayName": "microsoft.appcomplianceautomation reports evidences", "isPreview": false, - "description": "A class represent an AppComplianceAutomation evidence resource.", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports/evidences.svg", "links": null }, @@ -821,7 +852,7 @@ "lowerSingularDisplayName": "microsoft.appcomplianceautomation reports scoping configuration", "lowerPluralDisplayName": "microsoft.appcomplianceautomation reports scoping configurations", "isPreview": false, - "description": "A class represent an AppComplianceAutomation scoping configuration resource.", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports/scopingconfigurations.svg", "links": null }, @@ -832,10 +863,21 @@ "lowerSingularDisplayName": "microsoft.appcomplianceautomation reports snapshot", "lowerPluralDisplayName": "microsoft.appcomplianceautomation reports snapshots", "isPreview": false, - "description": "A class represent a AppComplianceAutomation snapshot resource.", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports/snapshots.svg", "links": null }, + { + "resourceType": "microsoft.appcomplianceautomation/reports/snapshots/controls", + "singularDisplayName": "Microsoft.AppComplianceAutomation reports snapshots control", + "pluralDisplayName": "Microsoft.AppComplianceAutomation reports snapshots controls", + "lowerSingularDisplayName": "microsoft.appcomplianceautomation reports snapshots control", + "lowerPluralDisplayName": "microsoft.appcomplianceautomation reports snapshots controls", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports/snapshots/controls.svg", + "links": null + }, { "resourceType": "microsoft.appcomplianceautomation/reports/webhooks", "singularDisplayName": "Microsoft.AppComplianceAutomation reports webhook", @@ -843,7 +885,7 @@ "lowerSingularDisplayName": "microsoft.appcomplianceautomation reports webhook", "lowerPluralDisplayName": "microsoft.appcomplianceautomation reports webhooks", "isPreview": false, - "description": "A class represent an AppComplianceAutomation webhook resource.", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports/webhooks.svg", "links": null }, @@ -883,6 +925,17 @@ } ] }, + { + "resourceType": "microsoft.appsecurity/appprotectmanagedrulesetmanifests", + "singularDisplayName": "Microsoft.AppSecurity app protect managed rule set manifest", + "pluralDisplayName": "Microsoft.AppSecurity app protect managed rule set manifests", + "lowerSingularDisplayName": "microsoft.appsecurity app protect managed rule set manifest", + "lowerPluralDisplayName": "microsoft.appsecurity app protect managed rule set manifests", + "isPreview": false, + "description": "The managed rule set manifest resource definition.", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.appsecurity/appprotectmanagedrulesetmanifests.svg", + "links": null + }, { "resourceType": "microsoft.appsecurity/policies", "singularDisplayName": "App Protect Policy", @@ -2945,6 +2998,17 @@ } ] }, + { + "resourceType": "microsoft.azurearcdata/mysqlserver", + "singularDisplayName": "MySql Server - Azure Arc", + "pluralDisplayName": "MySql Server - Azure Arc", + "lowerSingularDisplayName": "MySql Server - Azure Arc", + "lowerPluralDisplayName": "MySql Server - Azure Arc", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.azurearcdata/mysqlserver.svg", + "links": null + }, { "resourceType": "microsoft.azurearcdata/postgresinstances", "singularDisplayName": "PostgreSQL server – Azure Arc", @@ -2961,6 +3025,17 @@ } ] }, + { + "resourceType": "microsoft.azurearcdata/postgressqlserver", + "singularDisplayName": "PostgresSql Server - Azure Arc", + "pluralDisplayName": "PostgresSql Server - Azure Arc", + "lowerSingularDisplayName": "PostgresSql Server - Azure Arc", + "lowerPluralDisplayName": "PostgresSql Server - Azure Arc", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.azurearcdata/postgressqlserver.svg", + "links": null + }, { "resourceType": "microsoft.azurearcdata/sqlmanagedinstances", "singularDisplayName": "SQL managed instance - Azure Arc", @@ -3072,7 +3147,7 @@ "lowerSingularDisplayName": "microsoft.azurecis address record", "lowerPluralDisplayName": "microsoft.azurecis address records", "isPreview": false, - "description": "AddressRecord Resource", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/addressrecords.svg", "links": null }, @@ -3083,7 +3158,7 @@ "lowerSingularDisplayName": "microsoft.azurecis autopilot environment", "lowerPluralDisplayName": "microsoft.azurecis autopilot environments", "isPreview": false, - "description": "Environment Resource", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/autopilotenvironments.svg", "links": null }, @@ -3094,7 +3169,7 @@ "lowerSingularDisplayName": "microsoft.azurecis autopilot machine function", "lowerPluralDisplayName": "microsoft.azurecis autopilot machine functions", "isPreview": false, - "description": "AutopilotMachineFunction Resource", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/autopilotmachinefunctions.svg", "links": null }, @@ -3105,7 +3180,7 @@ "lowerSingularDisplayName": "microsoft.azurecis auto pilot software load balance virtual ip", "lowerPluralDisplayName": "microsoft.azurecis auto pilot software load balance virtual ips", "isPreview": false, - "description": "Autopilot software load balance VIP Resource", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/autopilotsoftwareloadbalancevirtualips.svg", "links": null }, @@ -3116,7 +3191,7 @@ "lowerSingularDisplayName": "microsoft.azurecis canonical name record", "lowerPluralDisplayName": "microsoft.azurecis canonical name records", "isPreview": false, - "description": "CanonicalNameRecord Resource", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/canonicalnamerecords.svg", "links": null }, @@ -3127,7 +3202,7 @@ "lowerSingularDisplayName": "microsoft.azurecis ds msallowlist", "lowerPluralDisplayName": "microsoft.azurecis ds msallowlists", "isPreview": false, - "description": "dsmsAllowlist Resource", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dsmsallowlists.svg", "links": null }, @@ -3138,7 +3213,7 @@ "lowerSingularDisplayName": "microsoft.azurecis dsms certificate", "lowerPluralDisplayName": "microsoft.azurecis dsms certificates", "isPreview": false, - "description": "dsmsCertificate Resource", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dsmscertificates.svg", "links": null }, @@ -3149,7 +3224,7 @@ "lowerSingularDisplayName": "microsoft.azurecis dsms root folder", "lowerPluralDisplayName": "microsoft.azurecis dsms root folders", "isPreview": false, - "description": "dsmsRootFolder Resource", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dsmsrootfolders.svg", "links": null }, @@ -3160,7 +3235,7 @@ "lowerSingularDisplayName": "microsoft.azurecis dsts application", "lowerPluralDisplayName": "microsoft.azurecis dsts applications", "isPreview": false, - "description": "dstsApplication Resource", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dstsapplications.svg", "links": null }, @@ -3171,7 +3246,7 @@ "lowerSingularDisplayName": "microsoft.azurecis dsts service account", "lowerPluralDisplayName": "microsoft.azurecis dsts service accounts", "isPreview": false, - "description": "dstsServiceAccount Resource.", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dstsserviceaccounts.svg", "links": null }, @@ -3182,7 +3257,7 @@ "lowerSingularDisplayName": "microsoft.azurecis dsts service client identity", "lowerPluralDisplayName": "microsoft.azurecis dsts service client identities", "isPreview": false, - "description": "dstsServiceClientIdentityResource Resource", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dstsserviceclientidentities.svg", "links": null }, @@ -3193,7 +3268,7 @@ "lowerSingularDisplayName": "microsoft.azurecis generic geneva action", "lowerPluralDisplayName": "microsoft.azurecis generic geneva actions", "isPreview": false, - "description": "genericGenevaActions Resource", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/genericgenevaactions.svg", "links": null }, @@ -3216,7 +3291,7 @@ "lowerSingularDisplayName": "microsoft.azurecis pointer record", "lowerPluralDisplayName": "microsoft.azurecis pointer records", "isPreview": false, - "description": "Pointer record resource", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/pointerrecords.svg", "links": null }, @@ -3239,7 +3314,7 @@ "lowerSingularDisplayName": "microsoft.azurecis push agent v2 account", "lowerPluralDisplayName": "microsoft.azurecis push agent v2 accounts", "isPreview": false, - "description": "PushAgentV2Account Resource", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/pushagentv2accounts.svg", "links": null }, @@ -3250,10 +3325,21 @@ "lowerSingularDisplayName": "microsoft.azurecis service record", "lowerPluralDisplayName": "microsoft.azurecis service records", "isPreview": false, - "description": "ServiceRecord Resource", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/servicerecords.svg", "links": null }, + { + "resourceType": "microsoft.azurecis/sharedconfigvalues", + "singularDisplayName": "Microsoft.AzureCis shared config value", + "pluralDisplayName": "Microsoft.AzureCis shared config values", + "lowerSingularDisplayName": "microsoft.azurecis shared config value", + "lowerPluralDisplayName": "microsoft.azurecis shared config values", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/sharedconfigvalues.svg", + "links": null + }, { "resourceType": "microsoft.azuredatatransfer/connections", "singularDisplayName": "Connection", @@ -3655,6 +3741,17 @@ } ] }, + { + "resourceType": "microsoft.azurestackhci/devicepools", + "singularDisplayName": "Microsoft.AzureStackHCI device pool", + "pluralDisplayName": "Microsoft.AzureStackHCI device pools", + "lowerSingularDisplayName": "microsoft.azurestackhci device pool", + "lowerPluralDisplayName": "microsoft.azurestackhci device pools", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestackhci/devicepools.svg", + "links": null + }, { "resourceType": "microsoft.azurestackhci/edgedevices", "singularDisplayName": "Microsoft.AzureStackHCI edge device", @@ -3678,6 +3775,28 @@ "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestackhci/edgedevices/jobs.svg", "links": null }, + { + "resourceType": "microsoft.azurestackhci/edgemachines", + "singularDisplayName": "Microsoft.AzureStackHCI edge machine", + "pluralDisplayName": "Microsoft.AzureStackHCI edge machines", + "lowerSingularDisplayName": "microsoft.azurestackhci edge machine", + "lowerPluralDisplayName": "microsoft.azurestackhci edge machines", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestackhci/edgemachines.svg", + "links": null + }, + { + "resourceType": "microsoft.azurestackhci/edgemachines/jobs", + "singularDisplayName": "Microsoft.AzureStackHCI edge machines job", + "pluralDisplayName": "Microsoft.AzureStackHCI edge machines jobs", + "lowerSingularDisplayName": "microsoft.azurestackhci edge machines job", + "lowerPluralDisplayName": "microsoft.azurestackhci edge machines jobs", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestackhci/edgemachines/jobs.svg", + "links": null + }, { "resourceType": "microsoft.azurestackhci/edgenodepools", "singularDisplayName": "Azure Stack", @@ -3944,7 +4063,7 @@ "lowerSingularDisplayName": "microsoft.baremetal peering setting", "lowerPluralDisplayName": "microsoft.baremetal peering settings", "isPreview": false, - "description": "Model representing a Peering Setting object.", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.baremetal/peeringsettings.svg", "links": null }, @@ -4509,6 +4628,17 @@ "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.billing/billingaccounts/lineofcredit.svg", "links": null }, + { + "resourceType": "microsoft.billing/billingaccounts/migrations", + "singularDisplayName": "Microsoft.Billing billing accounts migration", + "pluralDisplayName": "Microsoft.Billing billing accounts migrations", + "lowerSingularDisplayName": "microsoft.billing billing accounts migration", + "lowerPluralDisplayName": "microsoft.billing billing accounts migrations", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.billing/billingaccounts/migrations.svg", + "links": null + }, { "resourceType": "microsoft.billing/billingaccounts/paymentmethods", "singularDisplayName": "Microsoft.Billing billing accounts payment method", @@ -5052,12 +5182,7 @@ "isPreview": false, "description": "Azure Edge Actions is security and performance focused service, that enables customers to run short-lived and simple business logic code at the edge of Microsoft network, closer to users, apps and devices with the least possible latencies in a industry leading secure environment.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.cdn/edgeactions.svg", - "links": [ - { - "title": "Learn more", - "uri": "https://aka.ms/portalfx/designpatterns" - } - ] + "links": null }, { "resourceType": "microsoft.cdn/profiles", @@ -5227,7 +5352,8 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.certify/testsuites.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.certify/validationjobs", @@ -5238,7 +5364,8 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.certify/validationjobs.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.changeanalysis/profile", @@ -5293,7 +5420,8 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.changesafety/validations.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.changesafety/validators", @@ -5304,7 +5432,8 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.changesafety/validators.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.changesafety/validators/versions", @@ -5315,7 +5444,8 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.changesafety/validators/versions.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.chaos/experiments", @@ -5488,6 +5618,39 @@ "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.cleanroom/cleanrooms.svg", "links": null }, + { + "resourceType": "microsoft.cleanroom/collaborations", + "singularDisplayName": "Microsoft.CleanRoom collaboration", + "pluralDisplayName": "Microsoft.CleanRoom collaborations", + "lowerSingularDisplayName": "microsoft.cleanroom collaboration", + "lowerPluralDisplayName": "microsoft.cleanroom collaborations", + "isPreview": false, + "description": "Defines the collaboration.", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.cleanroom/collaborations.svg", + "links": null + }, + { + "resourceType": "microsoft.cleanroom/collaborations/contracts", + "singularDisplayName": "Microsoft.CleanRoom collaborations contract", + "pluralDisplayName": "Microsoft.CleanRoom collaborations contracts", + "lowerSingularDisplayName": "microsoft.cleanroom collaborations contract", + "lowerPluralDisplayName": "microsoft.cleanroom collaborations contracts", + "isPreview": false, + "description": "Defines the contract.", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.cleanroom/collaborations/contracts.svg", + "links": null + }, + { + "resourceType": "microsoft.cleanroom/consortiums", + "singularDisplayName": "Microsoft.CleanRoom consortium", + "pluralDisplayName": "Microsoft.CleanRoom consortiums", + "lowerSingularDisplayName": "microsoft.cleanroom consortium", + "lowerPluralDisplayName": "microsoft.cleanroom consortiums", + "isPreview": false, + "description": "Defines the consortium.", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.cleanroom/consortiums.svg", + "links": null + }, { "resourceType": "microsoft.cleanroom/microservices", "singularDisplayName": "Microsoft.CleanRoom microservice", @@ -5530,16 +5693,7 @@ "isPreview": false, "description": "A health model augments metric and logs with critical business context of a workload, enabling the automated evaluation of quantified health states.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.cloudhealth/healthmodels.svg", - "links": [ - { - "title": "Build health models", - "uri": "https://aka.ms/portalfx/designpatterns" - }, - { - "title": "Learn more", - "uri": "https://aka.ms/portalfx/browse" - } - ] + "links": null }, { "resourceType": "microsoft.cloudtest/accounts", @@ -6187,7 +6341,7 @@ "lowerSingularDisplayName": "guest assignment", "lowerPluralDisplayName": "guest assignments", "isPreview": false, - "description": "Guest Assignment", + "description": "A guest assignment links a virtual machine to a specific configuration defined by Azure Policy. Use guest assignments to enforce compliance and security policies on your virtual machines, such as ensuring that only certain users have administrative privileges, or that certain software is installed and updated. A guest assignment can also perform actions on your virtual machines, such as installing or removing software, or changing settings.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.compute/virtualmachines/providers/guestconfigurationassignments.svg", "links": null }, @@ -6265,12 +6419,7 @@ "isPreview": false, "description": "Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/advisorcost.svg", - "links": [ - { - "title": "Get consistent", - "uri": "https://aka.ms/portalfx/designpatterns" - } - ] + "links": null }, { "resourceType": "microsoft.computehub/advisoroperationalexcellence", @@ -6281,12 +6430,7 @@ "isPreview": false, "description": "Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/advisoroperationalexcellence.svg", - "links": [ - { - "title": "Get consistent", - "uri": "https://aka.ms/portalfx/designpatterns" - } - ] + "links": null }, { "resourceType": "microsoft.computehub/advisorperformance", @@ -6297,12 +6441,7 @@ "isPreview": false, "description": "Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/advisorperformance.svg", - "links": [ - { - "title": "Get consistent", - "uri": "https://aka.ms/portalfx/designpatterns" - } - ] + "links": null }, { "resourceType": "microsoft.computehub/advisorreliability", @@ -6313,12 +6452,7 @@ "isPreview": false, "description": "Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/advisorreliability.svg", - "links": [ - { - "title": "Get consistent", - "uri": "https://aka.ms/portalfx/designpatterns" - } - ] + "links": null }, { "resourceType": "microsoft.computehub/advisorsecurity", @@ -6329,12 +6463,7 @@ "isPreview": false, "description": "Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/advisorsecurity.svg", - "links": [ - { - "title": "Get consistent", - "uri": "https://aka.ms/portalfx/designpatterns" - } - ] + "links": null }, { "resourceType": "microsoft.computehub/all", @@ -6345,12 +6474,7 @@ "isPreview": false, "description": "Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/all.svg", - "links": [ - { - "title": "Get consistent", - "uri": "https://aka.ms/portalfx/designpatterns" - } - ] + "links": null }, { "resourceType": "microsoft.computehub/backup", @@ -6361,12 +6485,7 @@ "isPreview": false, "description": "Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/backup.svg", - "links": [ - { - "title": "Get consistent", - "uri": "https://aka.ms/portalfx/designpatterns" - } - ] + "links": null }, { "resourceType": "microsoft.computehub/computehubmain", @@ -6399,12 +6518,7 @@ "isPreview": false, "description": "Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/linuxostype.svg", - "links": [ - { - "title": "Get consistent", - "uri": "https://aka.ms/portalfx/designpatterns" - } - ] + "links": null }, { "resourceType": "microsoft.computehub/microsoftdefenderfreetrialsubscription", @@ -6415,12 +6529,7 @@ "isPreview": false, "description": "Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/microsoftdefenderfreetrialsubscription.svg", - "links": [ - { - "title": "Get consistent", - "uri": "https://aka.ms/portalfx/designpatterns" - } - ] + "links": null }, { "resourceType": "microsoft.computehub/microsoftdefenderstandardsubscription", @@ -6431,12 +6540,7 @@ "isPreview": false, "description": "Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/microsoftdefenderstandardsubscription.svg", - "links": [ - { - "title": "Get consistent", - "uri": "https://aka.ms/portalfx/designpatterns" - } - ] + "links": null }, { "resourceType": "microsoft.computehub/outages", @@ -6447,12 +6551,7 @@ "isPreview": false, "description": "Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/outages.svg", - "links": [ - { - "title": "Get consistent", - "uri": "https://aka.ms/portalfx/designpatterns" - } - ] + "links": null }, { "resourceType": "microsoft.computehub/powerstatedeallocated", @@ -6463,12 +6562,7 @@ "isPreview": false, "description": "Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/powerstatedeallocated.svg", - "links": [ - { - "title": "Get consistent", - "uri": "https://aka.ms/portalfx/designpatterns" - } - ] + "links": null }, { "resourceType": "microsoft.computehub/powerstaterunning", @@ -6479,12 +6573,7 @@ "isPreview": false, "description": "Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/powerstaterunning.svg", - "links": [ - { - "title": "Get consistent", - "uri": "https://aka.ms/portalfx/designpatterns" - } - ] + "links": null }, { "resourceType": "microsoft.computehub/powerstatestopped", @@ -6495,12 +6584,7 @@ "isPreview": false, "description": "Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/powerstatestopped.svg", - "links": [ - { - "title": "Get consistent", - "uri": "https://aka.ms/portalfx/designpatterns" - } - ] + "links": null }, { "resourceType": "microsoft.computehub/provisioningstatefailedresources", @@ -6511,12 +6595,7 @@ "isPreview": false, "description": "Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/provisioningstatefailedresources.svg", - "links": [ - { - "title": "Get consistent", - "uri": "https://aka.ms/portalfx/designpatterns" - } - ] + "links": null }, { "resourceType": "microsoft.computehub/provisioningstatesucceededresources", @@ -6527,12 +6606,7 @@ "isPreview": false, "description": "Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/provisioningstatesucceededresources.svg", - "links": [ - { - "title": "Get consistent", - "uri": "https://aka.ms/portalfx/designpatterns" - } - ] + "links": null }, { "resourceType": "microsoft.computehub/windowsostype", @@ -6543,23 +6617,23 @@ "isPreview": false, "description": "Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions—all easily managed in one place.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/windowsostype.svg", - "links": [ - { - "title": "Get consistent", - "uri": "https://aka.ms/portalfx/designpatterns" - } - ] + "links": null }, { "resourceType": "microsoft.computeschedule/autoactions", - "singularDisplayName": "Microsoft.ComputeSchedule auto action", - "pluralDisplayName": "Microsoft.ComputeSchedule auto actions", - "lowerSingularDisplayName": "microsoft.computeschedule auto action", - "lowerPluralDisplayName": "microsoft.computeschedule auto actions", + "singularDisplayName": "Automatic Action", + "pluralDisplayName": "Automatic Actions", + "lowerSingularDisplayName": "automatic action", + "lowerPluralDisplayName": "automatic actions", "isPreview": false, - "description": "The auto action resource", + "description": "Automatic actions allow you to schedule a Start, Stop, or Hibernate on your virtual machines.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.computeschedule/autoactions.svg", - "links": null + "links": [ + { + "title": "Learn more", + "uri": "https://go.microsoft.com/fwlink/?linkid=2275442" + } + ] }, { "resourceType": "microsoft.computeschedule/autoactions/occurrences", @@ -6627,37 +6701,33 @@ }, { "resourceType": "microsoft.connectedcache/cachenodes", - "singularDisplayName": "Connected Cache for ISP (early preview)", - "pluralDisplayName": "Connected Cache for ISPs (early preview)", - "lowerSingularDisplayName": "Connected Cache for ISP (early preview)", - "lowerPluralDisplayName": "Microsoft Connected Cache for Internet Service Providers (early preview)", - "isPreview": true, - "description": "Software-only caching solution that delivers Microsoft static content within operator networks for ISP early preview customers.", + "singularDisplayName": "Connected Cache for ISP", + "pluralDisplayName": "Connected Cache for ISPs", + "lowerSingularDisplayName": "Connected Cache for ISP", + "lowerPluralDisplayName": "Microsoft Connected Cache for Internet Service Providers", + "description": "Software-only caching solution that delivers Microsoft static content within operator networks.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.connectedcache/cachenodes.svg", "links": [ { "title": "Learn more", "uri": "https://learn.microsoft.com/windows/deployment/do/waas-microsoft-connected-cache" } - ], - "missingMetadata": true + ] }, { "resourceType": "microsoft.connectedcache/enterprisecustomers", - "singularDisplayName": "Connected Cache for Enterprise & Education (early preview)", - "pluralDisplayName": "Connected Caches for Enterprise & Education (early preview)", - "lowerSingularDisplayName": "Connected Cache for Enterprise & Education (early preview)", - "lowerPluralDisplayName": "Microsoft Connected Cache Enterprise (early preview)", - "isPreview": true, - "description": "Software-only caching solution that delivers Microsoft static content within operator networks for Enterprise early preview customers.", + "singularDisplayName": "Connected Cache for Enterprise & Education", + "pluralDisplayName": "Connected Caches for Enterprise & Education", + "lowerSingularDisplayName": "Connected Cache for Enterprise & Education", + "lowerPluralDisplayName": "Microsoft Connected Cache Enterprise", + "description": "Software-only caching solution that delivers Microsoft static content within operator networks.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.connectedcache/enterprisecustomers.svg", "links": [ { "title": "Learn more", "uri": "https://learn.microsoft.com/windows/deployment/do/waas-microsoft-connected-cache" } - ], - "missingMetadata": true + ] }, { "resourceType": "microsoft.connectedcache/enterprisemcccustomers", @@ -7339,6 +7409,22 @@ "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.customproviders/resourceproviders.svg", "links": null }, + { + "resourceType": "microsoft.dashboard/dashboards", + "singularDisplayName": "Azure Monitor Dashboard", + "pluralDisplayName": "Azure Monitor Dashboard", + "lowerSingularDisplayName": "Azure Monitor Dashboard", + "lowerPluralDisplayName": "Azure Monitor Dashboard", + "isPreview": false, + "description": "Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.dashboard/dashboards.svg", + "links": [ + { + "title": "Learn more", + "uri": "https://learn.microsoft.com/azure/managed-grafana/" + } + ] + }, { "resourceType": "microsoft.dashboard/grafana", "singularDisplayName": "Azure Managed Grafana", @@ -7385,8 +7471,8 @@ }, { "resourceType": "microsoft.databasefleetmanager/fleets/fleetspaces/databases", - "singularDisplayName": "Fleet Managed Database", - "pluralDisplayName": "Fleet Managed Databases", + "singularDisplayName": "Fleet managed database", + "pluralDisplayName": "Fleet managed databases", "lowerSingularDisplayName": "fleet managed database", "lowerPluralDisplayName": "fleet managed databases", "isPreview": false, @@ -7414,16 +7500,7 @@ "isPreview": false, "description": "Database watcher is a managed monitoring solution for database services in the Azure SQL family. Create a watcher to monitor your Azure SQL estate in depth and with low latency.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.databasewatcher/watchers.svg", - "links": [ - { - "title": "Overview", - "uri": "https://aka.ms/portalfx/designpatterns" - }, - { - "title": "Get started", - "uri": "https://aka.ms/portalfx/browse" - } - ] + "links": null }, { "resourceType": "microsoft.databox/jobs", @@ -7511,8 +7588,7 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.datadog/agreements.svg", - "links": null, - "missingMetadata": true + "links": null }, { "resourceType": "microsoft.datadog/monitors", @@ -7539,8 +7615,7 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.datadog/subscriptionstatuses.svg", - "links": null, - "missingMetadata": true + "links": null }, { "resourceType": "microsoft.datafactory/datafactories", @@ -7806,6 +7881,39 @@ "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.datareplication/replicationvaults/operations.svg", "links": null }, + { + "resourceType": "microsoft.datareplication/replicationvaults/privateendpointconnectionproxies", + "singularDisplayName": "Microsoft.DataReplication replication vaults private endpoint connection proxy", + "pluralDisplayName": "Microsoft.DataReplication replication vaults private endpoint connection proxies", + "lowerSingularDisplayName": "microsoft.datareplication replication vaults private endpoint connection proxy", + "lowerPluralDisplayName": "microsoft.datareplication replication vaults private endpoint connection proxies", + "isPreview": false, + "description": "Represents private endpoint connection proxy request.", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.datareplication/replicationvaults/privateendpointconnectionproxies.svg", + "links": null + }, + { + "resourceType": "microsoft.datareplication/replicationvaults/privateendpointconnections", + "singularDisplayName": "Microsoft.DataReplication replication vaults private endpoint connection", + "pluralDisplayName": "Microsoft.DataReplication replication vaults private endpoint connections", + "lowerSingularDisplayName": "microsoft.datareplication replication vaults private endpoint connection", + "lowerPluralDisplayName": "microsoft.datareplication replication vaults private endpoint connections", + "isPreview": false, + "description": "Represents private endpoint connection.", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.datareplication/replicationvaults/privateendpointconnections.svg", + "links": null + }, + { + "resourceType": "microsoft.datareplication/replicationvaults/privatelinkresources", + "singularDisplayName": "Microsoft.DataReplication replication vaults private link resource", + "pluralDisplayName": "Microsoft.DataReplication replication vaults private link resources", + "lowerSingularDisplayName": "microsoft.datareplication replication vaults private link resource", + "lowerPluralDisplayName": "microsoft.datareplication replication vaults private link resources", + "isPreview": false, + "description": "Represents private link resource.", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.datareplication/replicationvaults/privatelinkresources.svg", + "links": null + }, { "resourceType": "microsoft.datareplication/replicationvaults/protecteditems", "singularDisplayName": "Microsoft.DataReplication replication vaults protected item", @@ -7934,10 +8042,10 @@ }, { "resourceType": "microsoft.dbforpostgresql/flexibleservers", - "singularDisplayName": "Azure Database for PostgreSQL - Flexible Server", - "pluralDisplayName": "Azure Database for PostgreSQL - Flexible Servers", - "lowerSingularDisplayName": "Azure Database for PostgreSQL - Flexible Server", - "lowerPluralDisplayName": "Azure Database for PostgreSQL - Flexible Servers", + "singularDisplayName": "Azure Database for PostgreSQL flexible server", + "pluralDisplayName": "Azure Database for PostgreSQL flexible servers", + "lowerSingularDisplayName": "Azure Database for PostgreSQL flexible server", + "lowerPluralDisplayName": "Azure Database for PostgreSQL flexible servers", "isPreview": false, "description": "Azure Database for PostgreSQL flexible server is a fully managed Azure Database service based on the PostgreSQL open source relational database, optimized for performance, security and cost efficiency.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.dbforpostgresql/flexibleservers.svg", @@ -8349,6 +8457,28 @@ } ] }, + { + "resourceType": "microsoft.devhub/templates", + "singularDisplayName": "Microsoft.DevHub template", + "pluralDisplayName": "Microsoft.DevHub templates", + "lowerSingularDisplayName": "microsoft.devhub template", + "lowerPluralDisplayName": "microsoft.devhub templates", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.devhub/templates.svg", + "links": null + }, + { + "resourceType": "microsoft.devhub/templates/versions", + "singularDisplayName": "Microsoft.DevHub templates version", + "pluralDisplayName": "Microsoft.DevHub templates versions", + "lowerSingularDisplayName": "microsoft.devhub templates version", + "lowerPluralDisplayName": "microsoft.devhub templates versions", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.devhub/templates/versions.svg", + "links": null + }, { "resourceType": "microsoft.devhub/workflows", "singularDisplayName": "Microsoft.DevHub workflow", @@ -8438,7 +8568,7 @@ "lowerSingularDisplayName": "microsoft.deviceregistry billing container", "lowerPluralDisplayName": "microsoft.deviceregistry billing containers", "isPreview": false, - "description": "billingContainer Model as Azure resource whose sole purpose is to keep track of billables resources under a subscription.", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/billingcontainers.svg", "links": null }, @@ -8460,7 +8590,7 @@ "lowerSingularDisplayName": "microsoft.deviceregistry discovered asset endpoint profile", "lowerPluralDisplayName": "microsoft.deviceregistry discovered asset endpoint profiles", "isPreview": false, - "description": "Discovered Asset Endpoint Profile definition.", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/discoveredassetendpointprofiles.svg", "links": null }, @@ -8471,10 +8601,76 @@ "lowerSingularDisplayName": "microsoft.deviceregistry discovered asset", "lowerPluralDisplayName": "microsoft.deviceregistry discovered assets", "isPreview": false, - "description": "Discovered Asset definition.", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/discoveredassets.svg", "links": null }, + { + "resourceType": "microsoft.deviceregistry/namespaces", + "singularDisplayName": "Microsoft.DeviceRegistry namespace", + "pluralDisplayName": "Microsoft.DeviceRegistry namespaces", + "lowerSingularDisplayName": "microsoft.deviceregistry namespace", + "lowerPluralDisplayName": "microsoft.deviceregistry namespaces", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/namespaces.svg", + "links": null + }, + { + "resourceType": "microsoft.deviceregistry/namespaces/assetendpointprofiles", + "singularDisplayName": "Microsoft.DeviceRegistry namespaces asset endpoint profile", + "pluralDisplayName": "Microsoft.DeviceRegistry namespaces asset endpoint profiles", + "lowerSingularDisplayName": "microsoft.deviceregistry namespaces asset endpoint profile", + "lowerPluralDisplayName": "microsoft.deviceregistry namespaces asset endpoint profiles", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/namespaces/assetendpointprofiles.svg", + "links": null + }, + { + "resourceType": "microsoft.deviceregistry/namespaces/assets", + "singularDisplayName": "Microsoft.DeviceRegistry namespaces asset", + "pluralDisplayName": "Microsoft.DeviceRegistry namespaces assets", + "lowerSingularDisplayName": "microsoft.deviceregistry namespaces asset", + "lowerPluralDisplayName": "microsoft.deviceregistry namespaces assets", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/namespaces/assets.svg", + "links": null + }, + { + "resourceType": "microsoft.deviceregistry/namespaces/devices", + "singularDisplayName": "Microsoft.DeviceRegistry namespaces device", + "pluralDisplayName": "Microsoft.DeviceRegistry namespaces devices", + "lowerSingularDisplayName": "microsoft.deviceregistry namespaces device", + "lowerPluralDisplayName": "microsoft.deviceregistry namespaces devices", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/namespaces/devices.svg", + "links": null + }, + { + "resourceType": "microsoft.deviceregistry/namespaces/discoveredassetendpointprofiles", + "singularDisplayName": "Microsoft.DeviceRegistry namespaces discovered asset endpoint profile", + "pluralDisplayName": "Microsoft.DeviceRegistry namespaces discovered asset endpoint profiles", + "lowerSingularDisplayName": "microsoft.deviceregistry namespaces discovered asset endpoint profile", + "lowerPluralDisplayName": "microsoft.deviceregistry namespaces discovered asset endpoint profiles", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/namespaces/discoveredassetendpointprofiles.svg", + "links": null + }, + { + "resourceType": "microsoft.deviceregistry/namespaces/discoveredassets", + "singularDisplayName": "Microsoft.DeviceRegistry namespaces discovered asset", + "pluralDisplayName": "Microsoft.DeviceRegistry namespaces discovered assets", + "lowerSingularDisplayName": "microsoft.deviceregistry namespaces discovered asset", + "lowerPluralDisplayName": "microsoft.deviceregistry namespaces discovered assets", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/namespaces/discoveredassets.svg", + "links": null + }, { "resourceType": "microsoft.deviceregistry/schemaregistries", "singularDisplayName": "IoT Schema Registry", @@ -8495,7 +8691,8 @@ "isPreview": false, "description": "Schema definition.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/schemaregistries/schemas.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.deviceregistry/schemaregistries/schemas/schemaversions", @@ -8506,7 +8703,8 @@ "isPreview": false, "description": "Schema version's definition.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/schemaregistries/schemas/schemaversions.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.devices/iothubs", @@ -8577,12 +8775,7 @@ "isPreview": false, "description": "Device Update Accounts allow you to manage the deployment of updates to your IoT Devices.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts.svg", - "links": [ - { - "title": "Learn more", - "uri": "https://aka.ms/portalfx/designpatterns" - } - ] + "links": null }, { "resourceType": "microsoft.deviceupdate/updateaccounts/activedeployments", @@ -8593,12 +8786,7 @@ "isPreview": false, "description": "Device Update Active Deployments monitor deployment of updates to your devices.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts/activedeployments.svg", - "links": [ - { - "title": "Learn more", - "uri": "https://aka.ms/portalfx/designpatterns" - } - ] + "links": null }, { "resourceType": "microsoft.deviceupdate/updateaccounts/agents", @@ -8609,12 +8797,7 @@ "isPreview": false, "description": "Device Update Agents manage deployment of updates to your devices.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts/agents.svg", - "links": [ - { - "title": "Learn more", - "uri": "https://aka.ms/portalfx/designpatterns" - } - ] + "links": null }, { "resourceType": "microsoft.deviceupdate/updateaccounts/deployments", @@ -8625,12 +8808,7 @@ "isPreview": false, "description": "Device Update Deployments record deployment of updates to your devices.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts/deployments.svg", - "links": [ - { - "title": "Learn more", - "uri": "https://aka.ms/portalfx/designpatterns" - } - ] + "links": null }, { "resourceType": "microsoft.deviceupdate/updateaccounts/deviceclasses", @@ -8641,12 +8819,7 @@ "isPreview": false, "description": "Device Update Device Classes identify the best possible update for your devices based on their properties.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts/deviceclasses.svg", - "links": [ - { - "title": "Learn more", - "uri": "https://aka.ms/portalfx/designpatterns" - } - ] + "links": null }, { "resourceType": "microsoft.deviceupdate/updateaccounts/updates", @@ -8657,12 +8830,7 @@ "isPreview": false, "description": "Device Updates represent updates to be deployed to your devices.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts/updates.svg", - "links": [ - { - "title": "Learn more", - "uri": "https://aka.ms/portalfx/designpatterns" - } - ] + "links": null }, { "resourceType": "microsoft.devops/pipelines", @@ -8801,6 +8969,22 @@ } ] }, + { + "resourceType": "microsoft.documentdb/fleets", + "singularDisplayName": "Cosmos DB Fleet", + "pluralDisplayName": "Cosmos DB Fleets", + "lowerSingularDisplayName": "Cosmos DB Fleet", + "lowerPluralDisplayName": "Cosmos DB Fleets", + "isPreview": false, + "description": "Cosmos DB Fleet description goes here", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.documentdb/fleets.svg", + "links": [ + { + "title": "Cosmos DB Fleet learn more link", + "uri": "https://aka.ms/cosmosfleet" + } + ] + }, { "resourceType": "microsoft.documentdb/mongoclusters", "singularDisplayName": "Azure Cosmos DB for MongoDB (vCore)", @@ -8858,15 +9042,14 @@ }, { "resourceType": "microsoft.durabletask/namespaces", - "singularDisplayName": "Durable Task Scheduler", - "pluralDisplayName": "Durable Task Schedulers", - "lowerSingularDisplayName": "durable task managed backend", - "lowerPluralDisplayName": "durable task managed backends", + "singularDisplayName": "Microsoft.DurableTask namespace", + "pluralDisplayName": "Microsoft.DurableTask namespaces", + "lowerSingularDisplayName": "microsoft.durabletask namespace", + "lowerPluralDisplayName": "microsoft.durabletask namespaces", "isPreview": false, - "description": "A Durable Task Scheduler namespace resource", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.durabletask/namespaces.svg", - "links": null, - "missingMetadata": true + "links": null }, { "resourceType": "microsoft.durabletask/namespaces/taskhubs", @@ -8887,7 +9070,7 @@ "lowerSingularDisplayName": "durable task managed backend", "lowerPluralDisplayName": "durable task managed backends", "isPreview": false, - "description": "A Durable Task Scheduler resource", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.durabletask/schedulers.svg", "links": null }, @@ -8898,7 +9081,7 @@ "lowerSingularDisplayName": "task hub", "lowerPluralDisplayName": "task hubs", "isPreview": false, - "description": "A Task Hub resource belonging to the scheduler", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.durabletask/schedulers/taskhubs.svg", "links": null }, @@ -9029,6 +9212,22 @@ "links": null, "missingMetadata": true }, + { + "resourceType": "microsoft.edge/disconnectedoperations", + "singularDisplayName": "Azure Local - disconnected operations", + "pluralDisplayName": "Azure Local - disconnected operations", + "lowerSingularDisplayName": "Azure Local - disconnected operations", + "lowerPluralDisplayName": "Azure Local - disconnected operations", + "isPreview": false, + "description": "Create a virtual appliance to run Azure Local disconnected operations", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.edge/disconnectedoperations.svg", + "links": [ + { + "title": "Learn more", + "uri": "https://azure.com/hci" + } + ] + }, { "resourceType": "microsoft.edge/siteawareresourcetypes", "singularDisplayName": "Microsoft.Edge site aware resource type", @@ -9109,17 +9308,17 @@ }, { "resourceType": "microsoft.edgeorder/bootstrapconfigurations", - "singularDisplayName": "Site Bootstrap Key", - "pluralDisplayName": "Site Bootstrap Keys", - "lowerSingularDisplayName": "site bootstrap key", + "singularDisplayName": "Site Key", + "pluralDisplayName": "Site Keys", + "lowerSingularDisplayName": "site key", "lowerPluralDisplayName": "keys", "isPreview": false, - "description": "You can generate a Site Bootstrap key to start provisioning your devices at your Site.", + "description": "You can generate a Site key to start provisioning your devices at your Site.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.edgeorder/bootstrapconfigurations.svg", "links": [ { - "title": "Learn More", - "uri": "https://aka.ms/adaptivecloud/ztp/lm-sitebootstrapkey" + "title": "Learn more", + "uri": "https://aka.ms/ztp/guide/gs-learn-more" } ] }, @@ -9152,7 +9351,12 @@ "isPreview": false, "description": "Follow the secure, low-touch step by step procedure to set up one or thousands of devices.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.edgeorder/virtual_orderitems.svg", - "links": null + "links": [ + { + "title": "Learn more", + "uri": "https://aka.ms/ztp/guide/gs-learn-more" + } + ] }, { "resourceType": "microsoft.edgezones/extendedzones", @@ -9955,7 +10159,8 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.footprintmonitoring/profiles.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.footprintmonitoring/profiles/experiments", @@ -9966,7 +10171,8 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.footprintmonitoring/profiles/experiments.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.footprintmonitoring/profiles/measurementendpoints", @@ -9977,7 +10183,8 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.footprintmonitoring/profiles/measurementendpoints.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.footprintmonitoring/profiles/measurementendpoints/conditions", @@ -9988,7 +10195,8 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.footprintmonitoring/profiles/measurementendpoints/conditions.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.gallery/myareas/galleryitems", @@ -10024,6 +10232,17 @@ "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.graph/azureadapplication.svg", "links": null }, + { + "resourceType": "microsoft.graph/azureadapplicationprototype", + "singularDisplayName": "Microsoft.Graph Azure ad application prototype", + "pluralDisplayName": "Microsoft.Graph Azure ad application prototype", + "lowerSingularDisplayName": "microsoft.graph azure ad application prototype", + "lowerPluralDisplayName": "microsoft.graph azure ad application prototype", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.graph/azureadapplicationprototype.svg", + "links": null + }, { "resourceType": "microsoft.graphservices/accounts", "singularDisplayName": "Metered API account", @@ -10108,7 +10327,7 @@ "pluralDisplayName": "Azure HDInsight on AKS cluster pools", "lowerSingularDisplayName": "Azure HDInsight on AKS cluster pool", "lowerPluralDisplayName": "Azure HDInsight on AKS cluster pools", - "isPreview": true, + "isPreview": false, "description": "Create an Azure HDInsight on AKS cluster pool to organize your HDInsight on AKS clusters. You can have multiple clusters in the same cluster pool.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.hdinsight/clusterpools.svg", "links": [ @@ -10124,7 +10343,7 @@ "pluralDisplayName": "Azure HDInsight on AKS clusters", "lowerSingularDisplayName": "Azure HDInsight on AKS cluster", "lowerPluralDisplayName": "Azure HDInsight on AKS clusters", - "isPreview": true, + "isPreview": false, "description": "Create an Azure HDInsight on AKS cluster to process massive amounts of data using modern and latest open-source frameworks such as Apache Flink, Trino, Apache Spark, and more.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.hdinsight/clusterpools/clusters.svg", "links": [ @@ -10134,6 +10353,17 @@ } ] }, + { + "resourceType": "microsoft.hdinsight/clusterpools/clusters/instanceviews", + "singularDisplayName": "Microsoft.HDInsight clusterpools clusters instance view", + "pluralDisplayName": "Microsoft.HDInsight clusterpools clusters instance views", + "lowerSingularDisplayName": "microsoft.hdinsight clusterpools clusters instance view", + "lowerPluralDisplayName": "microsoft.hdinsight clusterpools clusters instance views", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.hdinsight/clusterpools/clusters/instanceviews.svg", + "links": null + }, { "resourceType": "microsoft.hdinsight/clusters", "singularDisplayName": "HDInsight cluster", @@ -10236,16 +10466,18 @@ "isPreview": true, "description": "A health model augments metric and logs with critical business context of a workload, enabling the automated evaluation of quantified health states.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.healthmodel/healthmodels.svg", - "links": [ - { - "title": "Build health models", - "uri": "https://aka.ms/portalfx/designpatterns" - }, - { - "title": "Learn more", - "uri": "https://aka.ms/portalfx/browse" - } - ] + "links": null + }, + { + "resourceType": "microsoft.healthplatform/accounts", + "singularDisplayName": "Microsoft.HealthPlatform account", + "pluralDisplayName": "Microsoft.HealthPlatform accounts", + "lowerSingularDisplayName": "microsoft.healthplatform account", + "lowerPluralDisplayName": "microsoft.healthplatform accounts", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.healthplatform/accounts.svg", + "links": null }, { "resourceType": "microsoft.help/diagnostics", @@ -10934,7 +11166,8 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.hybridnetwork/proxypublishers/artifactstores.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.hybridnetwork/proxypublishers/configurationgroupschemas", @@ -11088,7 +11321,8 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.hybridnetwork/servicemanagementcontainers.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.hybridnetwork/servicemanagementcontainers/rolloutsequences", @@ -11099,7 +11333,8 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.hybridnetwork/servicemanagementcontainers/rolloutsequences.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.hybridnetwork/servicemanagementcontainers/rollouttiers", @@ -11110,7 +11345,8 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.hybridnetwork/servicemanagementcontainers/rollouttiers.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.hybridnetwork/servicemanagementcontainers/updatespecifications", @@ -11121,7 +11357,8 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.hybridnetwork/servicemanagementcontainers/updatespecifications.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.hybridnetwork/servicemanagementcontainers/updatespecifications/rollouts", @@ -11132,7 +11369,8 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.hybridnetwork/servicemanagementcontainers/updatespecifications/rollouts.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.hybridnetwork/servicemanagementcontainers/updatespecifications/rollouts/statuses", @@ -11143,7 +11381,8 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.hybridnetwork/servicemanagementcontainers/updatespecifications/rollouts/statuses.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.hybridnetwork/sitenetworkservices", @@ -11240,7 +11479,7 @@ "lowerSingularDisplayName": "microsoft.impact workload impacts insight", "lowerPluralDisplayName": "microsoft.impact workload impacts insights", "isPreview": false, - "description": "Insight resource", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.impact/workloadimpacts/insights.svg", "links": null }, @@ -11655,10 +11894,10 @@ }, { "resourceType": "microsoft.iotfirmwaredefense/workspaces", - "singularDisplayName": "Microsoft.IoTFirmwareDefense workspace", - "pluralDisplayName": "Microsoft.IoTFirmwareDefense workspaces", - "lowerSingularDisplayName": "microsoft.iotfirmwaredefense workspace", - "lowerPluralDisplayName": "microsoft.iotfirmwaredefense workspaces", + "singularDisplayName": "Firmware analysis workspace", + "pluralDisplayName": "Firmware analysis workspaces", + "lowerSingularDisplayName": "firmware analysis workspace", + "lowerPluralDisplayName": "firmware analysis workspaces", "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.iotfirmwaredefense/workspaces.svg", @@ -11673,7 +11912,8 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.iotfirmwaredefense/workspaces/firmwares.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.iotfirmwaredefense/workspaces/firmwares/summaries", @@ -11684,7 +11924,8 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.iotfirmwaredefense/workspaces/firmwares/summaries.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.iotoperations/instances", @@ -11823,8 +12064,128 @@ "isPreview": false, "description": "Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq.svg", - "links": null, - "missingMetadata": true + "links": null + }, + { + "resourceType": "microsoft.iotoperationsmq/mq/broker", + "singularDisplayName": "Microsoft.IoTOperationsMQ mq broker", + "pluralDisplayName": "Microsoft.IoTOperationsMQ mq broker", + "lowerSingularDisplayName": "microsoft.iotoperationsmq mq broker", + "lowerPluralDisplayName": "microsoft.iotoperationsmq mq broker", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/broker.svg", + "links": null + }, + { + "resourceType": "microsoft.iotoperationsmq/mq/broker/authentication", + "singularDisplayName": "Microsoft.IoTOperationsMQ mq broker authentication", + "pluralDisplayName": "Microsoft.IoTOperationsMQ mq broker authentication", + "lowerSingularDisplayName": "microsoft.iotoperationsmq mq broker authentication", + "lowerPluralDisplayName": "microsoft.iotoperationsmq mq broker authentication", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/broker/authentication.svg", + "links": null + }, + { + "resourceType": "microsoft.iotoperationsmq/mq/broker/authorization", + "singularDisplayName": "Microsoft.IoTOperationsMQ mq broker authorization", + "pluralDisplayName": "Microsoft.IoTOperationsMQ mq broker authorization", + "lowerSingularDisplayName": "microsoft.iotoperationsmq mq broker authorization", + "lowerPluralDisplayName": "microsoft.iotoperationsmq mq broker authorization", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/broker/authorization.svg", + "links": null + }, + { + "resourceType": "microsoft.iotoperationsmq/mq/broker/listener", + "singularDisplayName": "Microsoft.IoTOperationsMQ mq broker listener", + "pluralDisplayName": "Microsoft.IoTOperationsMQ mq broker listener", + "lowerSingularDisplayName": "microsoft.iotoperationsmq mq broker listener", + "lowerPluralDisplayName": "microsoft.iotoperationsmq mq broker listener", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/broker/listener.svg", + "links": null + }, + { + "resourceType": "microsoft.iotoperationsmq/mq/datalakeconnector", + "singularDisplayName": "Microsoft.IoTOperationsMQ mq data lake connector", + "pluralDisplayName": "Microsoft.IoTOperationsMQ mq data lake connector", + "lowerSingularDisplayName": "microsoft.iotoperationsmq mq data lake connector", + "lowerPluralDisplayName": "microsoft.iotoperationsmq mq data lake connector", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/datalakeconnector.svg", + "links": null + }, + { + "resourceType": "microsoft.iotoperationsmq/mq/datalakeconnector/topicmap", + "singularDisplayName": "Microsoft.IoTOperationsMQ mq data lake connector topic map", + "pluralDisplayName": "Microsoft.IoTOperationsMQ mq data lake connector topic map", + "lowerSingularDisplayName": "microsoft.iotoperationsmq mq data lake connector topic map", + "lowerPluralDisplayName": "microsoft.iotoperationsmq mq data lake connector topic map", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/datalakeconnector/topicmap.svg", + "links": null + }, + { + "resourceType": "microsoft.iotoperationsmq/mq/diagnosticservice", + "singularDisplayName": "Microsoft.IoTOperationsMQ mq diagnostic service", + "pluralDisplayName": "Microsoft.IoTOperationsMQ mq diagnostic service", + "lowerSingularDisplayName": "microsoft.iotoperationsmq mq diagnostic service", + "lowerPluralDisplayName": "microsoft.iotoperationsmq mq diagnostic service", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/diagnosticservice.svg", + "links": null + }, + { + "resourceType": "microsoft.iotoperationsmq/mq/kafkaconnector", + "singularDisplayName": "Microsoft.IoTOperationsMQ mq kafka connector", + "pluralDisplayName": "Microsoft.IoTOperationsMQ mq kafka connector", + "lowerSingularDisplayName": "microsoft.iotoperationsmq mq kafka connector", + "lowerPluralDisplayName": "microsoft.iotoperationsmq mq kafka connector", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/kafkaconnector.svg", + "links": null + }, + { + "resourceType": "microsoft.iotoperationsmq/mq/kafkaconnector/topicmap", + "singularDisplayName": "Microsoft.IoTOperationsMQ mq kafka connector topic map", + "pluralDisplayName": "Microsoft.IoTOperationsMQ mq kafka connector topic map", + "lowerSingularDisplayName": "microsoft.iotoperationsmq mq kafka connector topic map", + "lowerPluralDisplayName": "microsoft.iotoperationsmq mq kafka connector topic map", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/kafkaconnector/topicmap.svg", + "links": null + }, + { + "resourceType": "microsoft.iotoperationsmq/mq/mqttbridgeconnector", + "singularDisplayName": "Microsoft.IoTOperationsMQ mq mqtt bridge connector", + "pluralDisplayName": "Microsoft.IoTOperationsMQ mq mqtt bridge connector", + "lowerSingularDisplayName": "microsoft.iotoperationsmq mq mqtt bridge connector", + "lowerPluralDisplayName": "microsoft.iotoperationsmq mq mqtt bridge connector", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/mqttbridgeconnector.svg", + "links": null + }, + { + "resourceType": "microsoft.iotoperationsmq/mq/mqttbridgeconnector/topicmap", + "singularDisplayName": "Microsoft.IoTOperationsMQ mq mqtt bridge connector topic map", + "pluralDisplayName": "Microsoft.IoTOperationsMQ mq mqtt bridge connector topic map", + "lowerSingularDisplayName": "microsoft.iotoperationsmq mq mqtt bridge connector topic map", + "lowerPluralDisplayName": "microsoft.iotoperationsmq mq mqtt bridge connector topic map", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/mqttbridgeconnector/topicmap.svg", + "links": null }, { "resourceType": "microsoft.iotoperationsorchestrator/instances", @@ -12258,7 +12619,7 @@ "lowerSingularDisplayName": "microsoft.liftrpilot organization", "lowerPluralDisplayName": "microsoft.liftrpilot organizations", "isPreview": false, - "description": "Concrete tracked resource types can be created by aliasing this type using a specific property type.", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.liftrpilot/organizations.svg", "links": null }, @@ -12339,6 +12700,17 @@ "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.logic/integrationserviceenvironments.svg", "links": null }, + { + "resourceType": "microsoft.logic/integrationserviceenvironments/health", + "singularDisplayName": "Microsoft.Logic integration service environments health", + "pluralDisplayName": "Microsoft.Logic integration service environments health", + "lowerSingularDisplayName": "microsoft.logic integration service environments health", + "lowerPluralDisplayName": "microsoft.logic integration service environments health", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.logic/integrationserviceenvironments/health.svg", + "links": null + }, { "resourceType": "microsoft.logic/integrationserviceenvironments/managedapis", "singularDisplayName": "Managed Connector", @@ -12577,6 +12949,17 @@ } ] }, + { + "resourceType": "microsoft.maintenance/maintenanceconfigurationsbladeresource", + "singularDisplayName": "Maintenance configuration", + "pluralDisplayName": "Maintenance configuration", + "lowerSingularDisplayName": "Maintenance configuration", + "lowerPluralDisplayName": "Maintenance configuration", + "isPreview": true, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.maintenance/maintenanceconfigurationsbladeresource.svg", + "links": null + }, { "resourceType": "microsoft.maintenance/publicmaintenanceconfigurations", "singularDisplayName": "Microsoft.Maintenance public maintenance configuration", @@ -12839,7 +13222,7 @@ "lowerSingularDisplayName": "microsoft.managednetworkfabric network monitor", "lowerPluralDisplayName": "microsoft.managednetworkfabric network monitors", "isPreview": false, - "description": "The NetworkMonitor resource definition.", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.managednetworkfabric/networkmonitors.svg", "links": null }, @@ -13011,10 +13394,10 @@ }, { "resourceType": "microsoft.manufacturingplatform/manufacturingdataservices", - "singularDisplayName": "Factory Operations Agent in Azure AI", - "pluralDisplayName": "Factory Operations Agent in Azure AI", - "lowerSingularDisplayName": "Factory Operations Agent in Azure AI", - "lowerPluralDisplayName": "Factory Operations Agent in Azure AI", + "singularDisplayName": "Factory Operations Agent in Azure AI Foundry", + "pluralDisplayName": "Factory Operations Agent in Azure AI Foundry", + "lowerSingularDisplayName": "Factory Operations Agent in Azure AI Foundry", + "lowerPluralDisplayName": "Factory Operations Agent in Azure AI Foundry", "isPreview": false, "description": "Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.manufacturingplatform/manufacturingdataservices.svg", @@ -13066,64 +13449,140 @@ "lowerPluralDisplayName": "microsoft.marketplace private stores admin request approvals", "isPreview": false, "description": "", - "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.marketplace/privatestores/adminrequestapprovals.svg", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.marketplace/privatestores/adminrequestapprovals.svg", + "links": null + }, + { + "resourceType": "microsoft.marketplace/privatestores/collections", + "singularDisplayName": "Microsoft.Marketplace private stores collection", + "pluralDisplayName": "Microsoft.Marketplace private stores collections", + "lowerSingularDisplayName": "microsoft.marketplace private stores collection", + "lowerPluralDisplayName": "microsoft.marketplace private stores collections", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.marketplace/privatestores/collections.svg", + "links": null + }, + { + "resourceType": "microsoft.marketplace/privatestores/collections/offers", + "singularDisplayName": "Microsoft.Marketplace private stores collections offer", + "pluralDisplayName": "Microsoft.Marketplace private stores collections offers", + "lowerSingularDisplayName": "microsoft.marketplace private stores collections offer", + "lowerPluralDisplayName": "microsoft.marketplace private stores collections offers", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.marketplace/privatestores/collections/offers.svg", + "links": null + }, + { + "resourceType": "microsoft.marketplace/privatestores/offers", + "singularDisplayName": "Microsoft.Marketplace private stores offer", + "pluralDisplayName": "Microsoft.Marketplace private stores offers", + "lowerSingularDisplayName": "microsoft.marketplace private stores offer", + "lowerPluralDisplayName": "microsoft.marketplace private stores offers", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.marketplace/privatestores/offers.svg", + "links": null + }, + { + "resourceType": "microsoft.marketplace/privatestores/requestapprovals", + "singularDisplayName": "Microsoft.Marketplace private stores request approval", + "pluralDisplayName": "Microsoft.Marketplace private stores request approvals", + "lowerSingularDisplayName": "microsoft.marketplace private stores request approval", + "lowerPluralDisplayName": "microsoft.marketplace private stores request approvals", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.marketplace/privatestores/requestapprovals.svg", + "links": null + }, + { + "resourceType": "microsoft.media/mediaservices", + "singularDisplayName": "Media service", + "pluralDisplayName": "Media Services", + "lowerSingularDisplayName": "media service", + "lowerPluralDisplayName": "Media Services", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices.svg", + "links": null + }, + { + "resourceType": "microsoft.media/mediaservices/accountfilters", + "singularDisplayName": "Microsoft.Media media services account filter", + "pluralDisplayName": "Microsoft.Media media services account filters", + "lowerSingularDisplayName": "microsoft.media media services account filter", + "lowerPluralDisplayName": "microsoft.media media services account filters", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/accountfilters.svg", + "links": null + }, + { + "resourceType": "microsoft.media/mediaservices/assets", + "singularDisplayName": "Microsoft.Media media services asset", + "pluralDisplayName": "Microsoft.Media media services assets", + "lowerSingularDisplayName": "microsoft.media media services asset", + "lowerPluralDisplayName": "microsoft.media media services assets", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/assets.svg", "links": null }, { - "resourceType": "microsoft.marketplace/privatestores/collections", - "singularDisplayName": "Microsoft.Marketplace private stores collection", - "pluralDisplayName": "Microsoft.Marketplace private stores collections", - "lowerSingularDisplayName": "microsoft.marketplace private stores collection", - "lowerPluralDisplayName": "microsoft.marketplace private stores collections", + "resourceType": "microsoft.media/mediaservices/assets/assetfilters", + "singularDisplayName": "Microsoft.Media media services assets asset filter", + "pluralDisplayName": "Microsoft.Media media services assets asset filters", + "lowerSingularDisplayName": "microsoft.media media services assets asset filter", + "lowerPluralDisplayName": "microsoft.media media services assets asset filters", "isPreview": false, "description": "", - "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.marketplace/privatestores/collections.svg", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/assets/assetfilters.svg", "links": null }, { - "resourceType": "microsoft.marketplace/privatestores/collections/offers", - "singularDisplayName": "Microsoft.Marketplace private stores collections offer", - "pluralDisplayName": "Microsoft.Marketplace private stores collections offers", - "lowerSingularDisplayName": "microsoft.marketplace private stores collections offer", - "lowerPluralDisplayName": "microsoft.marketplace private stores collections offers", + "resourceType": "microsoft.media/mediaservices/assets/tracks", + "singularDisplayName": "Microsoft.Media media services assets track", + "pluralDisplayName": "Microsoft.Media media services assets tracks", + "lowerSingularDisplayName": "microsoft.media media services assets track", + "lowerPluralDisplayName": "microsoft.media media services assets tracks", "isPreview": false, "description": "", - "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.marketplace/privatestores/collections/offers.svg", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/assets/tracks.svg", "links": null }, { - "resourceType": "microsoft.marketplace/privatestores/offers", - "singularDisplayName": "Microsoft.Marketplace private stores offer", - "pluralDisplayName": "Microsoft.Marketplace private stores offers", - "lowerSingularDisplayName": "microsoft.marketplace private stores offer", - "lowerPluralDisplayName": "microsoft.marketplace private stores offers", + "resourceType": "microsoft.media/mediaservices/assets/tracks/operationresults", + "singularDisplayName": "Microsoft.Media media services assets tracks operation result", + "pluralDisplayName": "Microsoft.Media media services assets tracks operation results", + "lowerSingularDisplayName": "microsoft.media media services assets tracks operation result", + "lowerPluralDisplayName": "microsoft.media media services assets tracks operation results", "isPreview": false, "description": "", - "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.marketplace/privatestores/offers.svg", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/assets/tracks/operationresults.svg", "links": null }, { - "resourceType": "microsoft.marketplace/privatestores/requestapprovals", - "singularDisplayName": "Microsoft.Marketplace private stores request approval", - "pluralDisplayName": "Microsoft.Marketplace private stores request approvals", - "lowerSingularDisplayName": "microsoft.marketplace private stores request approval", - "lowerPluralDisplayName": "microsoft.marketplace private stores request approvals", + "resourceType": "microsoft.media/mediaservices/assets/tracks/operationstatuses", + "singularDisplayName": "Microsoft.Media media services assets tracks operation statuse", + "pluralDisplayName": "Microsoft.Media media services assets tracks operation statuses", + "lowerSingularDisplayName": "microsoft.media media services assets tracks operation statuse", + "lowerPluralDisplayName": "microsoft.media media services assets tracks operation statuses", "isPreview": false, "description": "", - "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.marketplace/privatestores/requestapprovals.svg", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/assets/tracks/operationstatuses.svg", "links": null }, { - "resourceType": "microsoft.media/mediaservices", - "singularDisplayName": "Media service", - "pluralDisplayName": "Media Services", - "lowerSingularDisplayName": "media service", - "lowerPluralDisplayName": "Media Services", + "resourceType": "microsoft.media/mediaservices/contentkeypolicies", + "singularDisplayName": "Microsoft.Media media services content key policy", + "pluralDisplayName": "Microsoft.Media media services content key policies", + "lowerSingularDisplayName": "microsoft.media media services content key policy", + "lowerPluralDisplayName": "microsoft.media media services content key policies", "isPreview": false, "description": "", - "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices.svg", - "links": null, - "missingMetadata": true + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/contentkeypolicies.svg", + "links": null }, { "resourceType": "microsoft.media/mediaservices/liveevents", @@ -13134,8 +13593,40 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/liveevents.svg", - "links": null, - "missingMetadata": true + "links": null + }, + { + "resourceType": "microsoft.media/mediaservices/liveevents/liveoutputs", + "singularDisplayName": "Microsoft.Media mediaservices live events live output", + "pluralDisplayName": "Microsoft.Media mediaservices live events live outputs", + "lowerSingularDisplayName": "microsoft.media mediaservices live events live output", + "lowerPluralDisplayName": "microsoft.media mediaservices live events live outputs", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/liveevents/liveoutputs.svg", + "links": null + }, + { + "resourceType": "microsoft.media/mediaservices/privateendpointconnections", + "singularDisplayName": "Microsoft.Media mediaservices private endpoint connection", + "pluralDisplayName": "Microsoft.Media mediaservices private endpoint connections", + "lowerSingularDisplayName": "microsoft.media mediaservices private endpoint connection", + "lowerPluralDisplayName": "microsoft.media mediaservices private endpoint connections", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/privateendpointconnections.svg", + "links": null + }, + { + "resourceType": "microsoft.media/mediaservices/privatelinkresources", + "singularDisplayName": "Microsoft.Media mediaservices private link resource", + "pluralDisplayName": "Microsoft.Media mediaservices private link resources", + "lowerSingularDisplayName": "microsoft.media mediaservices private link resource", + "lowerPluralDisplayName": "microsoft.media mediaservices private link resources", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/privatelinkresources.svg", + "links": null }, { "resourceType": "microsoft.media/mediaservices/streamingendpoints", @@ -13146,8 +13637,51 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/streamingendpoints.svg", - "links": null, - "missingMetadata": true + "links": null + }, + { + "resourceType": "microsoft.media/mediaservices/streaminglocators", + "singularDisplayName": "Microsoft.Media media services streaming locator", + "pluralDisplayName": "Microsoft.Media media services streaming locators", + "lowerSingularDisplayName": "microsoft.media media services streaming locator", + "lowerPluralDisplayName": "microsoft.media media services streaming locators", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/streaminglocators.svg", + "links": null + }, + { + "resourceType": "microsoft.media/mediaservices/streamingpolicies", + "singularDisplayName": "Microsoft.Media media services streaming policy", + "pluralDisplayName": "Microsoft.Media media services streaming policies", + "lowerSingularDisplayName": "microsoft.media media services streaming policy", + "lowerPluralDisplayName": "microsoft.media media services streaming policies", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/streamingpolicies.svg", + "links": null + }, + { + "resourceType": "microsoft.media/mediaservices/transforms", + "singularDisplayName": "Microsoft.Media media services transform", + "pluralDisplayName": "Microsoft.Media media services transforms", + "lowerSingularDisplayName": "microsoft.media media services transform", + "lowerPluralDisplayName": "microsoft.media media services transforms", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/transforms.svg", + "links": null + }, + { + "resourceType": "microsoft.media/mediaservices/transforms/jobs", + "singularDisplayName": "Microsoft.Media media services transforms job", + "pluralDisplayName": "Microsoft.Media media services transforms jobs", + "lowerSingularDisplayName": "microsoft.media media services transforms job", + "lowerPluralDisplayName": "microsoft.media media services transforms jobs", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/transforms/jobs.svg", + "links": null }, { "resourceType": "microsoft.mesh/worlds", @@ -14132,7 +14666,7 @@ "lowerSingularDisplayName": "microsoft.mission external connection", "lowerPluralDisplayName": "microsoft.mission external connections", "isPreview": false, - "description": "Describes an External Connection.", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.mission/externalconnections.svg", "links": null }, @@ -14143,7 +14677,7 @@ "lowerSingularDisplayName": "microsoft.mission internal connection", "lowerPluralDisplayName": "microsoft.mission internal connections", "isPreview": false, - "description": "Describes an Internal Connection.", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.mission/internalconnections.svg", "links": null }, @@ -14666,7 +15200,8 @@ "isPreview": false, "description": "Create a Modeling and Simulation Workbench for deploying a secure, collaborative engineering design environment on Azure.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.modsimworkbench/workbenches.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.modsimworkbench/workbenches/chambers", @@ -14677,7 +15212,8 @@ "isPreview": false, "description": "Create a chamber to set up secure workplace which is isolated from other chambers within the Modeling and Simulation Workbench.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.modsimworkbench/workbenches/chambers.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.modsimworkbench/workbenches/chambers/connectors", @@ -14688,7 +15224,8 @@ "isPreview": false, "description": "Create a chamber connector to connect from on-premises network to specific chamber.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.modsimworkbench/workbenches/chambers/connectors.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.modsimworkbench/workbenches/chambers/filerequests", @@ -14699,7 +15236,8 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.modsimworkbench/workbenches/chambers/filerequests.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.modsimworkbench/workbenches/chambers/files", @@ -14710,7 +15248,8 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.modsimworkbench/workbenches/chambers/files.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.modsimworkbench/workbenches/chambers/licenses", @@ -14721,7 +15260,8 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.modsimworkbench/workbenches/chambers/licenses.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.modsimworkbench/workbenches/chambers/storages", @@ -14732,7 +15272,8 @@ "isPreview": false, "description": "Create a chamber storage to add a high performance file-storage which is private to this chamber.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.modsimworkbench/workbenches/chambers/storages.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.modsimworkbench/workbenches/chambers/workloads", @@ -14743,7 +15284,8 @@ "isPreview": false, "description": "Create a chamber VM to scale your engineering workload’s computing power.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.modsimworkbench/workbenches/chambers/workloads.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.modsimworkbench/workbenches/sharedstorages", @@ -14754,7 +15296,8 @@ "isPreview": false, "description": "Create a shared storage to collaborate across design teams and organizations.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.modsimworkbench/workbenches/sharedstorages.svg", - "links": null + "links": null, + "missingMetadata": true }, { "resourceType": "microsoft.monitor/accounts", @@ -15483,12 +16026,7 @@ "isPreview": false, "description": "Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkmanagers/ipampools.svg", - "links": [ - { - "title": "Get consistent", - "uri": "https://aka.ms/portalfx/browse" - } - ] + "links": null }, { "resourceType": "microsoft.network/networkmanagers/networkgroups", @@ -15586,28 +16124,18 @@ "isPreview": false, "description": "Network Security Perimeter is a boundary around PaaS resources. Access between resources on the same network security perimeter is allowed by default.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networksecurityperimeters.svg", - "links": [ - { - "title": "Learn more", - "uri": "https://aka.ms/portalfx/browse" - } - ] + "links": null }, { "resourceType": "microsoft.network/networksecurityperimeters/profiles", - "singularDisplayName": "Network Security Perimeter", - "pluralDisplayName": "Network Security Perimeters", - "lowerSingularDisplayName": "network security perimeter", - "lowerPluralDisplayName": "network security perimeters", + "singularDisplayName": "Network Security Perimeter Profile", + "pluralDisplayName": "Network Security Perimeter Profiles", + "lowerSingularDisplayName": "network security perimeter profile", + "lowerPluralDisplayName": "network security perimeter profiles", "isPreview": false, "description": "Network Security Perimeter is a boundary around PaaS resources. Access between resources on the same network security perimeter is allowed by default.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networksecurityperimeters/profiles.svg", - "links": [ - { - "title": "Learn more", - "uri": "https://aka.ms/portalfx/browse" - } - ] + "links": null }, { "resourceType": "microsoft.network/networkverifiers", @@ -15656,10 +16184,10 @@ }, { "resourceType": "microsoft.network/p2svpngateways", - "singularDisplayName": "Microsoft.Network P2S VPN gateway", - "pluralDisplayName": "Microsoft.Network P2S VPN gateways", - "lowerSingularDisplayName": "microsoft.network p2s vpn gateway", - "lowerPluralDisplayName": "microsoft.network p2s vpn gateways", + "singularDisplayName": "VPN Gateway (Point to Site)", + "pluralDisplayName": "VPN Gateways", + "lowerSingularDisplayName": "vpn gateway", + "lowerPluralDisplayName": "vpn gateways", "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.network/p2svpngateways.svg", @@ -15812,7 +16340,7 @@ "links": [ { "title": "Learn more", - "uri": "https://azure.microsoft.com/products/traffic-manager/" + "uri": "https://go.microsoft.com/fwlink/p/?linkid=847681" } ] }, @@ -15916,7 +16444,7 @@ }, { "resourceType": "microsoft.network/vpngateways", - "singularDisplayName": "VPN Gateway", + "singularDisplayName": "VPN Gateway (Site to Site)", "pluralDisplayName": "VPN Gateways", "lowerSingularDisplayName": "vpn gateway", "lowerPluralDisplayName": "vpn gateways", @@ -16225,6 +16753,17 @@ "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.networkcloud/kubernetesclusters/agentpools.svg", "links": null }, + { + "resourceType": "microsoft.networkcloud/kubernetesclusters/features", + "singularDisplayName": "Kubernetes Cluster Feature (Operator Nexus)", + "pluralDisplayName": "Kubernetes Cluster Features (Operator Nexus)", + "lowerSingularDisplayName": "kubernetes cluster feature (operator nexus)", + "lowerPluralDisplayName": "kubernetes cluster features (operator nexus)", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.networkcloud/kubernetesclusters/features.svg", + "links": null + }, { "resourceType": "microsoft.networkcloud/l2networks", "singularDisplayName": "Layer 2 Network (Operator Nexus)", @@ -17037,6 +17576,22 @@ "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.offazurespringboot/springbootsites/summaries.svg", "links": null }, + { + "resourceType": "microsoft.onlineexperimentation/workspaces", + "singularDisplayName": "Online Experimentation Workspace", + "pluralDisplayName": "Online Experimentation Workspaces", + "lowerSingularDisplayName": "online experimentation workspace", + "lowerPluralDisplayName": "online experimentation workspaces", + "isPreview": false, + "description": "An online experiment workspace resource.", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.onlineexperimentation/workspaces.svg", + "links": [ + { + "title": "Learn Online Experimentation", + "uri": "https://aka.ms/exp/public/docs" + } + ] + }, { "resourceType": "microsoft.openenergyplatform/energyservices", "singularDisplayName": "Azure Data Manager for Energy", @@ -17121,9 +17676,14 @@ "lowerSingularDisplayName": "log analytics dedicated cluster", "lowerPluralDisplayName": "log analytics dedicated clusters", "isPreview": false, - "description": "", + "description": "Dedicated cluster in Azure Monitor enables advanced security and control capabilities including Customer-managed keys, Lockbox, Availability zones, Ingest from Azure Event Hubs, and cost optimization. Linking and unlinking workspaces from cluster has no interruption to ingestion and query operations.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.operationalinsights/clusters.svg", - "links": null + "links": [ + { + "title": "Learn more", + "uri": "https://aka.ms/LogsDCluster" + } + ] }, { "resourceType": "microsoft.operationalinsights/querypacks", @@ -17802,7 +18362,7 @@ "lowerSingularDisplayName": "microsoft.proposal proposal", "lowerPluralDisplayName": "microsoft.proposal proposals", "isPreview": false, - "description": "A ProposalProviderHub resource", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.proposal/proposals.svg", "links": null }, @@ -18560,6 +19120,17 @@ "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.saas/saasresources.svg", "links": null }, + { + "resourceType": "microsoft.saashub/cloudservices", + "singularDisplayName": "Microsoft.SaaSHub cloud service", + "pluralDisplayName": "Microsoft.SaaSHub cloud services", + "lowerSingularDisplayName": "microsoft.saashub cloud service", + "lowerPluralDisplayName": "microsoft.saashub cloud services", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.saashub/cloudservices.svg", + "links": null + }, { "resourceType": "microsoft.saashub/cloudservices/hidden", "singularDisplayName": "Microsoft SaaS", @@ -18726,6 +19297,17 @@ "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.search/searchservices.svg", "links": null }, + { + "resourceType": "microsoft.secretmanagementsampleprovider/forecasts", + "singularDisplayName": "Microsoft.SecretManagementSampleProvider forecast", + "pluralDisplayName": "Microsoft.SecretManagementSampleProvider forecasts", + "lowerSingularDisplayName": "microsoft.secretmanagementsampleprovider forecast", + "lowerPluralDisplayName": "microsoft.secretmanagementsampleprovider forecasts", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.secretmanagementsampleprovider/forecasts.svg", + "links": null + }, { "resourceType": "microsoft.secretsynccontroller/azurekeyvaultsecretproviderclasses", "singularDisplayName": "Microsoft.SecretSyncController Azure key vault secret provider class", @@ -20046,6 +20628,22 @@ "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.storagecache/caches.svg", "links": null }, + { + "resourceType": "microsoft.storagediscovery/storagediscoveryworkspaces", + "singularDisplayName": "Storage Discovery workspace", + "pluralDisplayName": "Storage Discovery workspaces", + "lowerSingularDisplayName": "storage discovery workspace", + "lowerPluralDisplayName": "storage discovery workspaces", + "isPreview": false, + "description": "Storage Discovery placeholder description", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.storagediscovery/storagediscoveryworkspaces.svg", + "links": [ + { + "title": "Learn more", + "uri": "https://microsoft.com" + } + ] + }, { "resourceType": "microsoft.storageinsights/storagecollectionrules", "singularDisplayName": "Microsoft.StorageInsights storage collection rule", @@ -20527,12 +21125,12 @@ }, { "resourceType": "microsoft.sustainabilityservices/calculations", - "singularDisplayName": "Microsoft.SustainabilityServices calculation", - "pluralDisplayName": "Microsoft.SustainabilityServices calculations", - "lowerSingularDisplayName": "microsoft.sustainabilityservices calculation", - "lowerPluralDisplayName": "microsoft.sustainabilityservices calculations", - "isPreview": false, - "description": "", + "singularDisplayName": "Project Sustainability Calculator", + "pluralDisplayName": "Project Sustainability Calculator", + "lowerSingularDisplayName": "Project Sustainability Calculator", + "lowerPluralDisplayName": "Project Sustainability Calculator", + "isPreview": true, + "description": "Start assessing your organization’s environmental emissions footprint across scope 1, scope 2, and scope 3 by creating a Project Sustainability Calculator resource.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.sustainabilityservices/calculations.svg", "links": null }, @@ -20752,8 +21350,7 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/activations.svg", - "links": null, - "missingMetadata": true + "links": null }, { "resourceType": "microsoft.toolchainorchestrator/campaigns", @@ -20764,8 +21361,7 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/campaigns.svg", - "links": null, - "missingMetadata": true + "links": null }, { "resourceType": "microsoft.toolchainorchestrator/campaigns/versions", @@ -20776,8 +21372,7 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/campaigns/versions.svg", - "links": null, - "missingMetadata": true + "links": null }, { "resourceType": "microsoft.toolchainorchestrator/catalogs", @@ -20788,8 +21383,7 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/catalogs.svg", - "links": null, - "missingMetadata": true + "links": null }, { "resourceType": "microsoft.toolchainorchestrator/catalogs/versions", @@ -20800,8 +21394,18 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/catalogs/versions.svg", - "links": null, - "missingMetadata": true + "links": null + }, + { + "resourceType": "microsoft.toolchainorchestrator/diagnostics", + "singularDisplayName": "Microsoft.ToolchainOrchestrator diagnostic", + "pluralDisplayName": "Microsoft.ToolchainOrchestrator diagnostics", + "lowerSingularDisplayName": "microsoft.toolchainorchestrator diagnostic", + "lowerPluralDisplayName": "microsoft.toolchainorchestrator diagnostics", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/diagnostics.svg", + "links": null }, { "resourceType": "microsoft.toolchainorchestrator/instances", @@ -20812,8 +21416,7 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/instances.svg", - "links": null, - "missingMetadata": true + "links": null }, { "resourceType": "microsoft.toolchainorchestrator/instances/versions", @@ -20824,8 +21427,7 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/instances/versions.svg", - "links": null, - "missingMetadata": true + "links": null }, { "resourceType": "microsoft.toolchainorchestrator/solutions", @@ -20836,8 +21438,7 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/solutions.svg", - "links": null, - "missingMetadata": true + "links": null }, { "resourceType": "microsoft.toolchainorchestrator/solutions/versions", @@ -20848,8 +21449,7 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/solutions/versions.svg", - "links": null, - "missingMetadata": true + "links": null }, { "resourceType": "microsoft.toolchainorchestrator/targets", @@ -20860,8 +21460,7 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/targets.svg", - "links": null, - "missingMetadata": true + "links": null }, { "resourceType": "microsoft.toolchainorchestrator/targets/versions", @@ -20872,8 +21471,7 @@ "isPreview": false, "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/targets/versions.svg", - "links": null, - "missingMetadata": true + "links": null }, { "resourceType": "microsoft.usagebilling/accounts", @@ -21486,7 +22084,7 @@ "lowerSingularDisplayName": "microsoft.workloads configuration validation result", "lowerPluralDisplayName": "microsoft.workloads configuration validation results", "isPreview": false, - "description": "Configuration validation results.", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/configurationvalidationresults.svg", "links": null }, @@ -21556,6 +22154,50 @@ "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/insights.svg", "links": null }, + { + "resourceType": "microsoft.workloads/instancegroupmonitors", + "singularDisplayName": "Microsoft.Workloads instance group monitor", + "pluralDisplayName": "Microsoft.Workloads instance group monitors", + "lowerSingularDisplayName": "microsoft.workloads instance group monitor", + "lowerPluralDisplayName": "microsoft.workloads instance group monitors", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/instancegroupmonitors.svg", + "links": null + }, + { + "resourceType": "microsoft.workloads/instancehealthdefinitions", + "singularDisplayName": "Microsoft.Workloads instance health definition", + "pluralDisplayName": "Microsoft.Workloads instance health definitions", + "lowerSingularDisplayName": "microsoft.workloads instance health definition", + "lowerPluralDisplayName": "microsoft.workloads instance health definitions", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/instancehealthdefinitions.svg", + "links": null + }, + { + "resourceType": "microsoft.workloads/instancehealthdefinitions/signaldefinitions", + "singularDisplayName": "Microsoft.Workloads instance health definitions signal definition", + "pluralDisplayName": "Microsoft.Workloads instance health definitions signal definitions", + "lowerSingularDisplayName": "microsoft.workloads instance health definitions signal definition", + "lowerPluralDisplayName": "microsoft.workloads instance health definitions signal definitions", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/instancehealthdefinitions/signaldefinitions.svg", + "links": null + }, + { + "resourceType": "microsoft.workloads/instancemonitors", + "singularDisplayName": "Microsoft.Workloads instance monitor", + "pluralDisplayName": "Microsoft.Workloads instance monitors", + "lowerSingularDisplayName": "microsoft.workloads instance monitor", + "lowerPluralDisplayName": "microsoft.workloads instance monitors", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/instancemonitors.svg", + "links": null + }, { "resourceType": "microsoft.workloads/monitors", "singularDisplayName": "Azure Monitor for SAP solutions", @@ -21700,7 +22342,7 @@ "lowerSingularDisplayName": "microsoft.workloads virtual instance", "lowerPluralDisplayName": "microsoft.workloads virtual instances", "isPreview": false, - "description": "Defines the Virtual Instance (VI) resource.", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/virtualinstances.svg", "links": null }, @@ -21711,31 +22353,36 @@ "lowerSingularDisplayName": "microsoft.workloads virtual instances component", "lowerPluralDisplayName": "microsoft.workloads virtual instances components", "isPreview": false, - "description": "Defines the Workload Component resource.", + "description": "", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/virtualinstances/components.svg", "links": null }, { "resourceType": "microsoft.zerotrustsegmentation/segmentationmanagers", - "singularDisplayName": "Microsoft.ZeroTrustSegmentation segmentation manager", - "pluralDisplayName": "Microsoft.ZeroTrustSegmentation segmentation managers", - "lowerSingularDisplayName": "microsoft.zerotrustsegmentation segmentation manager", - "lowerPluralDisplayName": "microsoft.zerotrustsegmentation segmentation managers", + "singularDisplayName": "Segmentation Manager", + "pluralDisplayName": "Segmentation Managers", + "lowerSingularDisplayName": "segmentation manager", + "lowerPluralDisplayName": "segmentation managers", "isPreview": false, - "description": "", + "description": "Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.", "icon": "https://microsoft.github.io/finops-toolkit/svg/microsoft.zerotrustsegmentation/segmentationmanagers.svg", "links": null }, { "resourceType": "mongodb.atlas/organizations", - "singularDisplayName": "MongoDB Atlas - An Azure Native ISV Service", - "pluralDisplayName": "MongoDB Atlas - An Azure Native ISV Service", - "lowerSingularDisplayName": "MongoDB Atlas - An Azure Native ISV Service", - "lowerPluralDisplayName": "MongoDB Atlas - An Azure Native ISV Service", + "singularDisplayName": "MongoDB Atlas Organization", + "pluralDisplayName": "MongoDB Atlas", + "lowerSingularDisplayName": "MongoDB Atlas Organization", + "lowerPluralDisplayName": "MongoDB Atlas Organization", "isPreview": false, - "description": "Concrete tracked resource types can be created by aliasing this type using a specific property type.", + "description": "MongoDB Atlas as an Azure Native ISV Service integrates the fully-managed document database, including native vector search capabilities, directly into the Azure ecosystem. Build and scale modern AI applications with a streamlined setup of an Atlas Organization, unified billing management, and seamless access to Azure services.", "icon": "https://microsoft.github.io/finops-toolkit/svg/mongodb.atlas/organizations.svg", - "links": null + "links": [ + { + "title": "Learn more about MongoDB Atlas", + "uri": "https://www.mongodb.com/lp/cloud/atlas/try4-reg" + } + ] }, { "resourceType": "neon.postgres/organizations", @@ -21818,6 +22465,28 @@ "icon": "https://microsoft.github.io/finops-toolkit/svg/oracle.database/cloudvmclusters.svg", "links": null }, + { + "resourceType": "oracle.database/exadbvmclusters", + "singularDisplayName": "Oracle Exascale VM Cluster", + "pluralDisplayName": "Oracle Exascale VM Clusters", + "lowerSingularDisplayName": "Oracle Exascale VM Cluster", + "lowerPluralDisplayName": "Oracle Exascale VM Clusters", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/oracle.database/exadbvmclusters.svg", + "links": null + }, + { + "resourceType": "oracle.database/exascaledbstoragevaults", + "singularDisplayName": "Oracle Exascale DB Storage Vault", + "pluralDisplayName": "Oracle Exascale VM Clusters", + "lowerSingularDisplayName": "Oracle Exascale DB Storage Vault", + "lowerPluralDisplayName": "Oracle Exascale VM Clusters", + "isPreview": false, + "description": "", + "icon": "https://microsoft.github.io/finops-toolkit/svg/oracle.database/exascaledbstoragevaults.svg", + "links": null + }, { "resourceType": "oracle.database/oraclesubscriptions", "singularDisplayName": "OracleSubscription", @@ -21958,7 +22627,8 @@ "title": "Learn more", "uri": "https://aka.ms/appconfig/splitdocs" } - ] + ], + "missingMetadata": true }, { "resourceType": "wandisco.fusion/migrators", diff --git a/src/open-data/Services.csv b/src/open-data/Services.csv index 46d9fbe8a..ccdc2714d 100644 --- a/src/open-data/Services.csv +++ b/src/open-data/Services.csv @@ -80,6 +80,7 @@ microsoft.classicnetwork,microsoft.classicnetwork/publicipaddresses,Virtual Netw microsoft.classicstorage,microsoft.classicstorage/storageaccounts,Storage Accounts,Storage,Storage Platforms,Microsoft,Cloud Provider,Cloud,IaaS microsoft.codesigning,microsoft.codesigning/codesigningaccounts,Trusted Signing,Developer Tools,Continuous Integration and Deployment,Microsoft,Cloud Provider,Cloud,SaaS microsoft.cognitiveservices,microsoft.cognitiveservices/accounts,Azure AI Services,AI and Machine Learning,AI Platforms,Microsoft,Cloud Provider,Cloud,PaaS +microsoft.cognitiveservices,microsoft.cognitiveservices/commitmentplans,Azure AI Services,AI and Machine Learning,AI Platforms,Microsoft,Cloud Provider,Cloud,PaaS microsoft.communication,microsoft.communication/communicationservices,Azure Communication Services,Integration,Messaging,Microsoft,Cloud Provider,Cloud,PaaS microsoft.community,microsoft.community/communitytrainings,Community Training,Business Applications,Other (Business Applications),Microsoft,Cloud Provider,Cloud,SaaS microsoft.compute,microsoft.compute/capacityreservationgroups,Virtual Machines,Compute,Virtual Machines,Microsoft,Cloud Provider,Cloud,IaaS @@ -121,6 +122,7 @@ microsoft.dbforpostgresql,microsoft.dbforpostgresql/servergroupsv2,Azure DB for microsoft.dbforpostgresql,microsoft.dbforpostgresql/servers,Azure DB for PostgreSQL,Databases,Relational Databases,Microsoft,Cloud Provider,Cloud,PaaS microsoft.desktopvirtualization,microsoft.desktopvirtualization/hostpools,Azure Virtual Desktop,Compute,End User Computing,Microsoft,Cloud Provider,Cloud,IaaS microsoft.devcenter,microsoft.devcenter/projects,Microsoft Dev Box,Developer Tools,Continuous Integration and Deployment,Microsoft,Cloud Provider,Cloud,PaaS +microsoft.deviceregistry,microsoft.deviceregistry/billingcontainers,Azure IoT Hub,Internet of Things,IoT Platforms,Microsoft,Cloud Provider,Cloud,PaaS microsoft.devices,microsoft.devices/iothubs,Azure IoT Hub,Internet of Things,IoT Platforms,Microsoft,Cloud Provider,Cloud,PaaS microsoft.devices,microsoft.devices/provisioningservices,Azure IoT Hub,Internet of Things,IoT Platforms,Microsoft,Cloud Provider,Cloud,PaaS microsoft.deviceupdate,microsoft.deviceupdate/accounts,Azure IoT Hub,Internet of Things,IoT Platforms,Microsoft,Cloud Provider,Cloud,PaaS diff --git a/src/open-data/dataset-examples/MCA-Reservations-Details.csv b/src/open-data/dataset-examples/MCA-Reservations-Details.csv new file mode 100644 index 000000000..dfd158e2c --- /dev/null +++ b/src/open-data/dataset-examples/MCA-Reservations-Details.csv @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db2f09d2857e6ecdb88be9a8289ac2f591d6f18d940a643bbdd6190bb3becc68 +size 53535 diff --git a/src/open-data/dataset-examples/MCA-Reservations-Recommendations.csv b/src/open-data/dataset-examples/MCA-Reservations-Recommendations.csv new file mode 100644 index 000000000..6d289773d --- /dev/null +++ b/src/open-data/dataset-examples/MCA-Reservations-Recommendations.csv @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0bd35ca1f4cc87cbf5835a5125bac630ab0e5977f8d29cf1d15940ad987bb979 +size 7688 diff --git a/src/open-data/dataset-examples/MCA-Reservations-Transactions.csv b/src/open-data/dataset-examples/MCA-Reservations-Transactions.csv new file mode 100644 index 000000000..f9570b7e2 --- /dev/null +++ b/src/open-data/dataset-examples/MCA-Reservations-Transactions.csv @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:baca3f30d55bde7f12c4077fc8b50849aa56d6bfc739ef387b98fa2a3dec5255 +size 3518 diff --git a/src/optimization-engine/ftkver.txt b/src/optimization-engine/ftkver.txt index ce609caf8..9a7d84f2a 100644 --- a/src/optimization-engine/ftkver.txt +++ b/src/optimization-engine/ftkver.txt @@ -1 +1 @@ -0.8 \ No newline at end of file +0.9 \ No newline at end of file diff --git a/src/optimization-engine/runbooks/recommendations/Recommend-StorageAccountOptimizationsToBlobStorage.ps1 b/src/optimization-engine/runbooks/recommendations/Recommend-StorageAccountOptimizationsToBlobStorage.ps1 index cbaebfdf9..952ec3bf5 100644 --- a/src/optimization-engine/runbooks/recommendations/Recommend-StorageAccountOptimizationsToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/recommendations/Recommend-StorageAccountOptimizationsToBlobStorage.ps1 @@ -187,7 +187,7 @@ 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; +| summarize arg_max(todatetime(Date_s), Tags_s) by ResourceId; $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' @@ -204,6 +204,8 @@ $consumptionTableName | where ContainerType_s =~ 'microsoft.resources/subscriptions' | project SubscriptionId=SubscriptionGuid_g, SubscriptionName = ContainerName_s ) on SubscriptionId +| extend Tags_s = iif(Tags_s !startswith "{", strcat('{', Tags_s, '}'), Tags_s) +| extend Tags_s = parse_json(tolower(Tags_s)) "@ try diff --git a/src/power-bi/FinOpsToolkitLight.json b/src/power-bi/FinOpsToolkitLight.json index e0a0d80df..c0e14c65d 100644 --- a/src/power-bi/FinOpsToolkitLight.json +++ b/src/power-bi/FinOpsToolkitLight.json @@ -1 +1,64 @@ -{"name":"Microsoft FinOps light theme","dataColors":["#6F4BB2","#0078D4","#EF6950","#3449AA","#00A2AD","#733569","#E3008C","#335C50","#3599B8","#DFBFBF","#4AC5BB","#5F6B6D","#FB8281","#F4D25A","#7F898A","#A4DDEE","#FDAB89","#B687AC","#28738A","#A78F8F","#168980","#293537","#BB4A4A","#B59525","#475052","#6A9FB0","#BD7150","#7B4F71","#1B4D5C","#706060","#0F5C55","#1C2325"],"visualStyles":{"*":{"*":{"visualTooltip":[{"titleFontColor":{"solid":{"color":"#FFFFFF"}},"valueFontColor":{"solid":{"color":"#FFFFFF"}}}],"outspacePane":[{"checkboxAndApplyColor":{"solid":{"color":"#6F4BB2"}}}]}}},"bad":"#E00B1C","neutral":"#DB7500","good":"#57A300","minimum":"#EFEDF8","center":"#FFCA8A","maximum":"#8970C3","textClasses":{"callout":{"fontFace":"'Segoe UI', wf_segoe-ui_normal, helvetica, arial, sans-serif"},"title":{"fontFace":"'Segoe UI Semibold', wf_segoe-ui_semibold, helvetica, arial, sans-serif"}}} \ No newline at end of file +{ + "name": "Microsoft FinOps light theme", + "dataColors": [ + "#6f4bb2", + "#0078d4", + "#ef6950", + "#3449aa", + "#00a2ad", + "#733569", + "#e3008c", + "#335c50", + "#3599b8", + "#dfbfbf", + "#4ac5bb", + "#5f6b6d", + "#fb8281", + "#f4d25a", + "#7f898a", + "#a4ddee", + "#fdab89", + "#b687ac", + "#28738a", + "#a78f8f", + "#168980", + "#293537", + "#bb4a4a", + "#b59525", + "#475052", + "#6a9fb0", + "#bd7150", + "#7b4f71", + "#1b4d5c", + "#706060", + "#0f5c55", + "#1c2325" + ], + "visualStyles": { + "*": { + "*": { + "visualTooltip": [ + { + "titleFontColor": { "solid": { "color": "#ffffff" } }, + "valueFontColor": { "solid": { "color": "#ffffff" } } + } + ], + "outspacePane": [ + { + "checkboxAndApplyColor": { "solid": { "color": "#6f4bb2" } } + } + ] + } + } + }, + "bad": "#e00b1c", + "neutral": "#db7500", + "good": "#57a300", + "minimum": "#efedf8", + "center": "#ffca8a", + "maximum": "#8970c3", + "textClasses": { + "callout": { "fontFace": "'Segoe UI', wf_segoe-ui_normal, helvetica, arial, sans-serif" }, + "title": { "fontFace": "'Segoe UI Semibold', wf_segoe-ui_semibold, helvetica, arial, sans-serif" } + } +} diff --git a/src/power-bi/kql/CostSummary.Report/report.json b/src/power-bi/kql/CostSummary.Report/report.json index 18c0abde1..a5c89f084 100644 --- a/src/power-bi/kql/CostSummary.Report/report.json +++ b/src/power-bi/kql/CostSummary.Report/report.json @@ -1,5 +1,5 @@ { - "config": "{\"version\":\"5.61\",\"themeCollection\":{\"baseTheme\":{\"name\":\"CY24SU10\",\"version\":\"5.61\",\"type\":2},\"customTheme\":{\"name\":\"Microsoft_FinOps_light_theme5385236195184553.json\",\"version\":\"5.61\",\"type\":1}},\"activeSectionIndex\":0,\"bookmarks\":[{\"displayName\":\"Get started\",\"name\":\"eea9791fb405ba7e2373\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"c563657f6b3f4fc63ea9\",\"filters\":{\"byExpr\":[{\"name\":\"71f23e9beb592a377302\",\"type\":\"Categorical\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_CostAllocationRuleName\"}},\"howCreated\":1}]},\"sections\":{\"c563657f6b3f4fc63ea9\":{\"visualContainers\":{\"06a7c3e90ed262bccb99\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"a76a0973476f7531fb0a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"c530af517a82efec49f6\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d608167b2800cd5f37d9\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"8ac8b68f0dbfd67863ea\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"c272ca337973163d0b4f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"cde5a61c7cf321c024d4\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"d7a012d33ea2aa4d8f23\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"adad1df4dc74f2f73033\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"af31dcf7a0e5abbb4baa\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"02272826509e4602660a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"193b16f8c0229af502bc\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1c6ae1106e4495e9bee3\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2532e26d3bda6232fdaa\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"296a57712be8d891be68\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4885b748772877408783\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4ad879e1bf2d7748e92e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"67f001709c0207952234\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"88f28312a432af922c3e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9b6da2430313a11fbe1a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a109a5208f1421b7e4de\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ae3a5001d9fda9800214\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b0b2a35779b57f143666\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c1f288a2b56f89b3df0f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d96fff05c9f42855646e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"dab8ad25bc9d0906c474\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"dba7dfd64abe6112a5e2\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e449d0a11c83ce7aac32\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"eb91a261b0d37e189734\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f92f0508d293dd2ea2a0\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c3a5f0c65dfc5c4b04c2\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"53b38783373bb0b71040\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"74c29e239e2bf411aa60\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b65b40f83e6aadd2dcb8\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"e2cf9ff77352009da63e\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e1fcdb07884fc6a3938c\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"e2a5aa343a32f9d355e9\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"6bc885e678f8471f8b5d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"8e00d79ffc746643c0f6\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ac8683056a4f6436ab31\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e69246791224d7feecb3\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"ed31b8c69c8859a6475a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ecac7d836cc5a75e3dc7\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"eb0ee67d575b54cdf827\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e82905c8e3d2dd647563\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e0fa9dae2344df6f995f\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"f3696b5d0b479208c273\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"16c57f563e98e67b536b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"12be4ee52940709706cd\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f9e22e695b45fed368cf\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}}},\"visualContainerGroups\":{\"0ea72185adbf2cf8f4a0\":{\"isHidden\":true},\"330980de6a26f7e92210\":{\"isHidden\":false},\"b0c972248f8169e395aa\":{\"isHidden\":true},\"d6cdb8ede8cf4893d913\":{\"isHidden\":false},\"e2db4806d2fd5c9d95ea\":{\"isHidden\":false},\"db0699bd090645927783\":{\"isHidden\":true}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[\"ecac7d836cc5a75e3dc7\",\"db0699bd090645927783\",\"eb0ee67d575b54cdf827\",\"e82905c8e3d2dd647563\",\"e0fa9dae2344df6f995f\",\"f3696b5d0b479208c273\",\"16c57f563e98e67b536b\",\"12be4ee52940709706cd\",\"f9e22e695b45fed368cf\"]}},{\"displayName\":\"Get started - Connect\",\"name\":\"aa5f255533c169d47991\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"c563657f6b3f4fc63ea9\",\"sections\":{\"c563657f6b3f4fc63ea9\":{\"visualContainers\":{\"ed31b8c69c8859a6475a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"adad1df4dc74f2f73033\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"e1fcdb07884fc6a3938c\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"af31dcf7a0e5abbb4baa\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"d7a012d33ea2aa4d8f23\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"c272ca337973163d0b4f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"cde5a61c7cf321c024d4\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"8ac8b68f0dbfd67863ea\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"b0b2a35779b57f143666\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a109a5208f1421b7e4de\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"193b16f8c0229af502bc\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4ad879e1bf2d7748e92e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"88f28312a432af922c3e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f92f0508d293dd2ea2a0\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9b6da2430313a11fbe1a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"296a57712be8d891be68\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"67f001709c0207952234\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c1f288a2b56f89b3df0f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4885b748772877408783\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ae3a5001d9fda9800214\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"02272826509e4602660a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"eb91a261b0d37e189734\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2532e26d3bda6232fdaa\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d96fff05c9f42855646e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e449d0a11c83ce7aac32\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"dab8ad25bc9d0906c474\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1c6ae1106e4495e9bee3\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"dba7dfd64abe6112a5e2\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a76a0973476f7531fb0a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d608167b2800cd5f37d9\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"06a7c3e90ed262bccb99\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"c530af517a82efec49f6\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"53b38783373bb0b71040\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"74c29e239e2bf411aa60\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e2cf9ff77352009da63e\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b65b40f83e6aadd2dcb8\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"e69246791224d7feecb3\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"6bc885e678f8471f8b5d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ac8683056a4f6436ab31\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"8e00d79ffc746643c0f6\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}}},\"visualContainerGroups\":{\"330980de6a26f7e92210\":{\"isHidden\":true},\"b0c972248f8169e395aa\":{\"isHidden\":true},\"0ea72185adbf2cf8f4a0\":{\"isHidden\":false},\"d6cdb8ede8cf4893d913\":{\"isHidden\":true},\"e2db4806d2fd5c9d95ea\":{\"isHidden\":true}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[\"0ea72185adbf2cf8f4a0\",\"a76a0973476f7531fb0a\",\"d608167b2800cd5f37d9\",\"06a7c3e90ed262bccb99\",\"c530af517a82efec49f6\"]}},{\"displayName\":\"Get started - Help\",\"name\":\"58ddce0ac819d194c4fc\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"c563657f6b3f4fc63ea9\",\"filters\":{\"byExpr\":[{\"name\":\"71f23e9beb592a377302\",\"type\":\"Categorical\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_CostAllocationRuleName\"}},\"howCreated\":1}]},\"sections\":{\"c563657f6b3f4fc63ea9\":{\"visualContainers\":{\"06a7c3e90ed262bccb99\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"a76a0973476f7531fb0a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"c530af517a82efec49f6\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d608167b2800cd5f37d9\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"8ac8b68f0dbfd67863ea\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"c272ca337973163d0b4f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"cde5a61c7cf321c024d4\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"d7a012d33ea2aa4d8f23\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"adad1df4dc74f2f73033\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"af31dcf7a0e5abbb4baa\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"02272826509e4602660a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"193b16f8c0229af502bc\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1c6ae1106e4495e9bee3\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2532e26d3bda6232fdaa\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"296a57712be8d891be68\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4885b748772877408783\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4ad879e1bf2d7748e92e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"67f001709c0207952234\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"88f28312a432af922c3e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9b6da2430313a11fbe1a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a109a5208f1421b7e4de\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ae3a5001d9fda9800214\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b0b2a35779b57f143666\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c1f288a2b56f89b3df0f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d96fff05c9f42855646e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"dab8ad25bc9d0906c474\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"dba7dfd64abe6112a5e2\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e449d0a11c83ce7aac32\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"eb91a261b0d37e189734\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f92f0508d293dd2ea2a0\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c3a5f0c65dfc5c4b04c2\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"53b38783373bb0b71040\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"74c29e239e2bf411aa60\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b65b40f83e6aadd2dcb8\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"e2cf9ff77352009da63e\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e1fcdb07884fc6a3938c\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"e2a5aa343a32f9d355e9\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"6bc885e678f8471f8b5d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"8e00d79ffc746643c0f6\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ac8683056a4f6436ab31\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e69246791224d7feecb3\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"ed31b8c69c8859a6475a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ecac7d836cc5a75e3dc7\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"eb0ee67d575b54cdf827\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e82905c8e3d2dd647563\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e0fa9dae2344df6f995f\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"f3696b5d0b479208c273\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"16c57f563e98e67b536b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"12be4ee52940709706cd\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f9e22e695b45fed368cf\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}}},\"visualContainerGroups\":{\"0ea72185adbf2cf8f4a0\":{\"isHidden\":true},\"330980de6a26f7e92210\":{\"isHidden\":true},\"b0c972248f8169e395aa\":{\"isHidden\":true},\"d6cdb8ede8cf4893d913\":{\"isHidden\":true},\"e2db4806d2fd5c9d95ea\":{\"isHidden\":true},\"db0699bd090645927783\":{\"isHidden\":false}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[\"f9e22e695b45fed368cf\"]}}],\"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.62\",\"themeCollection\":{\"baseTheme\":{\"name\":\"CY24SU10\",\"version\":\"5.61\",\"type\":2},\"customTheme\":{\"name\":\"Microsoft_FinOps_light_theme5385236195184553.json\",\"version\":\"5.61\",\"type\":1}},\"activeSectionIndex\":0,\"bookmarks\":[{\"displayName\":\"Get started\",\"name\":\"eea9791fb405ba7e2373\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"c563657f6b3f4fc63ea9\",\"filters\":{\"byExpr\":[{\"name\":\"71f23e9beb592a377302\",\"type\":\"Categorical\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_CostAllocationRuleName\"}},\"howCreated\":1}]},\"sections\":{\"c563657f6b3f4fc63ea9\":{\"visualContainers\":{\"06a7c3e90ed262bccb99\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"a76a0973476f7531fb0a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"c530af517a82efec49f6\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d608167b2800cd5f37d9\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"8ac8b68f0dbfd67863ea\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"c272ca337973163d0b4f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"cde5a61c7cf321c024d4\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"d7a012d33ea2aa4d8f23\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"adad1df4dc74f2f73033\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"af31dcf7a0e5abbb4baa\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"02272826509e4602660a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"193b16f8c0229af502bc\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1c6ae1106e4495e9bee3\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2532e26d3bda6232fdaa\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"296a57712be8d891be68\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4885b748772877408783\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4ad879e1bf2d7748e92e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"67f001709c0207952234\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"88f28312a432af922c3e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9b6da2430313a11fbe1a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a109a5208f1421b7e4de\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ae3a5001d9fda9800214\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b0b2a35779b57f143666\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c1f288a2b56f89b3df0f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d96fff05c9f42855646e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"dab8ad25bc9d0906c474\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"dba7dfd64abe6112a5e2\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e449d0a11c83ce7aac32\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"eb91a261b0d37e189734\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f92f0508d293dd2ea2a0\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c3a5f0c65dfc5c4b04c2\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"53b38783373bb0b71040\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"74c29e239e2bf411aa60\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b65b40f83e6aadd2dcb8\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"e2cf9ff77352009da63e\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e1fcdb07884fc6a3938c\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"e2a5aa343a32f9d355e9\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"6bc885e678f8471f8b5d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"8e00d79ffc746643c0f6\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ac8683056a4f6436ab31\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e69246791224d7feecb3\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"ed31b8c69c8859a6475a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ecac7d836cc5a75e3dc7\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"eb0ee67d575b54cdf827\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e82905c8e3d2dd647563\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e0fa9dae2344df6f995f\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"f3696b5d0b479208c273\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"16c57f563e98e67b536b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"12be4ee52940709706cd\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f9e22e695b45fed368cf\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}}},\"visualContainerGroups\":{\"0ea72185adbf2cf8f4a0\":{\"isHidden\":true},\"330980de6a26f7e92210\":{\"isHidden\":false},\"b0c972248f8169e395aa\":{\"isHidden\":true},\"d6cdb8ede8cf4893d913\":{\"isHidden\":false},\"e2db4806d2fd5c9d95ea\":{\"isHidden\":false},\"db0699bd090645927783\":{\"isHidden\":true}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[\"ecac7d836cc5a75e3dc7\",\"db0699bd090645927783\",\"eb0ee67d575b54cdf827\",\"e82905c8e3d2dd647563\",\"e0fa9dae2344df6f995f\",\"f3696b5d0b479208c273\",\"16c57f563e98e67b536b\",\"12be4ee52940709706cd\",\"f9e22e695b45fed368cf\"]}},{\"displayName\":\"Get started - Connect\",\"name\":\"aa5f255533c169d47991\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"c563657f6b3f4fc63ea9\",\"sections\":{\"c563657f6b3f4fc63ea9\":{\"visualContainers\":{\"ed31b8c69c8859a6475a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"adad1df4dc74f2f73033\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"e1fcdb07884fc6a3938c\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"af31dcf7a0e5abbb4baa\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"d7a012d33ea2aa4d8f23\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"c272ca337973163d0b4f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"cde5a61c7cf321c024d4\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"8ac8b68f0dbfd67863ea\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"b0b2a35779b57f143666\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a109a5208f1421b7e4de\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"193b16f8c0229af502bc\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4ad879e1bf2d7748e92e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"88f28312a432af922c3e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f92f0508d293dd2ea2a0\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9b6da2430313a11fbe1a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"296a57712be8d891be68\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"67f001709c0207952234\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c1f288a2b56f89b3df0f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4885b748772877408783\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ae3a5001d9fda9800214\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"02272826509e4602660a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"eb91a261b0d37e189734\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2532e26d3bda6232fdaa\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d96fff05c9f42855646e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e449d0a11c83ce7aac32\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"dab8ad25bc9d0906c474\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1c6ae1106e4495e9bee3\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"dba7dfd64abe6112a5e2\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a76a0973476f7531fb0a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d608167b2800cd5f37d9\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"06a7c3e90ed262bccb99\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"c530af517a82efec49f6\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"53b38783373bb0b71040\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"74c29e239e2bf411aa60\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e2cf9ff77352009da63e\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b65b40f83e6aadd2dcb8\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"e69246791224d7feecb3\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"6bc885e678f8471f8b5d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ac8683056a4f6436ab31\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"8e00d79ffc746643c0f6\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}}},\"visualContainerGroups\":{\"330980de6a26f7e92210\":{\"isHidden\":true},\"b0c972248f8169e395aa\":{\"isHidden\":true},\"0ea72185adbf2cf8f4a0\":{\"isHidden\":false},\"d6cdb8ede8cf4893d913\":{\"isHidden\":true},\"e2db4806d2fd5c9d95ea\":{\"isHidden\":true}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[\"0ea72185adbf2cf8f4a0\",\"a76a0973476f7531fb0a\",\"d608167b2800cd5f37d9\",\"06a7c3e90ed262bccb99\",\"c530af517a82efec49f6\"]}},{\"displayName\":\"Get started - Help\",\"name\":\"58ddce0ac819d194c4fc\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"c563657f6b3f4fc63ea9\",\"filters\":{\"byExpr\":[{\"name\":\"71f23e9beb592a377302\",\"type\":\"Categorical\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_CostAllocationRuleName\"}},\"howCreated\":1}]},\"sections\":{\"c563657f6b3f4fc63ea9\":{\"visualContainers\":{\"06a7c3e90ed262bccb99\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"a76a0973476f7531fb0a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"c530af517a82efec49f6\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d608167b2800cd5f37d9\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"8ac8b68f0dbfd67863ea\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"c272ca337973163d0b4f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"cde5a61c7cf321c024d4\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"d7a012d33ea2aa4d8f23\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"adad1df4dc74f2f73033\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"af31dcf7a0e5abbb4baa\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"02272826509e4602660a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"193b16f8c0229af502bc\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1c6ae1106e4495e9bee3\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2532e26d3bda6232fdaa\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"296a57712be8d891be68\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4885b748772877408783\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4ad879e1bf2d7748e92e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"67f001709c0207952234\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"88f28312a432af922c3e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9b6da2430313a11fbe1a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a109a5208f1421b7e4de\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ae3a5001d9fda9800214\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b0b2a35779b57f143666\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c1f288a2b56f89b3df0f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d96fff05c9f42855646e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"dab8ad25bc9d0906c474\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"dba7dfd64abe6112a5e2\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e449d0a11c83ce7aac32\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"eb91a261b0d37e189734\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f92f0508d293dd2ea2a0\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c3a5f0c65dfc5c4b04c2\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"53b38783373bb0b71040\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"74c29e239e2bf411aa60\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b65b40f83e6aadd2dcb8\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"e2cf9ff77352009da63e\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e1fcdb07884fc6a3938c\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"e2a5aa343a32f9d355e9\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"6bc885e678f8471f8b5d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"8e00d79ffc746643c0f6\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ac8683056a4f6436ab31\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e69246791224d7feecb3\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"ed31b8c69c8859a6475a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ecac7d836cc5a75e3dc7\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"eb0ee67d575b54cdf827\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e82905c8e3d2dd647563\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e0fa9dae2344df6f995f\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"f3696b5d0b479208c273\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"16c57f563e98e67b536b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"12be4ee52940709706cd\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f9e22e695b45fed368cf\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}}},\"visualContainerGroups\":{\"0ea72185adbf2cf8f4a0\":{\"isHidden\":true},\"330980de6a26f7e92210\":{\"isHidden\":true},\"b0c972248f8169e395aa\":{\"isHidden\":true},\"d6cdb8ede8cf4893d913\":{\"isHidden\":true},\"e2db4806d2fd5c9d95ea\":{\"isHidden\":true},\"db0699bd090645927783\":{\"isHidden\":false}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[\"f9e22e695b45fed368cf\"]}}],\"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\"}}}}}]}}", "filters": "[{\"name\":\"71f23e9beb592a377302\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_CostAllocationRuleName\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{}}]}}]", "layoutOptimization": 0, "pods": [ @@ -116,3998 +116,3998 @@ "displayName": "Tags example", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "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.CostSummary/featureName/Storage.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.CostSummary/featureName/Storage.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.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, + "height": 704.00, "width": 1048.09, - "x": 216.0, + "x": 216.00, "y": 7.52, - "z": 0.0 + "z": 0.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "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.0, - "width": 280.0, - "x": 696.0, - "y": 8.0, - "z": 3000.0 + "height": 376.00, + "width": 280.00, + "x": 696.00, + "y": 8.00, + "z": 3000.00 }, { "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.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "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.0, - "width": 472.0, - "x": 216.0, - "y": 392.0, - "z": 6000.0 + "height": 320.00, + "width": 472.00, + "x": 216.00, + "y": 392.00, + "z": 6000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "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.0, - "width": 472.0, - "x": 216.0, - "y": 8.0, - "z": 4000.0 + "height": 376.00, + "width": 472.00, + "x": 216.00, + "y": 8.00, + "z": 4000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "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.0, - "width": 280.0, - "x": 984.0, - "y": 8.0, - "z": 2000.0 + "height": 376.00, + "width": 280.00, + "x": 984.00, + "y": 8.00, + "z": 2000.00 }, { "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.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "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.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 568.0, - "x": 696.0, - "y": 392.0, - "z": 5000.0 + "height": 320.00, + "width": 568.00, + "x": 696.00, + "y": 392.00, + "z": 5000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "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.0, + "height": 720.00, "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.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 4000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 5500.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 5500.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "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.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { - "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.CostSummary/featureName/KQL.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.CostSummary/featureName/KQL.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.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 5000.00 }, { "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.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "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.0, + "height": 704.00, "width": 1048.09, - "x": 216.0, - "y": 8.0, - "z": 1000.0 + "x": 216.00, + "y": 8.00, + "z": 1000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "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.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "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.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "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.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 6000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 6000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{\"objects\":{\"outspacePane\":[{\"properties\":{\"width\":{\"expr\":{\"Literal\":{\"Value\":\"204L\"}}}}}]}}", "displayName": "Regions", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "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.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "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.0, + "height": 704.00, "width": 1048.09, - "x": 216.0, + "x": 216.00, "y": 7.52, - "z": 1000.0 + "z": 1000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 5000.00 }, { "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.0, - "width": 472.0, - "x": 792.0, - "y": 8.0, - "z": 3000.0 + "height": 704.00, + "width": 472.00, + "x": 792.00, + "y": 8.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 6000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 6000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "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.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "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.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { - "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.CostSummary/featureName/KQL.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.CostSummary/featureName/KQL.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.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "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.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 7000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 7000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "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.0, - "width": 568.0, - "x": 216.0, - "y": 104.0, - "z": 4000.0 + "height": 280.00, + "width": 568.00, + "x": 216.00, + "y": 104.00, + "z": 4000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "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.0, - "width": 568.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 320.00, + "width": 568.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "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.0, + "height": 720.00, "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "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.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 2000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { - "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.CostSummary/featureName/KQL.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.CostSummary/featureName/KQL.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.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "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.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 3250.0 + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 3250.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "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.0, + "height": 704.00, "width": 1048.09, "x": 216.84, "y": 8.09, - "z": 3000.0 + "z": 3000.00 }, { "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.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3500.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 3500.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 4000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "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.0, + "height": 720.00, "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 280.0, - "x": 984.0, - "y": 104.0, - "z": 2000.0 + "height": 608.00, + "width": 280.00, + "x": 984.00, + "y": 104.00, + "z": 2000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, + "height": 704.00, "width": 1048.09, - "x": 216.0, + "x": 216.00, "y": 7.52, - "z": 1000.0 + "z": 1000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 4000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "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.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "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.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 760.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 608.00, + "width": 760.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "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.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { - "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.CostSummary/featureName/KQL.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.CostSummary/featureName/KQL.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.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 5000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{\"visibility\":1}", "displayName": "DQ", "displayOption": 2, "filters": "[]", - "height": 2720.0, + "height": 2720.00, "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.0, - "width": 1264.0, - "x": 8.0, + "height": 272.00, + "width": 1264.00, + "x": 8.00, "y": 903.94, - "z": 13000.0 + "z": 13000.00 }, { "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.0, - "width": 1264.0, - "x": 8.0, + "height": 272.00, + "width": 1264.00, + "x": 8.00, "y": 623.94, - "z": 6000.0 + "z": 6000.00 }, { "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.0, - "width": 256.0, - "x": 0.0, + "height": 152.00, + "width": 256.00, + "x": 0.00, "y": 287.16, - "z": 1000.0 + "z": 1000.00 }, { "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.0, - "width": 256.0, - "x": 0.0, + "height": 112.00, + "width": 256.00, + "x": 0.00, "y": 175.16, - "z": 0.0 + "z": 0.00 }, { "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.0, - "width": 256.0, - "x": 0.0, + "height": 88.00, + "width": 256.00, + "x": 0.00, "y": 439.16, - "z": 8000.0 + "z": 8000.00 }, { "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.0, - "width": 1280.0, - "x": 0.0, + "height": 80.00, + "width": 1280.00, + "x": 0.00, "y": 535.94, - "z": 12000.0 + "z": 12000.00 }, { "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.0, - "width": 1280.0, - "x": 0.0, + "height": 80.00, + "width": 1280.00, + "x": 0.00, "y": 1191.94, - "z": 11000.0 + "z": 11000.00 }, { "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.0, - "width": 360.0, - "x": 16.0, + "height": 200.00, + "width": 360.00, + "x": 16.00, "y": 1287.94, - "z": 9000.0 + "z": 9000.00 }, { "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.0, - "width": 1280.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 48.00, + "width": 1280.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 256.0, - "x": 768.0, + "height": 352.00, + "width": 256.00, + "x": 768.00, "y": 175.16, - "z": 2000.0 + "z": 2000.00 }, { "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.0, - "width": 256.0, - "x": 256.0, + "height": 352.00, + "width": 256.00, + "x": 256.00, "y": 175.16, - "z": 3000.0 + "z": 3000.00 }, { "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.0, - "width": 1280.0, - "x": 0.0, - "y": 48.0, - "z": 10000.0 + "height": 112.00, + "width": 1280.00, + "x": 0.00, + "y": 48.00, + "z": 10000.00 }, { "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.0, - "width": 256.0, - "x": 1024.0, + "height": 88.00, + "width": 256.00, + "x": 1024.00, "y": 175.16, - "z": 5000.0 + "z": 5000.00 }, { "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.0, - "width": 1264.0, - "x": 8.0, - "y": 2128.0, - "z": 19000.0 + "height": 216.00, + "width": 1264.00, + "x": 8.00, + "y": 2128.00, + "z": 19000.00 }, { "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.0, - "width": 632.0, - "x": 376.0, + "height": 200.00, + "width": 632.00, + "x": 376.00, "y": 1287.94, - "z": 14000.0 + "z": 14000.00 }, { "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.0, - "width": 1264.0, - "x": 8.0, - "y": 1624.0, - "z": 16000.0 + "height": 496.00, + "width": 1264.00, + "x": 8.00, + "y": 1624.00, + "z": 16000.00 }, { "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.0, - "width": 1280.0, - "x": 0.0, - "y": 2360.0, - "z": 18000.0 + "height": 128.00, + "width": 1280.00, + "x": 0.00, + "y": 2360.00, + "z": 18000.00 }, { "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.0, - "width": 1264.0, - "x": 8.0, - "y": 2496.0, - "z": 17000.0 + "height": 216.00, + "width": 1264.00, + "x": 8.00, + "y": 2496.00, + "z": 17000.00 }, { "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.0, - "width": 1280.0, - "x": 0.0, - "y": 1504.0, - "z": 15000.0 + "height": 112.00, + "width": 1280.00, + "x": 0.00, + "y": 1504.00, + "z": 15000.00 }, { "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.0, - "width": 256.0, - "x": 512.0, + "height": 352.00, + "width": 256.00, + "x": 512.00, "y": 175.16, - "z": 7000.0 + "z": 7000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "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.0, + "height": 720.00, "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.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 184.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "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.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { - "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.CostSummary/featureName/KQL.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.CostSummary/featureName/KQL.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.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "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.0, + "height": 704.00, "width": 1048.09, - "x": 216.0, + "x": 216.00, "y": 7.52, - "z": 1000.0 + "z": 1000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 296.0, - "z": 2000.0 + "height": 416.00, + "width": 1048.00, + "x": 216.00, + "y": 296.00, + "z": 2000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 4000.00 }, { "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.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 6000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 6000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 5500.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 5500.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 5000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "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.0, + "height": 720.00, "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.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "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.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "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.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 9000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 9000.00 }, { "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.0, - "width": 184.0, + "height": 88.00, + "width": 184.00, "x": 982.53, - "y": 8.0, - "z": 5000.0 + "y": 8.00, + "z": 5000.00 }, { "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.0, + "height": 704.00, "width": 1048.09, - "x": 216.0, + "x": 216.00, "y": 7.52, - "z": 1000.0 + "z": 1000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 8000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 8000.00 }, { "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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 7000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 7000.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 4000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 4000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "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.0, - "width": 472.0, - "x": 792.0, - "y": 392.0, - "z": 3000.0 + "height": 320.00, + "width": 472.00, + "x": 792.00, + "y": 392.00, + "z": 3000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "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.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 184.0, + "height": 88.00, + "width": 184.00, "x": 790.53, - "y": 8.0, - "z": 6000.0 + "y": 8.00, + "z": 6000.00 }, { "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.0, - "width": 568.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 320.00, + "width": 568.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "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.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { - "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.CostSummary/featureName/KQL.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.CostSummary/featureName/KQL.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.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Summary", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "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.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 2500.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 2500.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 1750.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 1750.00 }, { "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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 5000.00 }, { "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.0, + "height": 704.00, "width": 1048.09, - "x": 216.0, - "y": 8.0, - "z": 1000.0 + "x": 216.00, + "y": 8.00, + "z": 1000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "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.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 2000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 6000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 6000.00 }, { - "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.CostSummary/featureName/KQL.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.CostSummary/featureName/KQL.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.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 1500.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 1500.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 4000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { "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.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 1937.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 1937.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "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.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Services", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "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.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 6000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 6000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 4000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "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.0, + "height": 704.00, "width": 1048.09, - "x": 216.0, - "y": 8.0, - "z": 1000.0 + "x": 216.00, + "y": 8.00, + "z": 1000.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 5000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "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.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "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.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { - "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.CostSummary/featureName/KQL.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.CostSummary/featureName/KQL.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.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Charge breakdown", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "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.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "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.0, + "height": 704.00, "width": 1048.09, - "x": 216.0, - "y": 8.0, - "z": 5000.0 + "x": 216.00, + "y": 8.00, + "z": 5000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { - "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.CostSummary/featureName/KQL.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.CostSummary/featureName/KQL.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.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 4000.00 }, { "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.0, - "width": 184.0, - "x": 216.0, - "y": 104.0, - "z": 6000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 104.00, + "z": 6000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "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.0, - "width": 376.0, - "x": 504.0, - "y": 8.0, - "z": 3000.0 + "height": 184.00, + "width": 376.00, + "x": 504.00, + "y": 8.00, + "z": 3000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "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.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 376.0, - "x": 888.0, - "y": 8.0, - "z": 2000.0 + "height": 184.00, + "width": 376.00, + "x": 888.00, + "y": 8.00, + "z": 2000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 200.0, - "z": 1000.0 + "height": 512.00, + "width": 1048.00, + "x": 216.00, + "y": 200.00, + "z": 1000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "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.0, + "height": 720.00, "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.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "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.0, + "height": 704.00, "width": 1048.09, - "x": 216.0, + "x": 216.00, "y": 7.52, - "z": 1000.0 + "z": 1000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "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.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { "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.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 7000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 7000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 5000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 184.0, - "x": 1080.0, - "y": 8.0, - "z": 6000.0 + "height": 88.00, + "width": 184.00, + "x": 1080.00, + "y": 8.00, + "z": 6000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { - "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.CostSummary/featureName/KQL.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.CostSummary/featureName/KQL.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.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "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.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "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.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 4000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Get started", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "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.0, - "width": 80.0, - "x": 384.0, - "y": 0.0, - "z": 8000.0 + "height": 696.00, + "width": 80.00, + "x": 384.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 776.0, - "x": 40.0, - "y": 96.0, - "z": 1000.0 + "height": 424.00, + "width": 776.00, + "x": 40.00, + "y": 96.00, + "z": 1000.00 }, { "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.0 + "z": 11000.00 }, { "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.0, - "y": 0.0, - "z": 0.0 + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 96.0, + "height": 32.00, + "width": 96.00, "x": 241.13, - "y": 488.0, - "z": 125.0 + "y": 488.00, + "z": 125.00 }, { "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.0, - "width": 80.0, - "x": 864.0, - "y": 0.0, - "z": 3000.0 + "height": 696.00, + "width": 80.00, + "x": 864.00, + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 80.0, - "x": 768.0, - "y": 0.0, - "z": 4000.0 + "height": 696.00, + "width": 80.00, + "x": 768.00, + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 1232.0, - "x": 0.0, - "y": 0.0, - "z": 19000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 0.00, + "z": 19000.00 }, { "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.0, - "width": 80.0, - "x": 96.0, - "y": 0.0, - "z": 11000.0 + "height": 696.00, + "width": 80.00, + "x": 96.00, + "y": 0.00, + "z": 11000.00 }, { "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.0, - "width": 272.0, - "x": 504.0, - "y": 304.0, - "z": 6000.0 + "height": 368.00, + "width": 272.00, + "x": 504.00, + "y": 304.00, + "z": 6000.00 }, { "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.0, - "width": 80.0, - "x": 0.0, - "y": 0.0, - "z": 12000.0 + "height": 696.00, + "width": 80.00, + "x": 0.00, + "y": 0.00, + "z": 12000.00 }, { "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.0, - "width": 80.0, - "x": 288.0, - "y": 0.0, - "z": 9000.0 + "height": 696.00, + "width": 80.00, + "x": 288.00, + "y": 0.00, + "z": 9000.00 }, { "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.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 3000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 80.0, - "x": 672.0, - "y": 0.0, - "z": 5000.0 + "height": 696.00, + "width": 80.00, + "x": 672.00, + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 2000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 2000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 1232.0, - "x": 0.0, - "y": 288.0, - "z": 16000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 288.00, + "z": 16000.00 }, { "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.0, - "width": 248.0, - "x": 0.0, - "y": 192.0, - "z": 0.0 + "height": 176.00, + "width": 248.00, + "x": 0.00, + "y": 192.00, + "z": 0.00 }, { "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.0, - "width": 272.0, - "x": 0.0, - "y": 192.0, - "z": 0.0 + "height": 96.00, + "width": 272.00, + "x": 0.00, + "y": 192.00, + "z": 0.00 }, { "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.0, - "width": 80.0, - "x": 192.0, - "y": 0.0, - "z": 10000.0 + "height": 696.00, + "width": 80.00, + "x": 192.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, - "width": 80.0, - "x": 480.0, - "y": 0.0, - "z": 7000.0 + "height": 696.00, + "width": 80.00, + "x": 480.00, + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 736.0, - "x": 40.0, - "y": 40.0, - "z": 3000.0 + "height": 48.00, + "width": 736.00, + "x": 40.00, + "y": 40.00, + "z": 3000.00 }, { "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.0, - "width": 152.0, - "x": 0.0, - "y": 288.0, - "z": 1000.0 + "height": 24.00, + "width": 152.00, + "x": 0.00, + "y": 288.00, + "z": 1000.00 }, { "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.0, - "width": 848.0, - "x": 216.0, - "y": 112.0, - "z": 8000.0 + "height": 176.00, + "width": 848.00, + "x": 216.00, + "y": 112.00, + "z": 8000.00 }, { "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.0, - "width": 1232.0, - "x": 0.0, - "y": 576.0, - "z": 13000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 576.00, + "z": 13000.00 }, { - "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.CostSummary/featureName/KQL.GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.CostSummary/featureName/KQL.GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 112.0, - "x": 1160.0, - "y": 688.0, - "z": 1000.0 + "height": 32.00, + "width": 112.00, + "x": 1160.00, + "y": 688.00, + "z": 1000.00 }, { "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.0, - "width": 80.0, - "x": 576.0, - "y": 0.0, - "z": 6000.0 + "height": 696.00, + "width": 80.00, + "x": 576.00, + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 1232.0, - "x": 24.0, - "y": 16.0, - "z": 0.0 + "height": 696.00, + "width": 1232.00, + "x": 24.00, + "y": 16.00, + "z": 0.00 }, { "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.0, - "width": 256.0, + "height": 176.00, + "width": 256.00, "x": 0.04, - "y": 192.0, - "z": 0.0 + "y": 192.00, + "z": 0.00 }, { "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.0, - "width": 1232.0, - "x": 0.0, - "y": 384.0, - "z": 15000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 384.00, + "z": 15000.00 }, { "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.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 2000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 }, { - "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\"}}}}}]}}}", + "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\":\"$$ftkver$$ · $$build-date$$ · 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.0, - "width": 240.0, - "x": 104.0, - "y": 688.0, - "z": 3000.0 + "height": 32.00, + "width": 240.00, + "x": 104.00, + "y": 688.00, + "z": 3000.00 }, { "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.0, - "y": 0.0, - "z": 0.0 + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 160.0, - "x": 0.0, - "y": 288.0, - "z": 1000.0 + "height": 24.00, + "width": 160.00, + "x": 0.00, + "y": 288.00, + "z": 1000.00 }, { "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.0, - "width": 32.0, - "x": 784.0, - "y": 48.0, - "z": 2000.0 + "height": 32.00, + "width": 32.00, + "x": 784.00, + "y": 48.00, + "z": 2000.00 }, { "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.0, - "width": 272.0, - "x": 216.0, - "y": 304.0, - "z": 7000.0 + "height": 368.00, + "width": 272.00, + "x": 216.00, + "y": 304.00, + "z": 7000.00 }, { "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.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 3000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 80.0, - "x": 1056.0, - "y": 0.0, - "z": 1000.0 + "height": 696.00, + "width": 80.00, + "x": 1056.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 80.0, - "x": 960.0, - "y": 0.0, - "z": 2000.0 + "height": 696.00, + "width": 80.00, + "x": 960.00, + "y": 0.00, + "z": 2000.00 }, { "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.0, - "z": 12000.0 + "y": 112.00, + "z": 12000.00 }, { "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.0, - "width": 80.0, - "x": 1152.0, - "y": 0.0, - "z": 0.0 + "height": 696.00, + "width": 80.00, + "x": 1152.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 776.0, - "x": 40.0, - "y": 96.0, - "z": 1000.0 + "height": 384.00, + "width": 776.00, + "x": 40.00, + "y": 96.00, + "z": 1000.00 }, { "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.5, + "width": 852.50, "x": 211.67, "y": 24.17, - "z": 9000.0 + "z": 9000.00 }, { "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.0, - "width": 96.0, - "x": 8.0, - "y": 688.0, - "z": 4000.0 + "height": 32.00, + "width": 96.00, + "x": 8.00, + "y": 688.00, + "z": 4000.00 }, { "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.0, - "width": 144.0, + "height": 24.00, + "width": 144.00, "x": 0.22, - "y": 288.0, - "z": 1000.0 + "y": 288.00, + "z": 1000.00 }, { "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.0, - "width": 272.0, - "x": 792.0, - "y": 304.0, - "z": 5000.0 + "height": 312.00, + "width": 272.00, + "x": 792.00, + "y": 304.00, + "z": 5000.00 }, { "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.0, - "width": 1232.0, - "x": 0.0, - "y": 480.0, - "z": 14000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 480.00, + "z": 14000.00 }, { "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.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 3000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 3000.00 }, { - "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\"}", + "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/FTK$$ftkver$$'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Clear filters'\"}}}}}]}},\"parentGroupName\":\"db0699bd090645927783\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 88.0, + "height": 32.00, + "width": 88.00, "x": 41.13, - "y": 488.0, - "z": 500.0 + "y": 488.00, + "z": 500.00 }, { "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.0, - "width": 96.0, + "height": 32.00, + "width": 96.00, "x": 137.13, - "y": 488.0, - "z": 250.0 + "y": 488.00, + "z": 250.00 }, { "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.0, - "width": 1232.0, - "x": 0.0, - "y": 96.0, - "z": 18000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 96.00, + "z": 18000.00 }, { - "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\"}", + "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/FTK$$ftkver$$'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'58ddce0ac819d194c4fc'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 88.0, - "x": 1064.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 88.00, + "x": 1064.00, + "y": 688.00, + "z": 2000.00 }, { "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.0 + "z": 10000.00 }, { "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.0, - "width": 736.0, - "x": 40.0, - "y": 40.0, - "z": 3000.0 + "height": 48.00, + "width": 736.00, + "x": 40.00, + "y": 40.00, + "z": 3000.00 }, { "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.0, - "width": 1232.0, - "x": 0.0, - "y": 192.0, - "z": 17000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 192.00, + "z": 17000.00 }, { "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.0, - "width": 32.0, - "x": 784.0, - "y": 48.0, - "z": 2000.0 + "height": 32.00, + "width": 32.00, + "x": 784.00, + "y": 48.00, + "z": 2000.00 } ], - "width": 1280.0 + "width": 1280.00 } ], "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 c6c879822..7b3d9e994 100644 --- a/src/power-bi/kql/DataIngestion.Report/report.json +++ b/src/power-bi/kql/DataIngestion.Report/report.json @@ -291,7 +291,7 @@ "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.DataIngestion/featureName/KQL.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.DataIngestion/featureName/KQL.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.0, "width": 192.0, @@ -756,7 +756,7 @@ "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-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\"}}}}}]}}}", + "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\":\"$$ftkver$$ · $$build-date$$ · 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.0, "width": 240.0, @@ -872,7 +872,7 @@ "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.DataIngestion/featureName/KQL.GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.DataIngestion/featureName/KQL.GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", "height": 32.0, "width": 112.0, @@ -890,7 +890,7 @@ "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.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\"}", + "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/FTK$$ftkver$$'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Clear filters'\"}}}}}]}},\"parentGroupName\":\"f3f1baeac787248b3885\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", "height": 32.0, "width": 88.0, @@ -934,7 +934,7 @@ "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.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\"}", + "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/FTK$$ftkver$$'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'abcb7d23f1555cec5afc'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", "height": 32.0, "width": 88.0, @@ -1186,7 +1186,7 @@ "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.DataIngestion/featureName/KQL.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.DataIngestion/featureName/KQL.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.0, "width": 192.0, @@ -1404,7 +1404,7 @@ "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.DataIngestion/featureName/KQL.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.DataIngestion/featureName/KQL.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.0, "width": 192.0, @@ -1647,7 +1647,7 @@ "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.DataIngestion/featureName/KQL.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.DataIngestion/featureName/KQL.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.0, "width": 192.0, diff --git a/src/power-bi/kql/Governance.Report/definition.pbir b/src/power-bi/kql/Governance.Report/definition.pbir index 8bef10659..b64ddb71d 100644 --- a/src/power-bi/kql/Governance.Report/definition.pbir +++ b/src/power-bi/kql/Governance.Report/definition.pbir @@ -3,7 +3,6 @@ "datasetReference": { "byPath": { "path": "../Shared.Dataset" - }, - "byConnection": null + } } } \ 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 e3f43a9f4..58940ad62 100644 --- a/src/power-bi/kql/Governance.Report/report.json +++ b/src/power-bi/kql/Governance.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_theme9191587775659291.json\",\"version\":\"5.61\",\"type\":1}},\"activeSectionIndex\":0,\"bookmarks\":[{\"displayName\":\"Get started\",\"name\":\"f123af631db0926b70d8\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"d441a327009c09056946\",\"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\":{\"d441a327009c09056946\":{\"visualContainers\":{\"51f2efb01c13bb8be797\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"fb9db2d3611de3a9c34e\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b54165fc12a7486e807a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ee7b5fb1edc97c406608\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"faaddc4d5628b7995a00\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b97a63a409cc8bc34280\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"278b621b26a043871160\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d5b951ef0082a0d0800e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f6264e20b3d70d60ec19\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e2423480c030ece800e5\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"49536c8e852ba200e501\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"74dd97908470e43560ad\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"fe67129b070ce001cbd7\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"628b76e09c2214073606\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"568fdff441c79b30475c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f58aa4b9e38b97083d91\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"3c47ae69ab0354c8712e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ad331a601b3e8d054697\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e9bc2f6170c7d5aa2dcb\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"055a49678007b7d80381\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"3f9a9ee54a9c929dc300\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d1ccf0b6c3120083d24d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"7301348c20b142d12e94\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a2e9850a74c780b87150\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4f5c068460d3093ae914\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"364f2faa20e60c91c4e4\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"6ad151e37ce58bd82659\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b16f550ec4612167a362\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9617beaa05b3869e05b1\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"2d7035cfdd74256990a5\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"b5e2a08550006ba236e7\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"1732106a7581763312e9\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"82bb9a450a42c15e449e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"da1db1f50309eed03ed6\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"4b012d79a8176c8c700d\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"49aa4b7a2a0e20607ee8\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"4f7b6e77ca55e0c45ce6\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"8285d02086a4973b836b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"f258fd6e98ecb780ec0d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"70cf1cb9eea96cad705c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"a5298c9a08840bd85bb9\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"1aefa6ee4d822063a946\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"2c0ffdfd6ae951dbac0c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"457112847371062198e9\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"8c0ce9dd051c3b1ced32\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"74c6957e1407b5c67de5\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"78c1190d026b4bca35d0\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d45bd786a84be71bb99c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"82a571f908d008127558\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"59a8d7aedd0e90ad01c8\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}}},\"visualContainerGroups\":{\"5f0e9d00129dcc8c0313\":{\"isHidden\":true},\"2766c21f0981b5ca2c82\":{\"isHidden\":false},\"01e0cec03d320a55b8bd\":{\"isHidden\":true},\"bd20f397dad01cce9252\":{\"isHidden\":false},\"12953d15ddcdaed0b00c\":{\"isHidden\":false},\"1d8ffddc00065372bd70\":{\"isHidden\":true}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[\"d45bd786a84be71bb99c\"]}},{\"displayName\":\"Get started - Connect\",\"name\":\"348361728449c47260db\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"d441a327009c09056946\",\"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\":{\"d441a327009c09056946\":{\"visualContainers\":{\"51f2efb01c13bb8be797\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"fb9db2d3611de3a9c34e\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b54165fc12a7486e807a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ee7b5fb1edc97c406608\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"faaddc4d5628b7995a00\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b97a63a409cc8bc34280\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"278b621b26a043871160\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d5b951ef0082a0d0800e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f6264e20b3d70d60ec19\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e2423480c030ece800e5\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"49536c8e852ba200e501\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"74dd97908470e43560ad\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"fe67129b070ce001cbd7\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"628b76e09c2214073606\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"568fdff441c79b30475c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f58aa4b9e38b97083d91\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"3c47ae69ab0354c8712e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ad331a601b3e8d054697\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e9bc2f6170c7d5aa2dcb\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"055a49678007b7d80381\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"3f9a9ee54a9c929dc300\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d1ccf0b6c3120083d24d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"7301348c20b142d12e94\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a2e9850a74c780b87150\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4f5c068460d3093ae914\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"364f2faa20e60c91c4e4\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"6ad151e37ce58bd82659\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b16f550ec4612167a362\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9617beaa05b3869e05b1\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"2d7035cfdd74256990a5\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"b5e2a08550006ba236e7\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"1732106a7581763312e9\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"82bb9a450a42c15e449e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"da1db1f50309eed03ed6\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"4b012d79a8176c8c700d\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"49aa4b7a2a0e20607ee8\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"4f7b6e77ca55e0c45ce6\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"8285d02086a4973b836b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"f258fd6e98ecb780ec0d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"70cf1cb9eea96cad705c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"a5298c9a08840bd85bb9\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"1aefa6ee4d822063a946\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"2c0ffdfd6ae951dbac0c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"457112847371062198e9\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"8c0ce9dd051c3b1ced32\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"74c6957e1407b5c67de5\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"78c1190d026b4bca35d0\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d45bd786a84be71bb99c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"82a571f908d008127558\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"59a8d7aedd0e90ad01c8\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}}},\"visualContainerGroups\":{\"5f0e9d00129dcc8c0313\":{\"isHidden\":true},\"2766c21f0981b5ca2c82\":{\"isHidden\":true},\"01e0cec03d320a55b8bd\":{\"isHidden\":false},\"bd20f397dad01cce9252\":{\"isHidden\":true},\"12953d15ddcdaed0b00c\":{\"isHidden\":true},\"1d8ffddc00065372bd70\":{\"isHidden\":true}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[\"8285d02086a4973b836b\"]}},{\"displayName\":\"Get started - Help\",\"name\":\"8d23999e8d1041a0850b\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"d441a327009c09056946\",\"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\":{\"d441a327009c09056946\":{\"visualContainers\":{\"51f2efb01c13bb8be797\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"fb9db2d3611de3a9c34e\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b54165fc12a7486e807a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ee7b5fb1edc97c406608\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"faaddc4d5628b7995a00\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b97a63a409cc8bc34280\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"278b621b26a043871160\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d5b951ef0082a0d0800e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f6264e20b3d70d60ec19\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e2423480c030ece800e5\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"49536c8e852ba200e501\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"74dd97908470e43560ad\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"fe67129b070ce001cbd7\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"628b76e09c2214073606\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"568fdff441c79b30475c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f58aa4b9e38b97083d91\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"3c47ae69ab0354c8712e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ad331a601b3e8d054697\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e9bc2f6170c7d5aa2dcb\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"055a49678007b7d80381\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"3f9a9ee54a9c929dc300\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d1ccf0b6c3120083d24d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"7301348c20b142d12e94\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a2e9850a74c780b87150\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4f5c068460d3093ae914\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"364f2faa20e60c91c4e4\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"6ad151e37ce58bd82659\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b16f550ec4612167a362\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9617beaa05b3869e05b1\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"2d7035cfdd74256990a5\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"b5e2a08550006ba236e7\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"1732106a7581763312e9\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"82bb9a450a42c15e449e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"da1db1f50309eed03ed6\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"4b012d79a8176c8c700d\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"49aa4b7a2a0e20607ee8\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"4f7b6e77ca55e0c45ce6\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"8285d02086a4973b836b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"f258fd6e98ecb780ec0d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"70cf1cb9eea96cad705c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"a5298c9a08840bd85bb9\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"1aefa6ee4d822063a946\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"2c0ffdfd6ae951dbac0c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"457112847371062198e9\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"8c0ce9dd051c3b1ced32\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"74c6957e1407b5c67de5\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"78c1190d026b4bca35d0\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d45bd786a84be71bb99c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"82a571f908d008127558\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"59a8d7aedd0e90ad01c8\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}}},\"visualContainerGroups\":{\"5f0e9d00129dcc8c0313\":{\"isHidden\":true},\"2766c21f0981b5ca2c82\":{\"isHidden\":true},\"01e0cec03d320a55b8bd\":{\"isHidden\":true},\"bd20f397dad01cce9252\":{\"isHidden\":true},\"12953d15ddcdaed0b00c\":{\"isHidden\":true},\"1d8ffddc00065372bd70\":{\"isHidden\":false}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[\"4b012d79a8176c8c700d\"]}}],\"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.62\",\"themeCollection\":{\"baseTheme\":{\"name\":\"CY19SU06\",\"version\":\"5.5\",\"type\":2},\"customTheme\":{\"name\":\"Microsoft_FinOps_light_theme9191587775659291.json\",\"version\":\"5.61\",\"type\":1}},\"activeSectionIndex\":0,\"bookmarks\":[{\"displayName\":\"Get started\",\"name\":\"f123af631db0926b70d8\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"d441a327009c09056946\",\"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\":{\"d441a327009c09056946\":{\"visualContainers\":{\"51f2efb01c13bb8be797\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"fb9db2d3611de3a9c34e\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b54165fc12a7486e807a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ee7b5fb1edc97c406608\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"faaddc4d5628b7995a00\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b97a63a409cc8bc34280\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"278b621b26a043871160\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d5b951ef0082a0d0800e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f6264e20b3d70d60ec19\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e2423480c030ece800e5\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"49536c8e852ba200e501\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"74dd97908470e43560ad\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"fe67129b070ce001cbd7\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"628b76e09c2214073606\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"568fdff441c79b30475c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f58aa4b9e38b97083d91\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"3c47ae69ab0354c8712e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ad331a601b3e8d054697\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e9bc2f6170c7d5aa2dcb\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"055a49678007b7d80381\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"3f9a9ee54a9c929dc300\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d1ccf0b6c3120083d24d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"7301348c20b142d12e94\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a2e9850a74c780b87150\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4f5c068460d3093ae914\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"364f2faa20e60c91c4e4\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"6ad151e37ce58bd82659\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b16f550ec4612167a362\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9617beaa05b3869e05b1\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"2d7035cfdd74256990a5\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"b5e2a08550006ba236e7\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"1732106a7581763312e9\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"82bb9a450a42c15e449e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"da1db1f50309eed03ed6\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"4b012d79a8176c8c700d\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"49aa4b7a2a0e20607ee8\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"4f7b6e77ca55e0c45ce6\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"8285d02086a4973b836b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"f258fd6e98ecb780ec0d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"70cf1cb9eea96cad705c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"a5298c9a08840bd85bb9\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"1aefa6ee4d822063a946\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"2c0ffdfd6ae951dbac0c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"457112847371062198e9\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"8c0ce9dd051c3b1ced32\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"74c6957e1407b5c67de5\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"78c1190d026b4bca35d0\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d45bd786a84be71bb99c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"82a571f908d008127558\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"59a8d7aedd0e90ad01c8\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}}},\"visualContainerGroups\":{\"5f0e9d00129dcc8c0313\":{\"isHidden\":true},\"2766c21f0981b5ca2c82\":{\"isHidden\":false},\"01e0cec03d320a55b8bd\":{\"isHidden\":true},\"bd20f397dad01cce9252\":{\"isHidden\":false},\"12953d15ddcdaed0b00c\":{\"isHidden\":false},\"1d8ffddc00065372bd70\":{\"isHidden\":true}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[\"d45bd786a84be71bb99c\"]}},{\"displayName\":\"Get started - Connect\",\"name\":\"348361728449c47260db\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"d441a327009c09056946\",\"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\":{\"d441a327009c09056946\":{\"visualContainers\":{\"51f2efb01c13bb8be797\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"fb9db2d3611de3a9c34e\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b54165fc12a7486e807a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ee7b5fb1edc97c406608\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"faaddc4d5628b7995a00\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b97a63a409cc8bc34280\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"278b621b26a043871160\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d5b951ef0082a0d0800e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f6264e20b3d70d60ec19\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e2423480c030ece800e5\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"49536c8e852ba200e501\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"74dd97908470e43560ad\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"fe67129b070ce001cbd7\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"628b76e09c2214073606\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"568fdff441c79b30475c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f58aa4b9e38b97083d91\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"3c47ae69ab0354c8712e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ad331a601b3e8d054697\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e9bc2f6170c7d5aa2dcb\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"055a49678007b7d80381\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"3f9a9ee54a9c929dc300\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d1ccf0b6c3120083d24d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"7301348c20b142d12e94\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a2e9850a74c780b87150\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4f5c068460d3093ae914\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"364f2faa20e60c91c4e4\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"6ad151e37ce58bd82659\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b16f550ec4612167a362\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9617beaa05b3869e05b1\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"2d7035cfdd74256990a5\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"b5e2a08550006ba236e7\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"1732106a7581763312e9\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"82bb9a450a42c15e449e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"da1db1f50309eed03ed6\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"4b012d79a8176c8c700d\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"49aa4b7a2a0e20607ee8\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"4f7b6e77ca55e0c45ce6\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"8285d02086a4973b836b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"f258fd6e98ecb780ec0d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"70cf1cb9eea96cad705c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"a5298c9a08840bd85bb9\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"1aefa6ee4d822063a946\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"2c0ffdfd6ae951dbac0c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"457112847371062198e9\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"8c0ce9dd051c3b1ced32\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"74c6957e1407b5c67de5\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"78c1190d026b4bca35d0\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d45bd786a84be71bb99c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"82a571f908d008127558\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"59a8d7aedd0e90ad01c8\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}}},\"visualContainerGroups\":{\"5f0e9d00129dcc8c0313\":{\"isHidden\":true},\"2766c21f0981b5ca2c82\":{\"isHidden\":true},\"01e0cec03d320a55b8bd\":{\"isHidden\":false},\"bd20f397dad01cce9252\":{\"isHidden\":true},\"12953d15ddcdaed0b00c\":{\"isHidden\":true},\"1d8ffddc00065372bd70\":{\"isHidden\":true}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[\"8285d02086a4973b836b\"]}},{\"displayName\":\"Get started - Help\",\"name\":\"8d23999e8d1041a0850b\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"d441a327009c09056946\",\"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\":{\"d441a327009c09056946\":{\"visualContainers\":{\"51f2efb01c13bb8be797\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"fb9db2d3611de3a9c34e\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b54165fc12a7486e807a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ee7b5fb1edc97c406608\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"faaddc4d5628b7995a00\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b97a63a409cc8bc34280\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"278b621b26a043871160\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d5b951ef0082a0d0800e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f6264e20b3d70d60ec19\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e2423480c030ece800e5\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"49536c8e852ba200e501\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"74dd97908470e43560ad\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"fe67129b070ce001cbd7\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"628b76e09c2214073606\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"568fdff441c79b30475c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f58aa4b9e38b97083d91\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"3c47ae69ab0354c8712e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ad331a601b3e8d054697\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e9bc2f6170c7d5aa2dcb\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"055a49678007b7d80381\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"3f9a9ee54a9c929dc300\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d1ccf0b6c3120083d24d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"7301348c20b142d12e94\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a2e9850a74c780b87150\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4f5c068460d3093ae914\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"364f2faa20e60c91c4e4\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"6ad151e37ce58bd82659\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b16f550ec4612167a362\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9617beaa05b3869e05b1\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"2d7035cfdd74256990a5\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"b5e2a08550006ba236e7\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"1732106a7581763312e9\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"82bb9a450a42c15e449e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"da1db1f50309eed03ed6\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"4b012d79a8176c8c700d\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"49aa4b7a2a0e20607ee8\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"4f7b6e77ca55e0c45ce6\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"8285d02086a4973b836b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"f258fd6e98ecb780ec0d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"70cf1cb9eea96cad705c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"a5298c9a08840bd85bb9\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"1aefa6ee4d822063a946\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"2c0ffdfd6ae951dbac0c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"457112847371062198e9\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"8c0ce9dd051c3b1ced32\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"74c6957e1407b5c67de5\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"78c1190d026b4bca35d0\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d45bd786a84be71bb99c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"82a571f908d008127558\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"59a8d7aedd0e90ad01c8\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}}},\"visualContainerGroups\":{\"5f0e9d00129dcc8c0313\":{\"isHidden\":true},\"2766c21f0981b5ca2c82\":{\"isHidden\":true},\"01e0cec03d320a55b8bd\":{\"isHidden\":true},\"bd20f397dad01cce9252\":{\"isHidden\":true},\"12953d15ddcdaed0b00c\":{\"isHidden\":true},\"1d8ffddc00065372bd70\":{\"isHidden\":false}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[\"4b012d79a8176c8c700d\"]}}],\"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, "publicCustomVisuals": [], @@ -109,1918 +109,1919 @@ "displayName": "Managed disks", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "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.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 4000.00 }, { - "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\"}", + "config": "{\"name\":\"045fef69e0b368cc5005\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":8000,\"width\":192,\"height\":32,\"tabOrder\":10000}}],\"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.0, - "width": 192.0, - "x": 0.0, - "y": 624.0, - "z": 3750.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 624.00, + "z": 8000.00 }, { "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.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { - "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "config": "{\"name\":\"0d37ce11ce071bd82db3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200.40302267002517,\"height\":720.0000000000011}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}", + "height": 720.00, + "width": 200.40, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { - "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.0, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "config": "{\"name\":\"17f158d8002239006071\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":272.0403022670025,\"z\":1500,\"width\":200.40302267002517,\"height\":56.22166246851385,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Disks.diskState\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskState\"},\"Name\":\"Disks.diskState\",\"NativeReferenceName\":\"Disk state\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Disks.diskState\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Disks.diskState\":{\"displayName\":\"Disk state\"}},\"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\":\"'Disk state'\"}}},\"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\"}}}}}]}}}", + "filters": "[]", + "height": 56.22, + "width": 200.40, + "x": 0.00, + "y": 272.04, + "z": 1500.00 }, { - "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\"}}}}}]}}}", + "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.diskSizeGB)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks.diskSizeGB)\",\"NativeReferenceName\":\"diskSizeGB\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskSizeGB\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"1000D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}]},\"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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 5000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { - "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\"}", + "config": "{\"name\":\"2c363109c1b258b60727\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"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\":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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { - "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\"}}}}}]}}}", + "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.skuTier\"},{\"queryRef\":\"Disks.Redundancy\"},{\"queryRef\":\"Disks.diskState\"},{\"queryRef\":\"Sum(Disks.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\":\"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\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks.diskSizeGB)\",\"NativeReferenceName\":\"Disk size GB1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"skuTier\"},\"Name\":\"Disks.skuTier\",\"NativeReferenceName\":\"Tier\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"Redundancy\"},\"Name\":\"Disks.Redundancy\",\"NativeReferenceName\":\"Redundancy\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskState\"},\"Name\":\"Disks.diskState\",\"NativeReferenceName\":\"Disk state\"}],\"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.diskType\":{\"displayName\":\"Disk type\"},\"Sum(Disks.diskSizeGB)\":{\"displayName\":\"Disk size GB\"},\"Disks.skuTier\":{\"displayName\":\"Tier\"},\"Disks.diskState\":{\"displayName\":\"Disk state\"}},\"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\":\"83.800630562379D\"}}}},\"selector\":{\"metadata\":\"Disks.diskType\"}}],\"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\":\"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\":\"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\":\"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\":\"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.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 }, { "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.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { - "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.0, - "width": 192.0, - "x": 0.0, - "y": 120.0, - "z": 1500.0 + "config": "{\"name\":\"361f3a1c862a92dd5d93\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":215.81863979848865,\"z\":2000,\"width\":200.40302267002517,\"height\":56.22166246851385,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Disks.skuName\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"skuName\"},\"Name\":\"Disks.skuName\",\"NativeReferenceName\":\"SKU\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Disks.skuName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Disks.skuName\":{\"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\":\"0d37ce11ce071bd82db3\"}", + "filters": "[{\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"skuName\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"skuName\"}},\"Right\":{\"Literal\":{\"Value\":\"null\"}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false}]", + "height": 56.22, + "width": 200.40, + "x": 0.00, + "y": 215.82, + "z": 2000.00 }, { - "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\"}", + "config": "{\"name\":\"4031383470ed68a1bc63\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":4000}}],\"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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, + "height": 704.00, "width": 1048.09, "x": 215.79, - "y": 8.0, - "z": 0.0 + "y": 8.00, + "z": 0.00 }, { - "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 3000.0 + "config": "{\"name\":\"43d992192686d600c7d1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":104.00000000000006,\"z\":5000,\"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\":\"0d37ce11ce071bd82db3\"}", + "filters": "[{\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Subscriptions\"}},\"Property\":\"name\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"}},\"Right\":{\"Literal\":{\"Value\":\"null\"}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false}]", + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 5000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { - "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.Governance/featureName/KQL.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\"}", + "config": "{\"name\":\"6997ad560b01616cd603\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":4000,\"width\":192,\"height\":32,\"tabOrder\":6000}}],\"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/FTK$$ftkver$$/bladeName/PowerBI.Governance/featureName/KQL.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.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 4000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { - "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\"}", + "config": "{\"name\":\"76fe8e2edbe01211049e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":6000,\"width\":192,\"height\":32,\"tabOrder\":7000}}],\"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.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 6000.00 }, { - "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\"}}}}}]}}}", + "config": "{\"name\":\"7a343d12e500e0d56c96\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1024,\"y\":8,\"z\":8000,\"width\":240.00000000000003,\"height\":88,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"treemap\",\"projections\":{\"Group\":[{\"queryRef\":\"Disks.diskState\",\"active\":true}],\"Values\":[{\"queryRef\":\"Sum(Disks.diskSizeGB)\"}],\"Tooltips\":[{\"queryRef\":\"Sum(Disks.diskSizeGB)1\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskState\"},\"Name\":\"Disks.diskState\",\"NativeReferenceName\":\"State1\"},{\"Arithmetic\":{\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskSizeGB\"}},\"Function\":0}},\"Right\":{\"ScopedEval\":{\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskSizeGB\"}},\"Function\":0}},\"Scope\":[]}},\"Operator\":3},\"Name\":\"Sum(Disks.diskSizeGB)\",\"NativeReferenceName\":\"%GT diskSizeGB\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks.diskSizeGB)1\",\"NativeReferenceName\":\"Disk size GB1\"}]},\"columnProperties\":{\"Disks.diskState\":{\"displayName\":\"State\"},\"Sum(Disks.diskSizeGB)\":{\"displayName\":\"Percent\"},\"Sum(Disks.diskSizeGB)1\":{\"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'\"}}}}}]}},{\"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.0, - "width": 240.0, - "x": 1024.0, - "y": 8.0, - "z": 8000.0 + "height": 88.00, + "width": 240.00, + "x": 1024.00, + "y": 8.00, + "z": 8000.00 }, { - "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\"}", + "config": "{\"name\":\"7cda86997344b50ab5d0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":10000,\"width\":40,\"height\":40,\"tabOrder\":8000}}],\"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.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 6000.0 + "filters": "[{\"name\":\"23c65ac72e01520097e8\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"diskState\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskState\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Unattached'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 6000.00 }, { - "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.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 2000.0 + "config": "{\"name\":\"a9aa99494b4e497ea301\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":160.5037783375315,\"z\":3000,\"width\":200.40302267002517,\"height\":55.314861460957175,\"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\":\"0d37ce11ce071bd82db3\"}", + "filters": "[{\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Resources\"}},\"Property\":\"location\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"location\"}},\"Right\":{\"Literal\":{\"Value\":\"null\"}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false}]", + "height": 55.31, + "width": 200.40, + "x": 0.00, + "y": 160.50, + "z": 3000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { - "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\"}", + "config": "{\"name\":\"d68cde6f7c971e2c2ed2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":9000,\"width\":192,\"height\":104,\"tabOrder\":2000}}],\"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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 9000.00 }, { - "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\"}}}}}]}}}", + "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.skuName\",\"active\":true}],\"Values\":[{\"queryRef\":\"Sum(Disks.diskSizeGB)\"}],\"Tooltips\":[{\"queryRef\":\"Sum(Disks.diskSizeGB)1\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"skuName\"},\"Name\":\"Disks.skuName\",\"NativeReferenceName\":\"SKU\"},{\"Arithmetic\":{\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskSizeGB\"}},\"Function\":0}},\"Right\":{\"ScopedEval\":{\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskSizeGB\"}},\"Function\":0}},\"Scope\":[]}},\"Operator\":3},\"Name\":\"Sum(Disks.diskSizeGB)\",\"NativeReferenceName\":\"Percent\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks.diskSizeGB)1\",\"NativeReferenceName\":\"Disk size GB\"}]},\"columnProperties\":{\"Disks.skuName\":{\"displayName\":\"SKU\"},\"Sum(Disks.diskSizeGB)\":{\"displayName\":\"Percent\"},\"Sum(Disks.diskSizeGB)1\":{\"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\":\"'Disk size (GB) by SKU'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}", "filters": "[]", - "height": 88.0, - "width": 224.0, - "x": 792.0, - "y": 8.0, - "z": 7000.0 + "height": 88.00, + "width": 224.00, + "x": 792.00, + "y": 8.00, + "z": 7000.00 }, { - "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\"}", + "config": "{\"name\":\"ebb6b8e9e8b5c05ec1a5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":7000,\"width\":192,\"height\":32,\"tabOrder\":9000}}],\"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.0, - "width": 192.0, - "x": 0.0, - "y": 624.0, - "z": 3500.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 624.00, + "z": 7000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Policy compliance", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "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.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 7000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 }, { "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.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 3000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 624.0, - "z": 5000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 624.00, + "z": 5000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 0.0 + "height": 64.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 0.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 624.0, - "z": 4000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 624.00, + "z": 4000.00 }, { "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.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, + "height": 704.00, "width": 1048.09, "x": 215.79, - "y": 8.0, - "z": 0.0 + "y": 8.00, + "z": 0.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 8000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 6000.0 + "height": 120.00, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 6000.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 4000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 4000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { - "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.Governance/featureName/KQL.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.Governance/featureName/KQL.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.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "SQL databases", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "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.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 6000.0 + "height": 184.00, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 6000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "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.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 2000.0 + "height": 64.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 2000.00 }, { "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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 4000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 7000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { - "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.Governance/featureName/KQL.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.Governance/featureName/KQL.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.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 296.0, - "z": 2000.0 + "height": 416.00, + "width": 1048.00, + "x": 216.00, + "y": 296.00, + "z": 2000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 624.0, - "z": 4000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 624.00, + "z": 4000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "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.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 8000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 624.0, - "z": 5000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 624.00, + "z": 5000.00 }, { "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.0, + "height": 704.00, "width": 1048.09, "x": 215.79, - "y": 8.0, - "z": 0.0 + "y": 8.00, + "z": 0.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 184.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 120.0, - "z": 1000.0 + "height": 64.00, + "width": 200.00, + "x": 0.00, + "y": 120.00, + "z": 1000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Summary", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 11500.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 11500.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "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.0, - "width": 568.0, - "x": 216.0, - "y": 104.0, - "z": 1000.0 + "height": 184.00, + "width": 568.00, + "x": 216.00, + "y": 104.00, + "z": 1000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 7000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 184.0, - "x": 792.0, - "y": 8.0, - "z": 7500.0 + "height": 88.00, + "width": 184.00, + "x": 792.00, + "y": 8.00, + "z": 7500.00 }, { "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.0, - "width": 568.0, - "x": 216.0, - "y": 296.0, - "z": 2000.0 + "height": 184.00, + "width": 568.00, + "x": 216.00, + "y": 296.00, + "z": 2000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "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.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 8000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 0.0 + "height": 64.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 0.00 }, { "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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 10750.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 10750.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 624.0, - "z": 4000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 624.00, + "z": 4000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { - "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.Governance/featureName/KQL.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.Governance/featureName/KQL.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.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 624.0, - "z": 5000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 624.00, + "z": 5000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 500.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 500.00 }, { "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.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 10000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 10000.00 }, { "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.0, - "width": 856.0, - "x": 216.0, - "y": 488.0, - "z": 6000.0 + "height": 224.00, + "width": 856.00, + "x": 216.00, + "y": 488.00, + "z": 6000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "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.0, + "height": 704.00, "width": 1048.09, "x": 215.79, - "y": 8.0, - "z": 0.0 + "y": 8.00, + "z": 0.00 }, { "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.0, - "width": 184.0, - "x": 1080.0, - "y": 488.0, - "z": 5000.0 + "height": 224.00, + "width": 184.00, + "x": 1080.00, + "y": 488.00, + "z": 5000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 6000.0 + "height": 184.00, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 6000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 120.0, - "z": 1000.0 + "height": 64.00, + "width": 200.00, + "x": 0.00, + "y": 120.00, + "z": 1000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "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.0, - "width": 472.0, - "x": 792.0, - "y": 104.0, - "z": 3000.0 + "height": 376.00, + "width": 472.00, + "x": 792.00, + "y": 104.00, + "z": 3000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Network security groups", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "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.0, - "width": 192.0, - "x": 0.0, - "y": 624.0, - "z": 4000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 624.00, + "z": 4000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { - "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.Governance/featureName/KQL.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.Governance/featureName/KQL.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.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 624.0, - "z": 5000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 624.00, + "z": 5000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 2000.0 + "height": 64.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 2000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 9000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 9000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "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.0, - "x": 0.0, - "y": 104.0, - "z": 6000.0 + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 6000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 184.0, - "z": 750.0 + "height": 64.00, + "width": 200.00, + "x": 0.00, + "y": 184.00, + "z": 750.00 }, { "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.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 8000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 488.0, - "z": 3000.0 + "height": 224.00, + "width": 1048.00, + "x": 216.00, + "y": 488.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, - "width": 184.0, - "x": 216.0, - "y": 104.0, - "z": 7000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 104.00, + "z": 7000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, + "height": 64.00, + "width": 200.00, + "x": 0.00, "y": 247.79, - "z": 625.0 + "z": 625.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "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 (for example, 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.0, - "width": 856.0, - "x": 408.0, - "y": 8.0, - "z": 8000.0 + "height": 184.00, + "width": 856.00, + "x": 408.00, + "y": 8.00, + "z": 8000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, + "height": 64.00, + "width": 200.00, + "x": 0.00, "y": 311.79, - "z": 562.0 + "z": 562.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 120.0, - "z": 1000.0 + "height": 64.00, + "width": 200.00, + "x": 0.00, + "y": 120.00, + "z": 1000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 7000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 200.0, - "z": 2000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 200.00, + "z": 2000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "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.0, + "height": 704.00, "width": 1048.09, "x": 215.79, - "y": 8.0, - "z": 0.0 + "y": 8.00, + "z": 0.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Get started", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "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.0, - "y": 113.0, - "z": 12000.0 + "x": 216.00, + "y": 113.00, + "z": 12000.00 }, { "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.0, - "width": 80.0, - "x": 960.0, - "y": 0.0, - "z": 2000.0 + "height": 696.00, + "width": 80.00, + "x": 960.00, + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 272.0, - "x": 504.0, - "y": 304.0, - "z": 6000.0 + "height": 368.00, + "width": 272.00, + "x": 504.00, + "y": 304.00, + "z": 6000.00 }, { "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.0, - "width": 736.0, - "x": 40.0, - "y": 40.0, - "z": 3000.0 + "height": 48.00, + "width": 736.00, + "x": 40.00, + "y": 40.00, + "z": 3000.00 }, { "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.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 3000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 3000.00 }, { "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.0, - "z": 11000.0 + "y": 112.00, + "z": 11000.00 }, { "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.0, - "width": 272.0, - "x": 792.0, - "y": 304.0, - "z": 5000.0 + "height": 312.00, + "width": 272.00, + "x": 792.00, + "y": 304.00, + "z": 5000.00 }, { "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.0, - "width": 848.0, - "x": 216.0, - "y": 112.0, - "z": 8000.0 + "height": 176.00, + "width": 848.00, + "x": 216.00, + "y": 112.00, + "z": 8000.00 }, { "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.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 2000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 3000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 1232.0, - "x": 0.0, - "y": 0.0, - "z": 19000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 0.00, + "z": 19000.00 }, { "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.0, - "width": 1232.0, - "x": 0.0, - "y": 96.0, - "z": 18000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 96.00, + "z": 18000.00 }, { "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.0, - "width": 80.0, - "x": 1056.0, - "y": 0.0, - "z": 1000.0 + "height": 696.00, + "width": 80.00, + "x": 1056.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 96.0, + "height": 32.00, + "width": 96.00, "x": 137.13, - "y": 488.0, - "z": 2000.0 + "y": 488.00, + "z": 2000.00 }, { "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.0, - "width": 80.0, - "x": 864.0, - "y": 0.0, - "z": 3000.0 + "height": 696.00, + "width": 80.00, + "x": 864.00, + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 3000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 32.0, - "x": 784.0, - "y": 48.0, - "z": 2000.0 + "height": 32.00, + "width": 32.00, + "x": 784.00, + "y": 48.00, + "z": 2000.00 }, { "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.0, - "width": 80.0, - "x": 480.0, - "y": 0.0, - "z": 7000.0 + "height": 696.00, + "width": 80.00, + "x": 480.00, + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 256.0, + "height": 176.00, + "width": 256.00, "x": 0.04, - "y": 192.0, - "z": 0.0 + "y": 192.00, + "z": 0.00 }, { "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 +2030,729 @@ "width": 194.17, "x": 213.33, "y": 8.33, - "z": 10000.0 + "z": 10000.00 }, { "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.0, - "width": 80.0, - "x": 288.0, - "y": 0.0, - "z": 9000.0 + "height": 696.00, + "width": 80.00, + "x": 288.00, + "y": 0.00, + "z": 9000.00 }, { "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.0, - "width": 96.0, + "height": 32.00, + "width": 96.00, "x": 241.13, - "y": 488.0, - "z": 1000.0 + "y": 488.00, + "z": 1000.00 }, { "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.0, - "width": 1232.0, - "x": 24.0, - "y": 16.0, - "z": 0.0 + "height": 696.00, + "width": 1232.00, + "x": 24.00, + "y": 16.00, + "z": 0.00 }, { "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.0, - "width": 80.0, - "x": 576.0, - "y": 0.0, - "z": 6000.0 + "height": 696.00, + "width": 80.00, + "x": 576.00, + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 1232.0, - "x": 0.0, - "y": 384.0, - "z": 15000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 384.00, + "z": 15000.00 }, { "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.0, - "width": 160.0, - "x": 0.0, - "y": 288.0, - "z": 1000.0 + "height": 24.00, + "width": 160.00, + "x": 0.00, + "y": 288.00, + "z": 1000.00 }, { "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.0, - "width": 1232.0, - "x": 0.0, - "y": 288.0, - "z": 16000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 288.00, + "z": 16000.00 }, { "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.0, - "width": 736.0, - "x": 40.0, - "y": 40.0, - "z": 6000.0 + "height": 48.00, + "width": 736.00, + "x": 40.00, + "y": 40.00, + "z": 6000.00 }, { "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.0, - "width": 80.0, - "x": 96.0, - "y": 0.0, - "z": 11000.0 + "height": 696.00, + "width": 80.00, + "x": 96.00, + "y": 0.00, + "z": 11000.00 }, { "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.0, - "width": 776.0, - "x": 40.0, - "y": 96.0, - "z": 4000.0 + "height": 384.00, + "width": 776.00, + "x": 40.00, + "y": 96.00, + "z": 4000.00 }, { "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.0, - "width": 144.0, + "height": 24.00, + "width": 144.00, "x": 0.22, - "y": 288.0, - "z": 1000.0 + "y": 288.00, + "z": 1000.00 }, { - "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\"}", + "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/FTK$$ftkver$$'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Clear filters'\"}}}}}]}},\"parentGroupName\":\"1d8ffddc00065372bd70\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 88.0, + "height": 32.00, + "width": 88.00, "x": 41.13, - "y": 488.0, - "z": 3000.0 + "y": 488.00, + "z": 3000.00 }, { "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.0, - "y": 0.0, - "z": 0.0 + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "y": 0.0, - "z": 0.0 + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 272.0, - "x": 0.0, - "y": 192.0, - "z": 0.0 + "height": 96.00, + "width": 272.00, + "x": 0.00, + "y": 192.00, + "z": 0.00 }, { "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.0, - "width": 80.0, - "x": 192.0, - "y": 0.0, - "z": 10000.0 + "height": 696.00, + "width": 80.00, + "x": 192.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, - "width": 248.0, - "x": 0.0, - "y": 192.0, - "z": 0.0 + "height": 176.00, + "width": 248.00, + "x": 0.00, + "y": 192.00, + "z": 0.00 }, { "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.0, - "width": 1232.0, - "x": 0.0, - "y": 576.0, - "z": 13000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 576.00, + "z": 13000.00 }, { "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.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 2000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 }, { - "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\"}}}}}]}}}", + "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\":\"$$ftkver$$ · $$build-date$$ · 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.0, - "width": 240.0, - "x": 104.0, - "y": 688.0, - "z": 3000.0 + "height": 32.00, + "width": 240.00, + "x": 104.00, + "y": 688.00, + "z": 3000.00 }, { "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.0, - "width": 152.0, - "x": 0.0, - "y": 288.0, - "z": 1000.0 + "height": 24.00, + "width": 152.00, + "x": 0.00, + "y": 288.00, + "z": 1000.00 }, { - "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\"}", + "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/FTK$$ftkver$$'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'8d23999e8d1041a0850b'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 88.0, - "x": 1064.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 88.00, + "x": 1064.00, + "y": 688.00, + "z": 2000.00 }, { "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.0, - "width": 272.0, - "x": 216.0, - "y": 304.0, - "z": 7000.0 + "height": 368.00, + "width": 272.00, + "x": 216.00, + "y": 304.00, + "z": 7000.00 }, { "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.0, - "width": 80.0, - "x": 1152.0, - "y": 0.0, - "z": 0.0 + "height": 696.00, + "width": 80.00, + "x": 1152.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 32.0, - "x": 784.0, - "y": 48.0, - "z": 5000.0 + "height": 32.00, + "width": 32.00, + "x": 784.00, + "y": 48.00, + "z": 5000.00 }, { "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.0, - "width": 80.0, - "x": 0.0, - "y": 0.0, - "z": 12000.0 + "height": 696.00, + "width": 80.00, + "x": 0.00, + "y": 0.00, + "z": 12000.00 }, { "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.0, - "width": 776.0, - "x": 40.0, - "y": 96.0, - "z": 1000.0 + "height": 424.00, + "width": 776.00, + "x": 40.00, + "y": 96.00, + "z": 1000.00 }, { "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.0, - "width": 80.0, - "x": 672.0, - "y": 0.0, - "z": 5000.0 + "height": 696.00, + "width": 80.00, + "x": 672.00, + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 1232.0, - "x": 0.0, - "y": 192.0, - "z": 17000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 192.00, + "z": 17000.00 }, { "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.5, + "width": 852.50, "x": 211.67, "y": 24.17, - "z": 9000.0 + "z": 9000.00 }, { "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.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 2000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 80.0, - "x": 768.0, - "y": 0.0, - "z": 4000.0 + "height": 696.00, + "width": 80.00, + "x": 768.00, + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 80.0, - "x": 384.0, - "y": 0.0, - "z": 8000.0 + "height": 696.00, + "width": 80.00, + "x": 384.00, + "y": 0.00, + "z": 8000.00 }, { - "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.Governance/featureName/KQL.GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.Governance/featureName/KQL.GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 112.0, - "x": 1160.0, - "y": 688.0, - "z": 1000.0 + "height": 32.00, + "width": 112.00, + "x": 1160.00, + "y": 688.00, + "z": 1000.00 }, { "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.0, - "width": 96.0, - "x": 8.0, - "y": 688.0, - "z": 4000.0 + "height": 32.00, + "width": 96.00, + "x": 8.00, + "y": 688.00, + "z": 4000.00 }, { "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.0, - "width": 1232.0, - "x": 0.0, - "y": 480.0, - "z": 14000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 480.00, + "z": 14000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Virtual machines", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, + "height": 704.00, "width": 1048.09, "x": 215.79, - "y": 8.0, - "z": 0.0 + "y": 8.00, + "z": 0.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, - "width": 280.0, - "x": 216.0, - "y": 104.0, - "z": 2000.0 + "height": 184.00, + "width": 280.00, + "x": 216.00, + "y": 104.00, + "z": 2000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { - "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\"}}}}}]}}}", + "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.skuName\"},{\"queryRef\":\"Sum(Disks.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\":\"diskType\"},\"Name\":\"Disks.diskType\",\"NativeReferenceName\":\"Disk type\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"skuName\"},\"Name\":\"Disks.skuName\",\"NativeReferenceName\":\"SKU1\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks.diskSizeGB)\",\"NativeReferenceName\":\"Disk size GB1\"}],\"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.diskType\":{\"displayName\":\"Disk type\"},\"Sum(Disks.diskSizeGB)\":{\"displayName\":\"Disk size GB\"},\"Disks.skuName\":{\"displayName\":\"SKU\"}},\"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.0, - "width": 472.0, - "x": 216.0, - "y": 488.0, - "z": 7000.0 + "height": 224.00, + "width": 472.00, + "x": 216.00, + "y": 488.00, + "z": 7000.00 }, { "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.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 7000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 10000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 10000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 2000.0 + "height": 64.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 2000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 120.0, - "z": 1000.0 + "height": 64.00, + "width": 192.00, + "x": 0.00, + "y": 120.00, + "z": 1000.00 }, { "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.0, - "width": 472.0, - "x": 792.0, - "y": 104.0, - "z": 4000.0 + "height": 184.00, + "width": 472.00, + "x": 792.00, + "y": 104.00, + "z": 4000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 184.0, - "z": 0.0 + "height": 64.00, + "width": 192.00, + "x": 0.00, + "y": 184.00, + "z": 0.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { - "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.Governance/featureName/KQL.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.Governance/featureName/KQL.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.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "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.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 8000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 8000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 184.0, - "x": 792.0, - "y": 8.0, - "z": 11000.0 + "height": 88.00, + "width": 184.00, + "x": 792.00, + "y": 8.00, + "z": 11000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 6000.0 + "height": 248.00, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 6000.00 }, { "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.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 8000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 624.0, - "z": 5000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 624.00, + "z": 5000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 568.0, - "x": 696.0, - "y": 488.0, - "z": 6000.0 + "height": 224.00, + "width": 568.00, + "x": 696.00, + "y": 488.00, + "z": 6000.00 }, { "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.0, - "width": 280.0, - "x": 504.0, - "y": 104.0, - "z": 5000.0 + "height": 184.00, + "width": 280.00, + "x": 504.00, + "y": 104.00, + "z": 5000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 624.0, - "z": 4000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 624.00, + "z": 4000.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 296.0, - "z": 3000.0 + "height": 184.00, + "width": 1048.00, + "x": 216.00, + "y": 296.00, + "z": 3000.00 }, { - "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\"}}}}}]}}}", + "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.diskSizeGB)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks.diskSizeGB)\",\"NativeReferenceName\":\"diskSizeGB\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskSizeGB\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"1000D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}]},\"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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 9000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 9000.00 } ], - "width": 1280.0 + "width": 1280.00 } ], "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 8bae9ee7c..578b6523e 100644 --- a/src/power-bi/kql/RateOptimization.Report/report.json +++ b/src/power-bi/kql/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_theme23216430052051784.json\",\"version\":\"5.61\",\"type\":1}},\"activeSectionIndex\":0,\"bookmarks\":[{\"displayName\":\"Get started\",\"name\":\"9b12f4a45372b68afac4\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"ReportSection04cb7247170034c13d74\",\"sections\":{\"ReportSection04cb7247170034c13d74\":{\"visualContainers\":{\"032ea6f679cf4ca8c9d3\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"0590e9cb99281af3a785\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"077752b33bf94290a16d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"0a648347fe019afeb8ba\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"18dcc93309a9078698af\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1ba004be1896c6c24afb\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"24cc53eff38cacdca835\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2e6bfd7415798df93c37\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2e6c4b399e4d6863a1fc\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"3706013d62b47e9dfa6b\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"3b60c6bf96e5bca1fdf6\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"44fbe414495555242a73\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"4d9524e768ccf8a22f78\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"5420a33794d01b79173d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"5bcbbb35a35ec0ecfa1d\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"5c96e5507ec407d4d327\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"60280221a64c0eb4d3bd\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"6e6a624ac563a193500f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"818c372618708f066807\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"87e1cbfe3059a7604c1e\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"8f7d0bcf6d2ad2eaace5\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"90a16f3b99ae5a24aeaf\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"950683b70ed8b034026d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9b711a59be4c2dd17c65\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"bcd7f978567637981e38\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"bea8ca6e90e6071b994f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c33c130285f92b99293c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c33fc8702668a013d84d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"cba5aec8c4915d55714f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d003ec1374e9b4f68ca6\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d722dc1d1e76112b4d50\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"de0b81c54e7ccfa7fdea\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"df45d3cf97bd5e41422d\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e4d7da5f283706d19837\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ed2ea76eb5499f7953d5\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ef18812ee760367dfd09\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"fa1cda59e7005f9b9438\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"fa65b655d64e3524026b\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"9cf05024f2801d161826\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"898f20562c3d6901b997\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"468b5abe48ff3c6a882c\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"76ebf402eaea1938a55d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ef496017f935dfc31625\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"a83df0e382dc4c3e5f14\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"3413acbcf0f09a04f40c\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"759a125373a216bf6d7d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"798136b5a82a10b4ccde\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"aa99304da47e589cd63c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"c3db07d32c37511e85b4\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"1e5b2e578915e12f366f\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}}},\"visualContainerGroups\":{\"44c9a31e29957c955fad\":{\"isHidden\":false},\"4a76adff6013c40708cc\":{\"isHidden\":true},\"610e4f32159cbae3f55d\":{\"isHidden\":false},\"f7adac54f7e8018c45a4\":{\"isHidden\":false},\"ea801701f96a5dfabd48\":{\"isHidden\":true},\"ced05df8e4755ccc7b4d\":{\"isHidden\":true}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[\"798136b5a82a10b4ccde\"]}},{\"displayName\":\"Get started - Connect\",\"name\":\"e4159db56d370ff157b3\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"ReportSection04cb7247170034c13d74\",\"sections\":{\"ReportSection04cb7247170034c13d74\":{\"visualContainers\":{\"032ea6f679cf4ca8c9d3\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"0590e9cb99281af3a785\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"077752b33bf94290a16d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"0a648347fe019afeb8ba\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"18dcc93309a9078698af\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1ba004be1896c6c24afb\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"24cc53eff38cacdca835\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2e6bfd7415798df93c37\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2e6c4b399e4d6863a1fc\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"3706013d62b47e9dfa6b\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"3b60c6bf96e5bca1fdf6\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"44fbe414495555242a73\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"4d9524e768ccf8a22f78\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"5420a33794d01b79173d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"5bcbbb35a35ec0ecfa1d\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"5c96e5507ec407d4d327\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"60280221a64c0eb4d3bd\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"6e6a624ac563a193500f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"818c372618708f066807\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"87e1cbfe3059a7604c1e\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"8f7d0bcf6d2ad2eaace5\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"90a16f3b99ae5a24aeaf\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"950683b70ed8b034026d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9b711a59be4c2dd17c65\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"bcd7f978567637981e38\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"bea8ca6e90e6071b994f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c33c130285f92b99293c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c33fc8702668a013d84d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"cba5aec8c4915d55714f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d003ec1374e9b4f68ca6\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d722dc1d1e76112b4d50\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"de0b81c54e7ccfa7fdea\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"df45d3cf97bd5e41422d\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e4d7da5f283706d19837\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ed2ea76eb5499f7953d5\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ef18812ee760367dfd09\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"fa1cda59e7005f9b9438\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"fa65b655d64e3524026b\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"9cf05024f2801d161826\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"898f20562c3d6901b997\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"468b5abe48ff3c6a882c\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"76ebf402eaea1938a55d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ef496017f935dfc31625\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}}},\"visualContainerGroups\":{\"44c9a31e29957c955fad\":{\"isHidden\":true},\"4a76adff6013c40708cc\":{\"isHidden\":true},\"610e4f32159cbae3f55d\":{\"isHidden\":true},\"f7adac54f7e8018c45a4\":{\"isHidden\":true},\"ea801701f96a5dfabd48\":{\"isHidden\":false}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[]}},{\"displayName\":\"Get started - Help\",\"name\":\"da0a4620bf1d33e2775e\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"ReportSection04cb7247170034c13d74\",\"sections\":{\"ReportSection04cb7247170034c13d74\":{\"visualContainers\":{\"032ea6f679cf4ca8c9d3\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"0590e9cb99281af3a785\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"077752b33bf94290a16d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"0a648347fe019afeb8ba\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"18dcc93309a9078698af\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1ba004be1896c6c24afb\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"24cc53eff38cacdca835\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2e6bfd7415798df93c37\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2e6c4b399e4d6863a1fc\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"3706013d62b47e9dfa6b\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"3b60c6bf96e5bca1fdf6\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"44fbe414495555242a73\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"4d9524e768ccf8a22f78\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"5420a33794d01b79173d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"5bcbbb35a35ec0ecfa1d\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"5c96e5507ec407d4d327\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"60280221a64c0eb4d3bd\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"6e6a624ac563a193500f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"818c372618708f066807\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"87e1cbfe3059a7604c1e\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"8f7d0bcf6d2ad2eaace5\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"90a16f3b99ae5a24aeaf\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"950683b70ed8b034026d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9b711a59be4c2dd17c65\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"bcd7f978567637981e38\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"bea8ca6e90e6071b994f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c33c130285f92b99293c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c33fc8702668a013d84d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"cba5aec8c4915d55714f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d003ec1374e9b4f68ca6\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d722dc1d1e76112b4d50\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"de0b81c54e7ccfa7fdea\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"df45d3cf97bd5e41422d\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e4d7da5f283706d19837\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ed2ea76eb5499f7953d5\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ef18812ee760367dfd09\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"fa1cda59e7005f9b9438\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"fa65b655d64e3524026b\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"9cf05024f2801d161826\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"898f20562c3d6901b997\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"468b5abe48ff3c6a882c\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"76ebf402eaea1938a55d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ef496017f935dfc31625\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"a83df0e382dc4c3e5f14\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"3413acbcf0f09a04f40c\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"759a125373a216bf6d7d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"798136b5a82a10b4ccde\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"aa99304da47e589cd63c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"c3db07d32c37511e85b4\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"1e5b2e578915e12f366f\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}}},\"visualContainerGroups\":{\"44c9a31e29957c955fad\":{\"isHidden\":true},\"4a76adff6013c40708cc\":{\"isHidden\":true},\"610e4f32159cbae3f55d\":{\"isHidden\":true},\"f7adac54f7e8018c45a4\":{\"isHidden\":true},\"ea801701f96a5dfabd48\":{\"isHidden\":true},\"ced05df8e4755ccc7b4d\":{\"isHidden\":false}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[\"798136b5a82a10b4ccde\"]}}],\"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.62\",\"themeCollection\":{\"baseTheme\":{\"name\":\"CY19SU06\",\"version\":\"5.5\",\"type\":2},\"customTheme\":{\"name\":\"Microsoft_FinOps_light_theme23216430052051784.json\",\"version\":\"5.61\",\"type\":1}},\"activeSectionIndex\":0,\"bookmarks\":[{\"displayName\":\"Get started\",\"name\":\"9b12f4a45372b68afac4\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"ReportSection04cb7247170034c13d74\",\"sections\":{\"ReportSection04cb7247170034c13d74\":{\"visualContainers\":{\"032ea6f679cf4ca8c9d3\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"0590e9cb99281af3a785\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"077752b33bf94290a16d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"0a648347fe019afeb8ba\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"18dcc93309a9078698af\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1ba004be1896c6c24afb\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"24cc53eff38cacdca835\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2e6bfd7415798df93c37\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2e6c4b399e4d6863a1fc\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"3706013d62b47e9dfa6b\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"3b60c6bf96e5bca1fdf6\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"44fbe414495555242a73\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"4d9524e768ccf8a22f78\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"5420a33794d01b79173d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"5bcbbb35a35ec0ecfa1d\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"5c96e5507ec407d4d327\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"60280221a64c0eb4d3bd\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"6e6a624ac563a193500f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"818c372618708f066807\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"87e1cbfe3059a7604c1e\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"8f7d0bcf6d2ad2eaace5\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"90a16f3b99ae5a24aeaf\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"950683b70ed8b034026d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9b711a59be4c2dd17c65\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"bcd7f978567637981e38\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"bea8ca6e90e6071b994f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c33c130285f92b99293c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c33fc8702668a013d84d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"cba5aec8c4915d55714f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d003ec1374e9b4f68ca6\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d722dc1d1e76112b4d50\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"de0b81c54e7ccfa7fdea\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"df45d3cf97bd5e41422d\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e4d7da5f283706d19837\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ed2ea76eb5499f7953d5\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ef18812ee760367dfd09\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"fa1cda59e7005f9b9438\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"fa65b655d64e3524026b\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"9cf05024f2801d161826\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"898f20562c3d6901b997\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"468b5abe48ff3c6a882c\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"76ebf402eaea1938a55d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ef496017f935dfc31625\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"a83df0e382dc4c3e5f14\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"3413acbcf0f09a04f40c\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"759a125373a216bf6d7d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"798136b5a82a10b4ccde\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"aa99304da47e589cd63c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"c3db07d32c37511e85b4\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"1e5b2e578915e12f366f\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}}},\"visualContainerGroups\":{\"44c9a31e29957c955fad\":{\"isHidden\":false},\"4a76adff6013c40708cc\":{\"isHidden\":true},\"610e4f32159cbae3f55d\":{\"isHidden\":false},\"f7adac54f7e8018c45a4\":{\"isHidden\":false},\"ea801701f96a5dfabd48\":{\"isHidden\":true},\"ced05df8e4755ccc7b4d\":{\"isHidden\":true}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[\"798136b5a82a10b4ccde\"]}},{\"displayName\":\"Get started - Connect\",\"name\":\"e4159db56d370ff157b3\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"ReportSection04cb7247170034c13d74\",\"sections\":{\"ReportSection04cb7247170034c13d74\":{\"visualContainers\":{\"032ea6f679cf4ca8c9d3\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"0590e9cb99281af3a785\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"077752b33bf94290a16d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"0a648347fe019afeb8ba\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"18dcc93309a9078698af\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1ba004be1896c6c24afb\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"24cc53eff38cacdca835\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2e6bfd7415798df93c37\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2e6c4b399e4d6863a1fc\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"3706013d62b47e9dfa6b\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"3b60c6bf96e5bca1fdf6\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"44fbe414495555242a73\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"4d9524e768ccf8a22f78\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"5420a33794d01b79173d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"5bcbbb35a35ec0ecfa1d\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"5c96e5507ec407d4d327\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"60280221a64c0eb4d3bd\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"6e6a624ac563a193500f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"818c372618708f066807\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"87e1cbfe3059a7604c1e\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"8f7d0bcf6d2ad2eaace5\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"90a16f3b99ae5a24aeaf\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"950683b70ed8b034026d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9b711a59be4c2dd17c65\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"bcd7f978567637981e38\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"bea8ca6e90e6071b994f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c33c130285f92b99293c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c33fc8702668a013d84d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"cba5aec8c4915d55714f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d003ec1374e9b4f68ca6\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d722dc1d1e76112b4d50\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"de0b81c54e7ccfa7fdea\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"df45d3cf97bd5e41422d\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e4d7da5f283706d19837\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ed2ea76eb5499f7953d5\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ef18812ee760367dfd09\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"fa1cda59e7005f9b9438\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"fa65b655d64e3524026b\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"9cf05024f2801d161826\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"898f20562c3d6901b997\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"468b5abe48ff3c6a882c\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"76ebf402eaea1938a55d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ef496017f935dfc31625\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}}},\"visualContainerGroups\":{\"44c9a31e29957c955fad\":{\"isHidden\":true},\"4a76adff6013c40708cc\":{\"isHidden\":true},\"610e4f32159cbae3f55d\":{\"isHidden\":true},\"f7adac54f7e8018c45a4\":{\"isHidden\":true},\"ea801701f96a5dfabd48\":{\"isHidden\":false}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[]}},{\"displayName\":\"Get started - Help\",\"name\":\"da0a4620bf1d33e2775e\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"ReportSection04cb7247170034c13d74\",\"sections\":{\"ReportSection04cb7247170034c13d74\":{\"visualContainers\":{\"032ea6f679cf4ca8c9d3\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"0590e9cb99281af3a785\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"077752b33bf94290a16d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"0a648347fe019afeb8ba\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"18dcc93309a9078698af\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1ba004be1896c6c24afb\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"24cc53eff38cacdca835\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2e6bfd7415798df93c37\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2e6c4b399e4d6863a1fc\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"3706013d62b47e9dfa6b\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"3b60c6bf96e5bca1fdf6\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"44fbe414495555242a73\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"4d9524e768ccf8a22f78\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"5420a33794d01b79173d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"5bcbbb35a35ec0ecfa1d\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"5c96e5507ec407d4d327\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"60280221a64c0eb4d3bd\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"6e6a624ac563a193500f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"818c372618708f066807\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"87e1cbfe3059a7604c1e\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"8f7d0bcf6d2ad2eaace5\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"90a16f3b99ae5a24aeaf\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"950683b70ed8b034026d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9b711a59be4c2dd17c65\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"bcd7f978567637981e38\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"bea8ca6e90e6071b994f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c33c130285f92b99293c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c33fc8702668a013d84d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"cba5aec8c4915d55714f\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d003ec1374e9b4f68ca6\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d722dc1d1e76112b4d50\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"de0b81c54e7ccfa7fdea\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"df45d3cf97bd5e41422d\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e4d7da5f283706d19837\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ed2ea76eb5499f7953d5\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ef18812ee760367dfd09\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"fa1cda59e7005f9b9438\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"fa65b655d64e3524026b\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"9cf05024f2801d161826\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"898f20562c3d6901b997\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"468b5abe48ff3c6a882c\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"76ebf402eaea1938a55d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ef496017f935dfc31625\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"a83df0e382dc4c3e5f14\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"3413acbcf0f09a04f40c\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"759a125373a216bf6d7d\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"798136b5a82a10b4ccde\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"aa99304da47e589cd63c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"c3db07d32c37511e85b4\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"1e5b2e578915e12f366f\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}}},\"visualContainerGroups\":{\"44c9a31e29957c955fad\":{\"isHidden\":true},\"4a76adff6013c40708cc\":{\"isHidden\":true},\"610e4f32159cbae3f55d\":{\"isHidden\":true},\"f7adac54f7e8018c45a4\":{\"isHidden\":true},\"ea801701f96a5dfabd48\":{\"isHidden\":true},\"ced05df8e4755ccc7b4d\":{\"isHidden\":false}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[\"798136b5a82a10b4ccde\"]}}],\"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": "[]", "layoutOptimization": 0, "pods": [ @@ -121,605 +121,605 @@ "displayName": "Summary", "displayOption": 1, "filters": "[{\"name\":\"Filtercf9c0cb49977d0109855\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{},\"ordinal\":0},{\"name\":\"Filter3a96ad32e00450ad17a5\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"ordinal\":1},{\"name\":\"818dceb061c4082b9158\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_AmortizationCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_AmortizationCategory\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Principal'\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"ordinal\":2}]", - "height": 720.0, + "height": 720.00, "name": "04a26035c44848908030", "ordinal": 1, "visualContainers": [ { "config": "{\"name\":\"03079180d7d273dacc29\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"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\":\"1b17e5a01e7b880ae3c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"03366d7e3aecdd77e32b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128.45195301936707,\"width\":856,\"x\":309.9997906394788,\"y\":296,\"z\":4000,\"tabOrder\":2000}}],\"singleVisualGroup\":{\"displayName\":\"Total savings\",\"groupMode\":0}}", "height": 128.45, - "width": 856.0, - "x": 310.0, - "y": 296.0, - "z": 4000.0 + "width": 856.00, + "x": 310.00, + "y": 296.00, + "z": 4000.00 }, { "config": "{\"name\":\"06d36c35a5840051a060\",\"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\":\"343bf81a69c33d9e3eb8\"}", "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "config": "{\"name\":\"0d5341686e93e9c0e00e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":192,\"x\":0,\"y\":0,\"z\":0,\"tabOrder\":6000}}],\"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\":\"7bcee36d4c5362013aa6\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"12e644e34370d43dcbd4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":98.13518601364285,\"width\":576.0069720119875,\"x\":448.00010909577645,\"y\":432.290100200993,\"z\":3000,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"CD breakdown\",\"groupMode\":0}}", "height": 98.14, "width": 576.01, - "x": 448.0, + "x": 448.00, "y": 432.29, - "z": 3000.0 + "z": 3000.00 }, { "config": "{\"name\":\"1644f64d08576051b5e8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"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\":\"1b17e5a01e7b880ae3c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "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\"}}},\"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.0, - "width": 280.0, - "x": 288.0, + "height": 128.00, + "width": 280.00, + "x": 288.00, "y": 0.03, - "z": 1000.0 + "z": 1000.00 }, { "config": "{\"name\":\"1b17e5a01e7b880ae3c3\",\"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.0, - "width": 1048.5, - "x": 214.9, + "height": 704.00, + "width": 1048.50, + "x": 214.90, "y": 8.04, - "z": 0.0 + "z": 0.00 }, { "config": "{\"name\":\"1d6658ae2abe284bab96\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":32,\"x\":546.3171778676784,\"y\":25.732775161866698,\"z\":3000,\"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\":\"fadf7741149c40720430\"}", "filters": "[]", - "height": 104.0, - "width": 32.0, + "height": 104.00, + "width": 32.00, "x": 546.32, "y": 25.73, - "z": 3000.0 + "z": 3000.00 }, { "config": "{\"name\":\"1d9c075a2948be03ccb0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":32,\"x\":546.8068172946735,\"y\":24.429474352321336,\"z\":3000,\"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\":\"'Equals'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"03366d7e3aecdd77e32b\"}", "filters": "[]", - "height": 104.0, - "width": 32.0, + "height": 104.00, + "width": 32.00, "x": 546.81, "y": 24.43, - "z": 3000.0 + "z": 3000.00 }, { "config": "{\"name\":\"1f883d4bac64ace6c322\",\"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\":\"12e644e34370d43dcbd4\"}", "filters": "[]", - "height": 48.0, - "width": 32.0, + "height": 48.00, + "width": 32.00, "x": 128.17, - "y": 35.0, - "z": 7000.0 + "y": 35.00, + "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\"}}},\"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.0, - "width": 280.0, - "x": 288.0, + "height": 128.00, + "width": 280.00, + "x": 288.00, "y": 0.03, - "z": 1000.0 + "z": 1000.00 }, { "config": "{\"name\":\"29e10622195e2a00530b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":856,\"x\":310.82883888120926,\"y\":570,\"z\":2000,\"tabOrder\":4000}}],\"singleVisualGroup\":{\"displayName\":\"ESR\",\"groupMode\":0}}", - "height": 128.0, - "width": 856.0, + "height": 128.00, + "width": 856.00, "x": 310.83, - "y": 570.0, - "z": 2000.0 + "y": 570.00, + "z": 2000.00 }, { "config": "{\"name\":\"2af7db2a166326006150\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"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\":\"1b17e5a01e7b880ae3c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"2c05d99c3d85b838961e\",\"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\":\"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\":\"7bcee36d4c5362013aa6\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"2d05f8c167ee2a7906d8\",\"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\":\"12e644e34370d43dcbd4\"}", "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.0, - "width": 144.0, - "x": 144.0, + "height": 72.00, + "width": 144.00, + "x": 144.00, "y": 26.14, - "z": 3000.0 + "z": 3000.00 }, { "config": "{\"name\":\"2d1d33ffee9b778cdd5a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":32,\"x\":544.3858256439802,\"y\":23.089261796945667,\"z\":3000,\"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\":\"'Equals'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"858dce304b930b7248b8\"}", "filters": "[]", - "height": 104.0, - "width": 32.0, + "height": 104.00, + "width": 32.00, "x": 544.39, "y": 23.09, - "z": 3000.0 + "z": 3000.00 }, { "config": "{\"name\":\"2d6b883f0c6539507c41\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":40,\"x\":265.8585444265391,\"y\":24.429483640270234,\"z\":4000,\"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\":\"'Minus'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"03366d7e3aecdd77e32b\"}", "filters": "[]", - "height": 104.0, - "width": 40.0, + "height": 104.00, + "width": 40.00, "x": 265.86, "y": 24.43, - "z": 4000.0 + "z": 4000.00 }, { "config": "{\"name\":\"2e6512969490d5e9cc88\",\"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\":\"12e644e34370d43dcbd4\"}", "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.0, - "width": 144.0, + "height": 72.00, + "width": 144.00, "x": 432.01, "y": 26.14, - "z": 1000.0 + "z": 1000.00 }, { "config": "{\"name\":\"2f9619427ba631292050\",\"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\":\"12e644e34370d43dcbd4\"}", "filters": "[]", - "height": 32.0, - "width": 224.0, + "height": 32.00, + "width": 224.00, "x": 175.99, - "y": 0.0, - "z": 8000.0 + "y": 0.00, + "z": 8000.00 }, { "config": "{\"name\":\"333208c02d806d73992c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":4000}}],\"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\":\"343bf81a69c33d9e3eb8\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"343bf81a69c33d9e3eb8\",\"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\":\"7bcee36d4c5362013aa6\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "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\"}}},\"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.0, - "width": 280.0, - "x": 288.0, - "y": 0.0, - "z": 1000.0 + "height": 128.00, + "width": 280.00, + "x": 288.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"38048d1c1db54d6da5aa\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"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\":\"1b17e5a01e7b880ae3c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "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\"}}},\"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.0, - "width": 280.0, - "x": 576.0, - "y": 0.0, - "z": 0.0 + "height": 128.00, + "width": 280.00, + "x": 576.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"4cead8d4caa9b05c8784\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":2000}}],\"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\":\"343bf81a69c33d9e3eb8\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "config": "{\"name\":\"4e109b0e39930c4c0470\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.79019316682974,\"y\":0,\"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\":\"1b17e5a01e7b880ae3c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "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\"}}},\"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.0, - "width": 280.0, - "x": 576.0, - "y": 0.0, - "z": 0.0 + "height": 128.00, + "width": 280.00, + "x": 576.00, + "y": 0.00, + "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\"}}},\"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.0, - "width": 280.0, - "x": 0.0, + "height": 128.00, + "width": 280.00, + "x": 0.00, "y": 0.45, - "z": 2000.0 + "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\"}}},\"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.0, - "width": 280.0, - "x": 576.0, - "y": 0.0, - "z": 0.0 + "height": 128.00, + "width": 280.00, + "x": 576.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"71cd159a21bece9424c7\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":191.99999999999994,\"y\":0,\"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\":\"1b17e5a01e7b880ae3c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "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\"}}},\"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.0, - "width": 280.0, - "x": 576.0, - "y": 0.0, - "z": 0.0 + "height": 128.00, + "width": 280.00, + "x": 576.00, + "y": 0.00, + "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\"}}},\"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.0, - "width": 280.0, - "x": 0.0, + "height": 128.00, + "width": 280.00, + "x": 0.00, "y": 0.45, - "z": 2000.0 + "z": 2000.00 }, { "config": "{\"name\":\"799e762482b92109e5ab\",\"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\":\"12e644e34370d43dcbd4\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 48.0, - "width": 496.0, + "height": 48.00, + "width": 496.00, "x": 32.17, - "y": 13.0, - "z": 0.0 + "y": 13.00, + "z": 0.00 }, { "config": "{\"name\":\"7b88d03cd9507d2cca5a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":95.99999999999994,\"y\":0,\"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\":\"1b17e5a01e7b880ae3c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "config": "{\"name\":\"7bcee36d4c5362013aa6\",\"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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"858dce304b930b7248b8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128.4519530193671,\"width\":856,\"x\":309.9997906394788,\"y\":25,\"z\":6000,\"tabOrder\":3000}}],\"singleVisualGroup\":{\"displayName\":\"Negotiated savings\",\"groupMode\":0}}", "height": 128.45, - "width": 856.0, - "x": 310.0, - "y": 25.0, - "z": 6000.0 + "width": 856.00, + "x": 310.00, + "y": 25.00, + "z": 6000.00 }, { "config": "{\"name\":\"8fcc4fe38add79976005\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":32,\"x\":282,\"y\":21.953394989491585,\"z\":4000,\"tabOrder\":1000}}],\"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\":\"29e10622195e2a00530b\"}", "filters": "[]", - "height": 104.0, - "width": 32.0, - "x": 282.0, + "height": 104.00, + "width": 32.00, + "x": 282.00, "y": 21.95, - "z": 4000.0 + "z": 4000.00 }, { "config": "{\"name\":\"a3567e780111e60ac92c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":1048,\"x\":0.09723210130613325,\"y\":17.33768643411181,\"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\":\"1b17e5a01e7b880ae3c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 128.0, - "width": 1048.0, - "x": 0.1, + "height": 128.00, + "width": 1048.00, + "x": 0.10, "y": 17.34, - "z": 15000.0 + "z": 15000.00 }, { "config": "{\"name\":\"b15e7b5574a25051e198\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.16090108605175,\"y\":0,\"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\":\"1b17e5a01e7b880ae3c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { - "config": "{\"name\":\"b5b9703f776050bca55b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"tabOrder\":5000}}],\"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.RateOptimization/featureName/KQL.Summary'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7bcee36d4c5362013aa6\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"b5b9703f776050bca55b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"tabOrder\":5000}}],\"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/FTK$$ftkver$$/bladeName/PowerBI.RateOptimization/featureName/KQL.Summary'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7bcee36d4c5362013aa6\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"ba99cbb563d99b34c541\",\"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\":\"12e644e34370d43dcbd4\"}", "filters": "[]", - "height": 48.0, - "width": 32.0, + "height": 48.00, + "width": 32.00, "x": 416.01, "y": 34.14, - "z": 5000.0 + "z": 5000.00 }, { "config": "{\"name\":\"c1db5b40660c627010a9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":40,\"x\":263.1755372720173,\"y\":23.089271084894538,\"z\":4000,\"tabOrder\":0}}],\"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\":\"858dce304b930b7248b8\"}", "filters": "[]", - "height": 104.0, - "width": 40.0, + "height": 104.00, + "width": 40.00, "x": 263.18, "y": 23.09, - "z": 4000.0 + "z": 4000.00 }, { "config": "{\"name\":\"c1dbf4222b6e33e2d09d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":0}}],\"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\":\"343bf81a69c33d9e3eb8\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "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\"}}},\"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.0, - "width": 280.0, - "x": 0.0, + "height": 128.00, + "width": 280.00, + "x": 0.00, "y": 0.45, - "z": 2000.0 + "z": 2000.00 }, { "config": "{\"name\":\"ca54e33e2498be8684d8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"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\":\"1b17e5a01e7b880ae3c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"cca2ac570e860c603868\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.09723210130613325,\"y\":424.00000000000006,\"z\":12000,\"width\":1048,\"height\":128,\"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\":\"1b17e5a01e7b880ae3c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 128.0, - "width": 1048.0, - "x": 0.1, - "y": 424.0, - "z": 12000.0 + "height": 128.00, + "width": 1048.00, + "x": 0.10, + "y": 424.00, + "z": 12000.00 }, { "config": "{\"name\":\"d52cc78c09755360087c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"tabOrder\":3000}}],\"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\":\"7bcee36d4c5362013aa6\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "config": "{\"name\":\"d782f82cc05cc0079656\",\"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\":\"12e644e34370d43dcbd4\"}", "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.0, - "width": 144.0, + "height": 72.00, + "width": 144.00, "x": 288.01, "y": 26.14, - "z": 2000.0 + "z": 2000.00 }, { "config": "{\"name\":\"da1f789fe0a46920c473\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":40,\"x\":265.36890351136026,\"y\":25.732784449815597,\"z\":4000,\"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\":\"fadf7741149c40720430\"}", "filters": "[]", - "height": 104.0, - "width": 40.0, + "height": 104.00, + "width": 40.00, "x": 265.37, "y": 25.73, - "z": 4000.0 + "z": 4000.00 }, { "config": "{\"name\":\"dc8c9c8b119c8699e0cb\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.09723210130613325,\"y\":288,\"z\":13000,\"width\":1048,\"height\":128,\"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\":\"1b17e5a01e7b880ae3c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 128.0, - "width": 1048.0, - "x": 0.1, - "y": 288.0, - "z": 13000.0 + "height": 128.00, + "width": 1048.00, + "x": 0.10, + "y": 288.00, + "z": 13000.00 }, { "config": "{\"name\":\"dd38065e940c4d6d56c7\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"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\":\"1b17e5a01e7b880ae3c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"df31127854cc2919e00b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":200,\"x\":0,\"y\":0,\"z\":1000,\"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\":\"7bcee36d4c5362013aa6\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"dff028be133e419c8071\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":1048,\"x\":0.5037190706287902,\"y\":561.3627779549503,\"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\":\"1b17e5a01e7b880ae3c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 128.0, - "width": 1048.0, - "x": 0.5, + "height": 128.00, + "width": 1048.00, + "x": 0.50, "y": 561.36, - "z": 11000.0 + "z": 11000.00 }, { "config": "{\"name\":\"e06d4cbaca2a1bdc66d1\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":1048,\"x\":0.09723210130613325,\"y\":153.36277795495022,\"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\":\"1b17e5a01e7b880ae3c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 128.0, - "width": 1048.0, - "x": 0.1, + "height": 128.00, + "width": 1048.00, + "x": 0.10, "y": 153.36, - "z": 14000.0 + "z": 14000.00 }, { "config": "{\"name\":\"e19f3b674e0400bdbc5c\",\"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\":\"12e644e34370d43dcbd4\"}", "filters": "[]", - "height": 48.0, - "width": 32.0, + "height": 48.00, + "width": 32.00, "x": 270.31, - "y": 35.0, - "z": 6000.0 + "y": 35.00, + "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\"}}},\"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.0, - "width": 280.0, - "x": 0.0, - "y": 0.0, - "z": 2000.0 + "height": 128.00, + "width": 280.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"eb9848471a8c64d3ee22\",\"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\":\"12e644e34370d43dcbd4\"}", "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.0, - "width": 144.0, - "x": 0.0, + "height": 72.00, + "width": 144.00, + "x": 0.00, "y": 26.14, - "z": 4000.0 + "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\"}}},\"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.0, - "width": 280.0, - "x": 288.0, + "height": 128.00, + "width": 280.00, + "x": 288.00, "y": 0.03, - "z": 1000.0 + "z": 1000.00 }, { "config": "{\"name\":\"f85d0d385c00e080d2ca\",\"layouts\":[{\"id\":0,\"position\":{\"height\":40,\"width\":40,\"x\":160,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"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\":\"7bcee36d4c5362013aa6\"}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"f8be83dc110d471e0b1c\",\"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\":\"343bf81a69c33d9e3eb8\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "config": "{\"name\":\"fadf7741149c40720430\",\"layouts\":[{\"id\":0,\"position\":{\"height\":129.73278444981557,\"width\":856,\"x\":309.9997906394788,\"y\":161,\"z\":5000,\"tabOrder\":5000}}],\"singleVisualGroup\":{\"displayName\":\"CD savings\",\"groupMode\":0}}", "height": 129.73, - "width": 856.0, - "x": 310.0, - "y": 161.0, - "z": 5000.0 + "width": 856.00, + "x": 310.00, + "y": 161.00, + "z": 5000.00 }, { "config": "{\"name\":\"fc963132802bd0ca9395\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.97554712644086,\"y\":0,\"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\":\"1b17e5a01e7b880ae3c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"fd1eaa24d065d9e353bc\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":32,\"x\":543.4502955555447,\"y\":22.768666283264565,\"z\":3000,\"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\"}}}}}]}},\"parentGroupName\":\"29e10622195e2a00530b\"}", "filters": "[]", - "height": 104.0, - "width": 32.0, + "height": 104.00, + "width": 32.00, "x": 543.45, "y": 22.77, - "z": 3000.0 + "z": 3000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{\"visibility\":1}", "displayName": "Reservation recommendations (Advisor)", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "name": "1f61f5df52d086890c04", "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\"}]}]}}]}}}", - "height": 94.0, - "width": 929.0, - "x": 0.0, - "y": 117.0, - "z": 6000.0 + "height": 94.00, + "width": 929.00, + "x": 0.00, + "y": 117.00, + "z": 6000.00 }, { "config": "{\"name\":\"3dd6b0e3c052be81a415\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":48.35820895522388,\"z\":3000,\"height\":68.95522388059702,\"width\":221.19402985074626,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Subscriptions.name\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"}]},\"columnProperties\":{\"Subscriptions.name\":{\"displayName\":\"Subscription\"}},\"syncGroup\":{\"groupName\":\"name\",\"fieldChanges\":true,\"filterChanges\":true},\"drillFilterOtherVisuals\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"general\":[{\"properties\":{\"selfFilterEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"selfFilter\":{\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Contains\":{\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"}},\"Right\":{\"Literal\":{\"Value\":\"'trey'\"}}}},\"Annotations\":{\"PowerBI.MParameterBehavior\":1}}]}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"items\":[{\"properties\":{\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "height": 68.96, "width": 221.19, - "x": 0.0, + "x": 0.00, "y": 48.36, - "z": 3000.0 + "z": 3000.00 }, { "config": "{\"name\":\"44662012e2461a832965\",\"layouts\":[{\"id\":0,\"position\":{\"x\":220.76923076923077,\"y\":47.69230769230769,\"z\":1000,\"width\":333.07692307692304,\"height\":69.23076923076923,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Reservation recommendations.properties.extendedProperties.lookbackPeriod\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"AdvisorReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"properties.extendedProperties.lookbackPeriod\"},\"Name\":\"Reservation recommendations.properties.extendedProperties.lookbackPeriod\",\"NativeReferenceName\":\"Lookback Period\"}]},\"columnProperties\":{\"Reservation recommendations.properties.extendedProperties.lookbackPeriod\":{\"displayName\":\"Lookback Period\"}},\"syncGroup\":{\"groupName\":\"properties.extendedProperties.lookbackPeriod\",\"fieldChanges\":true,\"filterChanges\":true},\"drillFilterOtherVisuals\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Basic'\"}}}}}],\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"items\":[{\"properties\":{\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", @@ -728,15 +728,15 @@ "width": 333.08, "x": 220.77, "y": 47.69, - "z": 1000.0 + "z": 1000.00 }, { "config": "{\"name\":\"446d2a32011ad0a16a07\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1232,\"y\":0,\"z\":5000,\"height\":48,\"width\":48,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"image\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"imageUrl\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"reservations20879075429738325.png\"}}}}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/Microsoft_Azure_Reservations/ReservationsBrowseBlade/productType/Reservations'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", - "height": 48.0, - "width": 48.0, - "x": 1232.0, - "y": 0.0, - "z": 5000.0 + "height": 48.00, + "width": 48.00, + "x": 1232.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"70eaa557185e005dc9a7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":553.8461538461538,\"y\":47.69230769230769,\"z\":2000,\"width\":220.76923076923077,\"height\":69.23076923076923,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Reservation recommendations.properties.extendedProperties.term\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"AdvisorReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"properties.extendedProperties.term\"},\"Name\":\"Reservation recommendations.properties.extendedProperties.term\",\"NativeReferenceName\":\"Term\"}]},\"columnProperties\":{\"Reservation recommendations.properties.extendedProperties.term\":{\"displayName\":\"Term\"}},\"syncGroup\":{\"groupName\":\"properties.extendedProperties.term\",\"fieldChanges\":true,\"filterChanges\":true},\"drillFilterOtherVisuals\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Basic'\"}}}}}],\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"items\":[{\"properties\":{\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"header\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", @@ -745,737 +745,737 @@ "width": 220.77, "x": 553.85, "y": 47.69, - "z": 2000.0 + "z": 2000.00 }, { "config": "{\"name\":\"7a973b7c0070d79ad4cb\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":4000,\"height\":48,\"width\":1232,\"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\":\"'Reserved instances'\"}}},\"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\":{\"Literal\":{\"Value\":\"'#0078d4'\"}}}}},\"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\"}}}}}]}}}", - "height": 48.0, - "width": 1232.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 48.00, + "width": 1232.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"a52b24a885cd554e205a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":211,\"z\":0,\"height\":509,\"width\":1280,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Subscriptions.name\"},{\"queryRef\":\"Reservation recommendations.properties.extendedProperties.displayQty\"},{\"queryRef\":\"Reservation recommendations.recommendedActions\"},{\"queryRef\":\"Reservation recommendations.properties.extendedProperties.term\"},{\"queryRef\":\"Reservation recommendations.properties.extendedProperties.lookbackPeriod\"},{\"queryRef\":\"Reservation recommendations.properties.lastUpdated\"},{\"queryRef\":\"Sum(Reservation recommendations.properties.extendedProperties.savingsAmount)\"},{\"queryRef\":\"Sum(Reservation recommendations.properties.extendedProperties.annualSavingsAmount)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0},{\"Name\":\"r\",\"Entity\":\"AdvisorReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"properties.extendedProperties.displayQty\"},\"Name\":\"Reservation recommendations.properties.extendedProperties.displayQty\",\"NativeReferenceName\":\"Recommended quantity\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"recommendedActions\"},\"Name\":\"Reservation recommendations.recommendedActions\",\"NativeReferenceName\":\"Recommended actions\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"properties.extendedProperties.term\"},\"Name\":\"Reservation recommendations.properties.extendedProperties.term\",\"NativeReferenceName\":\"Term\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"properties.extendedProperties.lookbackPeriod\"},\"Name\":\"Reservation recommendations.properties.extendedProperties.lookbackPeriod\",\"NativeReferenceName\":\"Look-back period\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"properties.lastUpdated\"},\"Name\":\"Reservation recommendations.properties.lastUpdated\",\"NativeReferenceName\":\"Last updated\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"properties.extendedProperties.savingsAmount\"}},\"Function\":0},\"Name\":\"Sum(Reservation recommendations.properties.extendedProperties.savingsAmount)\",\"NativeReferenceName\":\"Potential monthly savings\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"properties.extendedProperties.annualSavingsAmount\"}},\"Function\":0},\"Name\":\"Sum(Reservation recommendations.properties.extendedProperties.annualSavingsAmount)\",\"NativeReferenceName\":\"Potential yearly savings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"}}}]},\"columnProperties\":{\"Subscriptions.name\":{\"displayName\":\"Subscription\"},\"Reservation recommendations.properties.extendedProperties.displayQty\":{\"displayName\":\"Recommended quantity\"},\"Reservation recommendations.recommendedActions\":{\"displayName\":\"Recommended actions\"},\"Reservation recommendations.properties.extendedProperties.term\":{\"displayName\":\"Term\"},\"Reservation recommendations.properties.extendedProperties.lookbackPeriod\":{\"displayName\":\"Look-back period\"},\"Reservation recommendations.properties.lastUpdated\":{\"displayName\":\"Last updated\"},\"Sum(Reservation recommendations.properties.extendedProperties.savingsAmount)\":{\"displayName\":\"Potential monthly savings\"},\"Sum(Reservation recommendations.properties.extendedProperties.annualSavingsAmount)\":{\"displayName\":\"Potential yearly savings\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"values\":[{\"properties\":{\"urlIcon\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", - "height": 509.0, - "width": 1280.0, - "x": 0.0, - "y": 211.0, - "z": 0.0 + "height": 509.00, + "width": 1280.00, + "x": 0.00, + "y": 211.00, + "z": 0.00 }, { "config": "{\"name\":\"f27a41b4762b17087546\",\"layouts\":[{\"id\":0,\"position\":{\"x\":929,\"y\":117,\"z\":7000,\"height\":94,\"width\":351,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Reservation recommendations.properties.extendedProperties.annualSavingsAmount)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"AdvisorReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"properties.extendedProperties.annualSavingsAmount\"}},\"Function\":0},\"Name\":\"Sum(Reservation recommendations.properties.extendedProperties.annualSavingsAmount)\",\"NativeReferenceName\":\"Sum of properties.extendedProperties.annualSavingsAmount\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"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\":\"25D\"}}},\"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 based on retail pricing'\"}}},\"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": 94.0, - "width": 351.0, - "x": 929.0, - "y": 117.0, - "z": 7000.0 + "height": 94.00, + "width": 351.00, + "x": 929.00, + "y": 117.00, + "z": 7000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{\"filterSortOrder\":3}", "displayName": "Total savings", "displayOption": 1, "filters": "[{\"name\":\"68e54eb30ea0b997c5b6\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_AmortizationCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_AmortizationCategory\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Principal'\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"ordinal\":0}]", - "height": 720.0, + "height": 720.00, "name": "3cbf81f1080b0db490a6", "ordinal": 2, "visualContainers": [ { "config": "{\"name\":\"173b4b1753b5709304e8\",\"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\":\"24cca8008edbea088959\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "config": "{\"name\":\"22fa722fecd24030e73d\",\"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\":\"24cca8008edbea088959\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"24cca8008edbea088959\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.39572239294395,\"y\":8.005493854933814,\"z\":0,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, + "height": 704.00, "width": 1048.09, - "x": 215.4, + "x": 215.40, "y": 8.01, - "z": 0.0 + "z": 0.00 }, { "config": "{\"name\":\"2597bea8781d00a06d18\",\"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\":\"24cca8008edbea088959\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "config": "{\"name\":\"2cb300aa101571865126\",\"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\":\"24cca8008edbea088959\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "config": "{\"name\":\"2d2468b515080e843977\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1080,\"y\":600.4118933475849,\"z\":17000,\"width\":184,\"height\":72,\"tabOrder\":16000}}],\"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\":\"24D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Unused spend commit'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", "filters": "[{\"name\":\"0ae31a59c0136927c7a8\",\"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\":{}},{\"name\":\"477f0c34056077677660\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountCategory\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Spend'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"e53402c30c72a50e8645\",\"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\":{}}]", - "height": 72.0, - "width": 184.0, - "x": 1080.0, + "height": 72.00, + "width": 184.00, + "x": 1080.00, "y": 600.41, - "z": 17000.0 + "z": 17000.00 }, { "config": "{\"name\":\"3c072a08e50acb012d50\",\"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\":\"24cca8008edbea088959\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"41472f1f252b0790508a\",\"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\":\"24cca8008edbea088959\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "config": "{\"name\":\"41af37086a0c0b930977\",\"layouts\":[{\"id\":0,\"position\":{\"x\":887.9999999999999,\"y\":392,\"z\":6000,\"width\":376,\"height\":320,\"tabOrder\":17001}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Effective cost breakdown\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"color\":\"#000000\"}}],\"horizontalTextAlignment\":\"center\"},{\"textRuns\":[{\"value\":\" \",\"textStyle\":{\"fontSize\":\"32pt\"}}],\"horizontalTextAlignment\":\"center\"},{\"textRuns\":[{\"value\":\" \",\"textStyle\":{\"fontSize\":\"32pt\"}}],\"horizontalTextAlignment\":\"center\"},{\"textRuns\":[{\"value\":\" \",\"textStyle\":{\"fontSize\":\"32pt\"}}],\"horizontalTextAlignment\":\"center\"},{\"textRuns\":[{\"value\":\" \",\"textStyle\":{\"fontSize\":\"32pt\"}}],\"horizontalTextAlignment\":\"center\"},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"←\",\"textStyle\":{\"fontFamily\":\"Calibri\",\"fontSize\":\"8pt\",\"color\":\"#808080\"}},{\"value\":\" Select a row to view the breakdown per month\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#808080\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"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\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}]}}}", "filters": "[]", - "height": 320.0, - "width": 376.0, - "x": 888.0, - "y": 392.0, - "z": 6000.0 + "height": 320.00, + "width": 376.00, + "x": 888.00, + "y": 392.00, + "z": 6000.00 }, { "config": "{\"name\":\"43f4d7ac06a98a5a3ae0\",\"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\":\"24cca8008edbea088959\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "config": "{\"name\":\"50d5e693334c5c9508ad\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":200,\"x\":0,\"y\":0,\"z\":1000,\"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\":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\":\"ccddc32a0820e76ba271\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { - "config": "{\"name\":\"5920cbf526b502435de2\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.RateOptimization/featureName/KQL.TotalSavings'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"ccddc32a0820e76ba271\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"5920cbf526b502435de2\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK$$ftkver$$/bladeName/PowerBI.RateOptimization/featureName/KQL.TotalSavings'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"ccddc32a0820e76ba271\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"5ca51dfcdc24708daeca\",\"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\":\"5f46d14fb13958111630\"}", "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "config": "{\"name\":\"5e69a8f02eee27708432\",\"layouts\":[{\"id\":0,\"position\":{\"height\":40,\"width\":40,\"x\":160,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"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#total-savings'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"ccddc32a0820e76ba271\"}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"5f46d14fb13958111630\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"ccddc32a0820e76ba271\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"62c9148371e6505d18a7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1080,\"y\":8,\"z\":11000,\"width\":184,\"height\":88,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"ℹ️ If you see 0 savings for reservations, export prices from Cost Management and re-ingest costs in Data Factory.\",\"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.0, - "width": 184.0, - "x": 1080.0, - "y": 8.0, - "z": 11000.0 + "height": 88.00, + "width": 184.00, + "x": 1080.00, + "y": 8.00, + "z": 11000.00 }, { "config": "{\"name\":\"644725f1c79388e1a605\",\"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\":\"24cca8008edbea088959\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"662ad19f01006d8779a4\",\"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\":\"5f46d14fb13958111630\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "config": "{\"name\":\"6862c020b4047acd8537\",\"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\":\"24cca8008edbea088959\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"6abff50fd24cd639e0ca\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":192,\"x\":0,\"y\":0,\"z\":5000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Total savings\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Track cost savings from negotiated and commitment discounts over time.\",\"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\":\"ccddc32a0820e76ba271\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"7653194885821eb6d22c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":8000,\"width\":184,\"height\":88,\"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}}}]},\"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\":\"'List cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[]", - "height": 88.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 8000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 8000.00 }, { "config": "{\"name\":\"7edd5a8576bb7b7ab1aa\",\"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\":\"24cca8008edbea088959\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"80a7cb8db0e8b2c51b51\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":3000,\"width\":1048,\"height\":280,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"lineStackedColumnComboChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.x_ReportingDate\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.x_TotalSavings)\"}],\"Y2\":[{\"queryRef\":\"Costs.x_EffectiveSavingsRate\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"},\"Name\":\"Costs.x_ReportingDate\",\"NativeReferenceName\":\"x_ReportingDate\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_TotalSavings)\",\"NativeReferenceName\":\"Discount\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveSavingsRate\"},\"Name\":\"Costs.x_EffectiveSavingsRate\",\"NativeReferenceName\":\"Effective Savings Rate\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"}}}]},\"columnProperties\":{\"Sum(Costs.x_TotalSavings)\":{\"displayName\":\"Discount\"},\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Cost\"},\"Costs.x_EffectiveSavingsRate\":{\"displayName\":\"Effective Savings Rate\"},\"Sum(Costs.x_TotalDiscountPercent)\":{\"displayName\":\"Discount %\"}},\"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'\"}}},\"showTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"zoom\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountProgram\"}},\"Right\":{\"Literal\":{\"Value\":\"'Reservation'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountProgram\"}},\"Right\":{\"Literal\":{\"Value\":\"'Savings plan'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":6,\"Percent\":0}}}}}},\"selector\":{\"metadata\":\"Sum(Costs.EffectiveCost)\"}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":4,\"Percent\":0}}}}}},\"selector\":{\"metadata\":\"Sum(Costs.x_TotalSavings)\"}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}},\"selector\":{\"metadata\":\"Costs.x_EffectiveSavingsRate\"}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", "filters": "[]", - "height": 280.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { "config": "{\"name\":\"80c32d7b385709957586\",\"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\":\"24cca8008edbea088959\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"86b432dd447ea21c6779\",\"layouts\":[{\"id\":0,\"position\":{\"x\":888.0000022434344,\"y\":515.2421122161733,\"z\":14000,\"width\":184,\"height\":72,\"tabOrder\":13000}}],\"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\":\"24D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Committed usage'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", "filters": "[{\"name\":\"0ae31a59c0136927c7a8\",\"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\":{}},{\"name\":\"477f0c34056077677660\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountCategory\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Usage'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 72.0, - "width": 184.0, - "x": 888.0, + "height": 72.00, + "width": 184.00, + "x": 888.00, "y": 515.24, - "z": 14000.0 + "z": 14000.00 }, { "config": "{\"name\":\"889623c01ebddde5c634\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1079.9999954377045,\"y\":432.58416663418336,\"z\":13000,\"width\":184,\"height\":72,\"tabOrder\":12000}}],\"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\":\"24D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Spot cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", "filters": "[{\"name\":\"0ae31a59c0136927c7a8\",\"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\":\"'Dynamic'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 72.0, - "width": 184.0, - "x": 1080.0, + "height": 72.00, + "width": 184.00, + "x": 1080.00, "y": 432.58, - "z": 13000.0 + "z": 13000.00 }, { "config": "{\"name\":\"89f4ca0d40c7906a01e0\",\"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\":\"24cca8008edbea088959\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"9e423f10a0795b072ee8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":0}}],\"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\":\"5f46d14fb13958111630\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "config": "{\"name\":\"a866466455a96bc58576\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":4000}}],\"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\":\"5f46d14fb13958111630\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"b74c9daca1ad1152313c\",\"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\":\"24cca8008edbea088959\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "config": "{\"name\":\"b8dc0e5cc52e60d80030\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":8,\"z\":4000,\"width\":176,\"height\":88,\"tabOrder\":9000}}],\"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.0, - "width": 176.0, - "x": 792.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 176.00, + "x": 792.00, + "y": 8.00, + "z": 4000.00 }, { "config": "{\"name\":\"c49dfbdb0c2263602ee0\",\"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\":\"ccddc32a0820e76ba271\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "config": "{\"name\":\"c5ee1576dd037d58ca0d\",\"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\":\"24cca8008edbea088959\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "config": "{\"name\":\"c6f1943bd5664e5d0810\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":5000,\"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.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 5000.00 }, { "config": "{\"name\":\"ccddc32a0820e76ba271\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":2000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"cd692f930e90dd837499\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":7000,\"width\":184,\"height\":88,\"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\":\"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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 7000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 7000.00 }, { "config": "{\"name\":\"cd834e5c007a9e09215a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1080.0000022434344,\"y\":515.9807378663684,\"z\":15000,\"width\":184,\"height\":72,\"tabOrder\":14000}}],\"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\":\"24D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Committed spend'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", "filters": "[{\"name\":\"0ae31a59c0136927c7a8\",\"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\":{}},{\"name\":\"477f0c34056077677660\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountCategory\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Spend'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 72.0, - "width": 184.0, - "x": 1080.0, + "height": 72.00, + "width": 184.00, + "x": 1080.00, "y": 515.98, - "z": 15000.0 + "z": 15000.00 }, { "config": "{\"name\":\"cea294b40c601d302809\",\"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\":\"24cca8008edbea088959\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"d514f2c97ce4bb3569c2\",\"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\":\"24cca8008edbea088959\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "config": "{\"name\":\"d996c64a66540ca4e687\",\"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\":\"ccddc32a0820e76ba271\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"e24a847d8a17aa90bb3e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":887.9999999999991,\"y\":599.6732676973897,\"z\":16000,\"width\":184,\"height\":72,\"tabOrder\":15000}}],\"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\":\"24D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Unused usage commit'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", "filters": "[{\"name\":\"0ae31a59c0136927c7a8\",\"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\":{}},{\"name\":\"477f0c34056077677660\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountCategory\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Usage'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"897a8dbb0a34d3aeeaea\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'Unused'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 72.0, - "width": 184.0, - "x": 888.0, + "height": 72.00, + "width": 184.00, + "x": 888.00, "y": 599.67, - "z": 16000.0 + "z": 16000.00 }, { "config": "{\"name\":\"ebad6cf83531d703e926\",\"layouts\":[{\"id\":0,\"position\":{\"x\":384,\"y\":40,\"z\":10000,\"width\":40,\"height\":56,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"−\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"20pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Minus'\"}}}}}]}}}", "filters": "[]", - "height": 56.0, - "width": 40.0, - "x": 384.0, - "y": 40.0, - "z": 10000.0 + "height": 56.00, + "width": 40.00, + "x": 384.00, + "y": 40.00, + "z": 10000.00 }, { "config": "{\"name\":\"ef550e53e3d3400be9ac\",\"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\":\"24cca8008edbea088959\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"f304dd8d053bc224a04b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":2000}}],\"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\":\"5f46d14fb13958111630\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { - "config": "{\"name\":\"f723298448c05c60aecc\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":2000,\"width\":664,\"height\":320,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"pivotTable\",\"projections\":{\"Rows\":[{\"queryRef\":\"Costs.x_ChargeMonth\",\"active\":true},{\"queryRef\":\"Costs.BillingAccountName\"}],\"Values\":[{\"queryRef\":\"Sum(Costs.ListCost)\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.x_CommitmentDiscountSavings)\"},{\"queryRef\":\"Costs.x_EffectiveSavingsRate\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ChargeMonth\"},\"Name\":\"Costs.x_ChargeMonth\",\"NativeReferenceName\":\"Month\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"List cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"Contracted cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"Savings\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveSavingsRate\"},\"Name\":\"Costs.x_EffectiveSavingsRate\",\"NativeReferenceName\":\"ESR\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BillingAccountName\"},\"Name\":\"Costs.BillingAccountName\",\"NativeReferenceName\":\"Billing account\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ChargeMonth\"}}}]},\"expansionStates\":[{\"roles\":[\"Rows\"],\"levels\":[{\"queryRefs\":[\"Costs.x_ChargeMonth\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_ChargeMonth\"}}],\"isPinned\":true},{\"queryRefs\":[\"Costs.BillingAccountName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"Sum(Costs.ContractedCost)\":{\"displayName\":\"Contracted cost\"},\"Sum(Costs.x_CommitmentDiscountSavings)\":{\"displayName\":\"Savings\"},\"Costs.x_EffectiveSavingsRate\":{\"displayName\":\"ESR\"},\"Costs.x_ChargeMonth\":{\"displayName\":\"Month\"},\"Sum(Costs.ListCost)\":{\"displayName\":\"List cost\"},\"Costs.BillingAccountName\":{\"displayName\":\"Billing account\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"values\":[{\"properties\":{\"wordWrap\":{\"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\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", + "config": "{\"name\":\"f723298448c05c60aecc\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":2000,\"width\":664,\"height\":320,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"pivotTable\",\"projections\":{\"Rows\":[{\"queryRef\":\"Costs.x_ChargeMonth\",\"active\":true},{\"queryRef\":\"Costs.BillingAccountName\"}],\"Values\":[{\"queryRef\":\"Sum(Costs.ListCost)\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.x_TotalSavings)\"},{\"queryRef\":\"Costs.x_EffectiveSavingsRate\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ChargeMonth\"},\"Name\":\"Costs.x_ChargeMonth\",\"NativeReferenceName\":\"Month\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"List cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"Contracted cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveSavingsRate\"},\"Name\":\"Costs.x_EffectiveSavingsRate\",\"NativeReferenceName\":\"ESR\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BillingAccountName\"},\"Name\":\"Costs.BillingAccountName\",\"NativeReferenceName\":\"Billing account\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_TotalSavings)\",\"NativeReferenceName\":\"Savings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ChargeMonth\"}}}]},\"expansionStates\":[{\"roles\":[\"Rows\"],\"levels\":[{\"queryRefs\":[\"Costs.x_ChargeMonth\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_ChargeMonth\"}}],\"isPinned\":true},{\"queryRefs\":[\"Costs.BillingAccountName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"Sum(Costs.ContractedCost)\":{\"displayName\":\"Contracted cost\"},\"Costs.x_EffectiveSavingsRate\":{\"displayName\":\"ESR\"},\"Costs.x_ChargeMonth\":{\"displayName\":\"Month\"},\"Sum(Costs.ListCost)\":{\"displayName\":\"List cost\"},\"Costs.BillingAccountName\":{\"displayName\":\"Billing account\"},\"Sum(Costs.x_TotalSavings)\":{\"displayName\":\"Savings\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"values\":[{\"properties\":{\"wordWrap\":{\"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\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[]", - "height": 320.0, - "width": 664.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 320.00, + "width": 664.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 }, { "config": "{\"name\":\"fa0e8054056bc9039d92\",\"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\":\"24cca8008edbea088959\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "config": "{\"name\":\"fce8dba143de7e7d3eeb\",\"layouts\":[{\"id\":0,\"position\":{\"x\":576,\"y\":40,\"z\":9000,\"width\":40,\"height\":56,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"20pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Equals'\"}}}}}]}}}", "filters": "[]", - "height": 56.0, - "width": 40.0, - "x": 576.0, - "y": 40.0, - "z": 9000.0 + "height": 56.00, + "width": 40.00, + "x": 576.00, + "y": 40.00, + "z": 9000.00 }, { "config": "{\"name\":\"ffb126a39b44ab0960c0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":887.9999999999999,\"y\":432,\"z\":12000,\"width\":184,\"height\":72,\"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\":\"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\":\"24D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'On-demand cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", "filters": "[{\"name\":\"0ae31a59c0136927c7a8\",\"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\":\"'Standard'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 72.0, - "width": 184.0, - "x": 888.0, - "y": 432.0, - "z": 12000.0 + "height": 72.00, + "width": 184.00, + "x": 888.00, + "y": 432.00, + "z": 12000.00 } ], - "width": 1280.0 + "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.0, + "height": 216.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 (for example, 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\"}}}}}]}}}", + "config": "{\"name\":\"9482240e3012299b9327\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":320,\"height\":216,\"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 (for example, ACD, MACC, EDP) were applied.\",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"ℹ️ \",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\"Important:\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\" Savings may not match ListCost - ContractedCost due to missing and incorrect costs coming from Cost Management. \",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"See also: \",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\"Known data quality issues\",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"},\"url\":\"https://github.com/microsoft/finops-toolkit/issues/1111\"},{\"value\":\".\",\"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.0, - "width": 320.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 216.00, + "width": 320.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 } ], - "width": 320.0 + "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.0, + "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 (for example, ACD, MACC, EDP) \",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\"and\",\"textStyle\":{\"fontStyle\":\"italic\",\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\" commitment discounts (for example, 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.0, - "width": 320.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 160.00, + "width": 320.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 } ], - "width": 320.0 + "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.0, + "height": 160.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 (for example, ACD, MACC, EDP) and \",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\"no \",\"textStyle\":{\"fontWeight\":\"bold\",\"fontStyle\":\"italic\",\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\"commitment discounts (for example, 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\"}}}}}]}}}", + "config": "{\"name\":\"9cd5a2a71996803dd091\",\"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\":\"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 (for example, ACD, MACC, EDP) and \",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\"no \",\"textStyle\":{\"fontWeight\":\"bold\",\"fontStyle\":\"italic\",\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\"commitment discounts (for example, 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.0, - "width": 320.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 160.00, + "width": 320.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 } ], - "width": 320.0 + "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.0, + "height": 232.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 (for example, ACD, MACC, EDP) \",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\"and\",\"textStyle\":{\"fontStyle\":\"italic\",\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\" commitment discounts (for example, 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\"}}}}}]}}}", + "config": "{\"name\":\"513801b390ee6275d3b3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":320,\"height\":232,\"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 (for example, ACD, MACC, EDP) \",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\"and\",\"textStyle\":{\"fontStyle\":\"italic\",\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\" commitment discounts (for example, reservations, savings plans).\",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"ℹ️ \",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\"Important:\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\" Savings may not match ListCost - EffectiveCost due to missing and incorrect costs coming from Cost Management. \",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"See also: \",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\"Known data quality issues\",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"},\"url\":\"https://github.com/microsoft/finops-toolkit/issues/1111\"},{\"value\":\".\",\"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.0, - "width": 320.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 232.00, + "width": 320.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 } ], - "width": 320.0 + "width": 320.00 }, { "config": "{}", "displayName": "Get started", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "name": "ReportSection04cb7247170034c13d74", "visualContainers": [ { "config": "{\"name\":\"032ea6f679cf4ca8c9d3\",\"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\":\"4a76adff6013c40708cc\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 80.0, - "width": 1232.0, - "x": 0.0, - "y": 192.0, - "z": 17000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 192.00, + "z": 17000.00 }, { "config": "{\"name\":\"0590e9cb99281af3a785\",\"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\":\"Rate 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.5, + "width": 852.50, "x": 211.67, "y": 24.17, - "z": 6000.0 + "z": 6000.00 }, { "config": "{\"name\":\"077752b33bf94290a16d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":272,\"height\":176,\"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.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\":\"610e4f32159cbae3f55d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 176.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 2000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"0a648347fe019afeb8ba\",\"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\":\"4a76adff6013c40708cc\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 768.0, - "y": 0.0, - "z": 4000.0 + "height": 696.00, + "width": 80.00, + "x": 768.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"18dcc93309a9078698af\",\"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\":\"4a76adff6013c40708cc\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 96.0, - "y": 0.0, - "z": 11000.0 + "height": 696.00, + "width": 80.00, + "x": 96.00, + "y": 0.00, + "z": 11000.00 }, { "config": "{\"name\":\"1ba004be1896c6c24afb\",\"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\":\"4a76adff6013c40708cc\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 672.0, - "y": 0.0, - "z": 5000.0 + "height": 696.00, + "width": 80.00, + "x": 672.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"1e5b2e578915e12f366f\",\"layouts\":[{\"id\":0,\"position\":{\"x\":241.1344412182266,\"y\":487.99999628892874,\"z\":125,\"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\":\"ced05df8e4755ccc7b4d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 96.0, + "height": 32.00, + "width": 96.00, "x": 241.13, - "y": 488.0, - "z": 125.0 + "y": 488.00, + "z": 125.00 }, { "config": "{\"name\":\"24cc53eff38cacdca835\",\"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\":\"4a76adff6013c40708cc\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 864.0, - "y": 0.0, - "z": 3000.0 + "height": 696.00, + "width": 80.00, + "x": 864.00, + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"2e6bfd7415798df93c37\",\"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\":\"4a76adff6013c40708cc\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 960.0, - "y": 0.0, - "z": 2000.0 + "height": 696.00, + "width": 80.00, + "x": 960.00, + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"2e6c4b399e4d6863a1fc\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":272,\"height\":176,\"tabOrder\":13}}],\"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\":\"f7adac54f7e8018c45a4\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 176.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 3000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"3413acbcf0f09a04f40c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":736,\"x\":40,\"y\":40,\"z\":3000,\"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\":\"ced05df8e4755ccc7b4d\"}", "filters": "[]", - "height": 48.0, - "width": 736.0, - "x": 40.0, - "y": 40.0, - "z": 3000.0 + "height": 48.00, + "width": 736.00, + "x": 40.00, + "y": 40.00, + "z": 3000.00 }, { "config": "{\"name\":\"3706013d62b47e9dfa6b\",\"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\":\"4a76adff6013c40708cc\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 80.0, - "width": 1232.0, - "x": 0.0, - "y": 0.0, - "z": 19000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 0.00, + "z": 19000.00 }, { "config": "{\"name\":\"3b60c6bf96e5bca1fdf6\",\"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\":\"610e4f32159cbae3f55d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 24.0, - "width": 152.0, - "x": 0.0, - "y": 288.0, - "z": 1000.0 + "height": 24.00, + "width": 152.00, + "x": 0.00, + "y": 288.00, + "z": 1000.00 }, { "config": "{\"name\":\"44c9a31e29957c955fad\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":304,\"z\":4000,\"width\":272,\"height\":368,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Connect copy\",\"groupMode\":0,\"isHidden\":false}}", - "height": 368.0, - "width": 272.0, - "x": 216.0, - "y": 304.0, - "z": 4000.0 + "height": 368.00, + "width": 272.00, + "x": 216.00, + "y": 304.00, + "z": 4000.00 }, { "config": "{\"name\":\"44fbe414495555242a73\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":288,\"z\":1000,\"width\":160,\"height\":24,\"tabOrder\":1}}],\"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\":\"f7adac54f7e8018c45a4\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 24.0, - "width": 160.0, - "x": 0.0, - "y": 288.0, - "z": 1000.0 + "height": 24.00, + "width": 160.00, + "x": 0.00, + "y": 288.00, + "z": 1000.00 }, { "config": "{\"name\":\"468b5abe48ff3c6a882c\",\"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\":\"ea801701f96a5dfabd48\"}", "filters": "[]", - "height": 48.0, - "width": 736.0, - "x": 40.0, - "y": 40.0, - "z": 3000.0 + "height": 48.00, + "width": 736.00, + "x": 40.00, + "y": 40.00, + "z": 3000.00 }, { "config": "{\"name\":\"4a76adff6013c40708cc\",\"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.0, - "width": 1232.0, - "x": 24.0, - "y": 16.0, - "z": 0.0 + "height": 696.00, + "width": 1232.00, + "x": 24.00, + "y": 16.00, + "z": 0.00 }, { - "config": "{\"name\":\"4d9524e768ccf8a22f78\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1064,\"y\":688,\"z\":1250,\"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\":\"'da0a4620bf1d33e2775e'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"4d9524e768ccf8a22f78\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1064,\"y\":688,\"z\":1250,\"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/FTK$$ftkver$$'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'da0a4620bf1d33e2775e'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 88.0, - "x": 1064.0, - "y": 688.0, - "z": 1250.0 + "height": 32.00, + "width": 88.00, + "x": 1064.00, + "y": 688.00, + "z": 1250.00 }, { "config": "{\"name\":\"5420a33794d01b79173d\",\"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\":\"44c9a31e29957c955fad\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 176.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 2000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"5bcbbb35a35ec0ecfa1d\",\"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'\"}}}}}]}}}", @@ -1484,3770 +1484,3779 @@ "width": 194.17, "x": 213.33, "y": 8.33, - "z": 7000.0 + "z": 7000.00 }, { "config": "{\"name\":\"5c96e5507ec407d4d327\",\"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\":\"4a76adff6013c40708cc\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 80.0, - "width": 1232.0, - "x": 0.0, - "y": 480.0, - "z": 14000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 480.00, + "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 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.0, - "width": 848.0, - "x": 216.0, - "y": 112.0, - "z": 5000.0 + "height": 176.00, + "width": 848.00, + "x": 216.00, + "y": 112.00, + "z": 5000.00 }, { "config": "{\"name\":\"610e4f32159cbae3f55d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":304,\"z\":2000,\"width\":272.0000000000001,\"height\":312,\"tabOrder\":7000}}],\"singleVisualGroup\":{\"displayName\":\"Get data copy\",\"groupMode\":0,\"isHidden\":false}}", - "height": 312.0, - "width": 272.0, - "x": 792.0, - "y": 304.0, - "z": 2000.0 + "height": 312.00, + "width": 272.00, + "x": 792.00, + "y": 304.00, + "z": 2000.00 }, { "config": "{\"name\":\"6e6a624ac563a193500f\",\"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\":\"4a76adff6013c40708cc\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 80.0, - "width": 1232.0, - "x": 0.0, - "y": 576.0, - "z": 13000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 576.00, + "z": 13000.00 }, { "config": "{\"name\":\"759a125373a216bf6d7d\",\"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\":\"ced05df8e4755ccc7b4d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", "height": 560.55, "width": 852.33, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"76ebf402eaea1938a55d\",\"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\":\"ea801701f96a5dfabd48\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", "height": 560.55, "width": 852.33, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"798136b5a82a10b4ccde\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":32,\"x\":784,\"y\":48,\"z\":2000,\"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\":\"'9b12f4a45372b68afac4'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Close button'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"ced05df8e4755ccc7b4d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 32.0, - "x": 784.0, - "y": 48.0, - "z": 2000.0 + "height": 32.00, + "width": 32.00, + "x": 784.00, + "y": 48.00, + "z": 2000.00 }, { "config": "{\"name\":\"818c372618708f066807\",\"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\":\"4a76adff6013c40708cc\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 192.0, - "y": 0.0, - "z": 10000.0 + "height": 696.00, + "width": 80.00, + "x": 192.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"87e1cbfe3059a7604c1e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":192,\"z\":0,\"width\":247.99999999999997,\"height\":176,\"tabOrder\":19}}],\"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\":\"f7adac54f7e8018c45a4\"}", "filters": "[]", - "height": 176.0, - "width": 248.0, - "x": 0.0, - "y": 192.0, - "z": 0.0 + "height": 176.00, + "width": 248.00, + "x": 0.00, + "y": 192.00, + "z": 0.00 }, { "config": "{\"name\":\"898f20562c3d6901b997\",\"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. If your data is in a storage account, 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:\",\"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. \"}]},{\"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 for reservation cost savings.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Reservation recommendations − Required for the reservation recommendations page.\"}],\"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 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.\"}],\"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'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"ea801701f96a5dfabd48\"}", "filters": "[]", - "height": 424.0, - "width": 776.0, - "x": 40.0, - "y": 96.0, - "z": 1000.0 + "height": 424.00, + "width": 776.00, + "x": 40.00, + "y": 96.00, + "z": 1000.00 }, { "config": "{\"name\":\"8f7d0bcf6d2ad2eaace5\",\"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\":\"4a76adff6013c40708cc\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 1152.0, - "y": 0.0, - "z": 0.0 + "height": 696.00, + "width": 80.00, + "x": 1152.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"90a16f3b99ae5a24aeaf\",\"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\":\"4a76adff6013c40708cc\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 80.0, - "width": 1232.0, - "x": 0.0, - "y": 384.0, - "z": 15000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 384.00, + "z": 15000.00 }, { "config": "{\"name\":\"950683b70ed8b034026d\",\"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\":\"4a76adff6013c40708cc\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 480.0, - "y": 0.0, - "z": 7000.0 + "height": 696.00, + "width": 80.00, + "x": 480.00, + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"9b711a59be4c2dd17c65\",\"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\":\"4a76adff6013c40708cc\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 0.0, - "y": 0.0, - "z": 12000.0 + "height": 696.00, + "width": 80.00, + "x": 0.00, + "y": 0.00, + "z": 12000.00 }, { "config": "{\"name\":\"9cf05024f2801d161826\",\"layouts\":[{\"id\":0,\"position\":{\"x\":8,\"y\":687.9999999999999,\"z\":1750,\"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.0, - "width": 96.0, - "x": 8.0, - "y": 688.0, - "z": 1750.0 + "height": 32.00, + "width": 96.00, + "x": 8.00, + "y": 688.00, + "z": 1750.00 }, { "config": "{\"name\":\"a83df0e382dc4c3e5f14\",\"layouts\":[{\"id\":0,\"position\":{\"x\":40,\"y\":96,\"z\":1000,\"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\",\"color\":\"#6f4bb2\"},\"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\",\"color\":\"#6f4bb2\"},\"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\",\"color\":\"#6f4bb2\"},\"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\",\"color\":\"#6f4bb2\"},\"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\",\"color\":\"#6f4bb2\"},\"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\":\"ced05df8e4755ccc7b4d\"}", "filters": "[]", - "height": 384.0, - "width": 776.0, - "x": 40.0, - "y": 96.0, - "z": 1000.0 + "height": 384.00, + "width": 776.00, + "x": 40.00, + "y": 96.00, + "z": 1000.00 }, { - "config": "{\"name\":\"aa99304da47e589cd63c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":41.13444121822661,\"y\":487.99999628892874,\"z\":500,\"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\":\"ced05df8e4755ccc7b4d\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"aa99304da47e589cd63c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":41.13444121822661,\"y\":487.99999628892874,\"z\":500,\"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/FTK$$ftkver$$'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Clear filters'\"}}}}}]}},\"parentGroupName\":\"ced05df8e4755ccc7b4d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 88.0, + "height": 32.00, + "width": 88.00, "x": 41.13, - "y": 488.0, - "z": 500.0 + "y": 488.00, + "z": 500.00 }, { "config": "{\"name\":\"bcd7f978567637981e38\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1.1368683772161603e-13,\"y\":192.00000000000006,\"z\":0,\"width\":272,\"height\":96,\"tabOrder\":11}}],\"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\":\"610e4f32159cbae3f55d\"}", "filters": "[]", - "height": 96.0, - "width": 272.0, - "x": 0.0, - "y": 192.0, - "z": 0.0 + "height": 96.00, + "width": 272.00, + "x": 0.00, + "y": 192.00, + "z": 0.00 }, { "config": "{\"name\":\"bea8ca6e90e6071b994f\",\"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\":\"4a76adff6013c40708cc\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 1056.0, - "y": 0.0, - "z": 1000.0 + "height": 696.00, + "width": 80.00, + "x": 1056.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"c33c130285f92b99293c\",\"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\":\"4a76adff6013c40708cc\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 576.0, - "y": 0.0, - "z": 6000.0 + "height": 696.00, + "width": 80.00, + "x": 576.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"c33fc8702668a013d84d\",\"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\":\"f7adac54f7e8018c45a4\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 176.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 2000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"c3db07d32c37511e85b4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":137.1344412182266,\"y\":487.99999628892874,\"z\":250,\"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\":\"ced05df8e4755ccc7b4d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 96.0, + "height": 32.00, + "width": 96.00, "x": 137.13, - "y": 488.0, - "z": 250.0 + "y": 488.00, + "z": 250.00 }, { "config": "{\"name\":\"cba5aec8c4915d55714f\",\"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\":\"4a76adff6013c40708cc\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 288.0, - "y": 0.0, - "z": 9000.0 + "height": 696.00, + "width": 80.00, + "x": 288.00, + "y": 0.00, + "z": 9000.00 }, { "config": "{\"name\":\"ced05df8e4755ccc7b4d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":214.8655587817734,\"y\":112.00000371107124,\"z\":12000,\"width\":852.3287671232878,\"height\":560.5479452054796,\"tabOrder\":10000}}],\"singleVisualGroup\":{\"displayName\":\"Help dialog\",\"groupMode\":0,\"isHidden\":true}}", "height": 560.55, "width": 852.33, "x": 214.87, - "y": 112.0, - "z": 12000.0 + "y": 112.00, + "z": 12000.00 }, { "config": "{\"name\":\"d003ec1374e9b4f68ca6\",\"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\":\"4a76adff6013c40708cc\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 80.0, - "width": 1232.0, - "x": 0.0, - "y": 288.0, - "z": 16000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 288.00, + "z": 16000.00 }, { "config": "{\"name\":\"d722dc1d1e76112b4d50\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":272,\"height\":176,\"tabOrder\":22}}],\"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\":\"44c9a31e29957c955fad\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 176.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 3000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"de0b81c54e7ccfa7fdea\",\"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\":\"610e4f32159cbae3f55d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 176.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 3000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"df45d3cf97bd5e41422d\",\"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\":\"'e4159db56d370ff157b3'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"44c9a31e29957c955fad\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 24.0, - "width": 144.0, + "height": 24.00, + "width": 144.00, "x": 0.22, - "y": 288.0, - "z": 1000.0 + "y": 288.00, + "z": 1000.00 }, { "config": "{\"name\":\"e4d7da5f283706d19837\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.03600823045266566,\"y\":192,\"z\":0,\"width\":256,\"height\":176,\"tabOrder\":10}}],\"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\":{\"fontSize\":\"13.3333px\",\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/ftk/trouble\"}]}]}}]}},\"parentGroupName\":\"44c9a31e29957c955fad\"}", "filters": "[]", - "height": 176.0, - "width": 256.0, + "height": 176.00, + "width": 256.00, "x": 0.04, - "y": 192.0, - "z": 0.0 + "y": 192.00, + "z": 0.00 }, { "config": "{\"name\":\"ea801701f96a5dfabd48\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":113,\"z\":8000,\"width\":852.3287671232878,\"height\":560.5479452054796,\"tabOrder\":9000}}],\"singleVisualGroup\":{\"displayName\":\"Connect dialog\",\"groupMode\":0,\"isHidden\":true}}", "height": 560.55, "width": 852.33, - "x": 216.0, - "y": 113.0, - "z": 8000.0 + "x": 216.00, + "y": 113.00, + "z": 8000.00 }, { "config": "{\"name\":\"ed2ea76eb5499f7953d5\",\"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\":\"4a76adff6013c40708cc\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 80.0, - "width": 1232.0, - "x": 0.0, - "y": 96.0, - "z": 18000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 96.00, + "z": 18000.00 }, { "config": "{\"name\":\"ef18812ee760367dfd09\",\"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\":\"4a76adff6013c40708cc\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 384.0, - "y": 0.0, - "z": 8000.0 + "height": 696.00, + "width": 80.00, + "x": 384.00, + "y": 0.00, + "z": 8000.00 }, { "config": "{\"name\":\"ef496017f935dfc31625\",\"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\":\"'9b12f4a45372b68afac4'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Close button'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"ea801701f96a5dfabd48\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 32.0, - "x": 784.0, - "y": 48.0, - "z": 2000.0 + "height": 32.00, + "width": 32.00, + "x": 784.00, + "y": 48.00, + "z": 2000.00 }, { "config": "{\"name\":\"f7adac54f7e8018c45a4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":504,\"y\":304,\"z\":3000,\"width\":272,\"height\":368,\"tabOrder\":5000}}],\"singleVisualGroup\":{\"displayName\":\"Customize copy\",\"groupMode\":0,\"isHidden\":false}}", - "height": 368.0, - "width": 272.0, - "x": 504.0, - "y": 304.0, - "z": 3000.0 + "height": 368.00, + "width": 272.00, + "x": 504.00, + "y": 304.00, + "z": 3000.00 }, { - "config": "{\"name\":\"fa1cda59e7005f9b9438\",\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.RateOptimization/featureName/KQL.GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"fa1cda59e7005f9b9438\",\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK$$ftkver$$/bladeName/PowerBI.RateOptimization/featureName/KQL.GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 112.0, - "x": 1160.0, - "y": 688.0, - "z": 1000.0 + "height": 32.00, + "width": 112.00, + "x": 1160.00, + "y": 688.00, + "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-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\"}}}}}]}}}", + "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\":\"$$ftkver$$ · $$build-date$$ · 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.0, - "width": 240.0, - "x": 104.0, - "y": 688.0, - "z": 1500.0 + "height": 32.00, + "width": 240.00, + "x": 104.00, + "y": 688.00, + "z": 1500.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Hybrid Benefit", "displayOption": 1, "filters": "[{\"name\":\"Filtere215005bbd5029767bdd\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Or\":{\"Left\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuMeterCategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Virtual Machines'\"}}}},\"Right\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuMeterCategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Virtual Machine Licenses'\"}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"objects\":{}}]", - "height": 720.0, + "height": 720.00, "name": "ReportSection2fb9ee30796ed6c1dd42", "ordinal": 8, "visualContainers": [ { "config": "{\"name\":\"01b68b04cfedc5d0c29b\",\"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\":\"17e3aec57fd1792ade91\"}", "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "config": "{\"name\":\"0ba657bfd56a93ca4a50\",\"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\":\"741d4dad88a9752c79c5\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "config": "{\"name\":\"112e12e9504cb8822fb0\",\"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\":\"7b16154166fa226e78bf\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"11e347b8ca90bca85ee0\",\"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\":\"7b16154166fa226e78bf\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "config": "{\"name\":\"17e3aec57fd1792ade91\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7b16154166fa226e78bf\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { - "config": "{\"name\":\"1ea6519a4415356c9b64\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.RateOptimization/featureName/KQL.HybridBenefit'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7b16154166fa226e78bf\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"1ea6519a4415356c9b64\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK$$ftkver$$/bladeName/PowerBI.RateOptimization/featureName/KQL.HybridBenefit'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7b16154166fa226e78bf\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"22030fb1e685b051cf11\",\"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\":\"741d4dad88a9752c79c5\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"2d3cebb79bdce8abff1c\",\"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\":\"741d4dad88a9752c79c5\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { - "config": "{\"name\":\"36b3d31f6a8358b08800\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":104,\"z\":4000,\"width\":472,\"height\":280,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.ChargePeriodStart\",\"active\":true}],\"Series\":[{\"queryRef\":\"Costs.x_SkuLicenseStatus\"}],\"Y\":[{\"queryRef\":\"Sum(Costs.x_SkuLicenseQuantity)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"Costs.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseStatus\"},\"Name\":\"Costs.x_SkuLicenseStatus\",\"NativeReferenceName\":\"Hybrid Benefit status\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_SkuLicenseQuantity)\",\"NativeReferenceName\":\"Hybrid Benefit CPUs\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"Costs.x_SkuLicenseStatus\":{\"displayName\":\"Hybrid Benefit status\"},\"Sum(Costs.x_SkuLicenseQuantity)\":{\"displayName\":\"Hybrid Benefit CPUs\"}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"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\":\"UsageDetails\"}},\"Property\":\"Azure Hybrid Benefit\"}},\"Right\":{\"Literal\":{\"Value\":\"'Enabled'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0.6}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"UsageDetails\"}},\"Property\":\"Azure Hybrid Benefit\"}},\"Right\":{\"Literal\":{\"Value\":\"'Not enabled'\"}}}}}]}}],\"labels\":[{\"properties\":{\"show\":{\"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\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'AHB vCPUs consumed (last 30 days)'\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'14'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", + "config": "{\"name\":\"36b3d31f6a8358b08800\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":104,\"z\":4000,\"width\":472,\"height\":280,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.ChargePeriodStart\",\"active\":true}],\"Series\":[{\"queryRef\":\"Costs.x_SkuLicenseStatus\"}],\"Y\":[{\"queryRef\":\"Costs.x_SkuLicenseQuantityMeasure\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"Costs.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseStatus\"},\"Name\":\"Costs.x_SkuLicenseStatus\",\"NativeReferenceName\":\"Hybrid Benefit status\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseQuantityMeasure\"},\"Name\":\"Costs.x_SkuLicenseQuantityMeasure\",\"NativeReferenceName\":\"Hybrid Benefit CPUs\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"Costs.x_SkuLicenseStatus\":{\"displayName\":\"Hybrid Benefit status\"},\"Costs.x_SkuLicenseQuantityMeasure\":{\"displayName\":\"Hybrid Benefit CPUs\"}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"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\":\"UsageDetails\"}},\"Property\":\"Azure Hybrid Benefit\"}},\"Right\":{\"Literal\":{\"Value\":\"'Enabled'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0.6}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"UsageDetails\"}},\"Property\":\"Azure Hybrid Benefit\"}},\"Right\":{\"Literal\":{\"Value\":\"'Not enabled'\"}}}}}]}}],\"labels\":[{\"properties\":{\"show\":{\"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\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'AHB vCPUs consumed (last 30 days)'\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[{\"name\":\"Filter6909a2696268c835ac9f\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"HybridBenefitCPUs\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filter8c7d374300584c0bb270\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargePeriodStart\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"subquery\",\"Expression\":{\"Subquery\":{\"Query\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"field\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}},\"Function\":4}}}],\"Top\":30}}},\"Type\":2},{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}],\"Table\":{\"SourceRef\":{\"Source\":\"subquery\"}}}}}]},\"type\":\"TopN\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":1},{\"name\":\"Filtereef66cf991a6069c9e01\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuLicenseStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'Enabled'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":2}]", - "height": 280.0, - "width": 472.0, - "x": 792.0, - "y": 104.0, - "z": 4000.0 + "height": 280.00, + "width": 472.00, + "x": 792.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"3a93859ee127c8ca983b\",\"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\":\"741d4dad88a9752c79c5\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"3fdbb2f4b971dee107c5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":4000}}],\"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\":\"17e3aec57fd1792ade91\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"47c0d2b278a5d714d2b3\",\"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\":\"741d4dad88a9752c79c5\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"4b689a9a1c14bb05c4e5\",\"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\":\"741d4dad88a9752c79c5\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { - "config": "{\"name\":\"4fd71fc9759cbd600327\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":392,\"z\":1000,\"width\":1048,\"height\":320,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ResourceName\"},{\"queryRef\":\"Costs.x_SkuType\"},{\"queryRef\":\"Sum(Costs.x_SkuCoreCount)\"},{\"queryRef\":\"Sum(Costs.x_SkuLicenseQuantity)\"},{\"queryRef\":\"Costs.x_SkuLicenseStatus\"},{\"queryRef\":\"Costs.x_ResourceGroupName\"},{\"queryRef\":\"Costs.SubAccountName\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.ConsumedQuantity)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceName\"},\"Name\":\"Costs.ResourceName\",\"NativeReferenceName\":\"Name\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ConsumedQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.ConsumedQuantity)\",\"NativeReferenceName\":\"Quantity\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"Costs.SubAccountName\",\"NativeReferenceName\":\"Subscription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"Costs.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseStatus\"},\"Name\":\"Costs.x_SkuLicenseStatus\",\"NativeReferenceName\":\"AHB status\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuType\"},\"Name\":\"Costs.x_SkuType\",\"NativeReferenceName\":\"SKU\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuCoreCount\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_SkuCoreCount)\",\"NativeReferenceName\":\"vCPUs\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_SkuLicenseQuantity)\",\"NativeReferenceName\":\"AHB CPUs1\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceName\"}}}]},\"columnProperties\":{\"UsageDetails.AdditionalInfo.ImageType\":{\"displayName\":\"ImageType\"},\"Costs.ResourceName\":{\"displayName\":\"Name\"},\"Costs.x_SkuType\":{\"displayName\":\"SKU\"},\"Costs.x_SkuLicenseStatus\":{\"displayName\":\"AHB status\"},\"Costs.x_ResourceGroupName\":{\"displayName\":\"Resource group\"},\"Costs.SubAccountName\":{\"displayName\":\"Subscription\"},\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"Sum(Costs.ConsumedQuantity)\":{\"displayName\":\"Quantity\"},\"Sum(Costs.x_SkuCoreCount)\":{\"displayName\":\"vCPUs\"},\"Sum(Costs.x_SkuLicenseQuantity)\":{\"displayName\":\"AHB CPUs\"}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"objects\":{\"columnHeaders\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]},\"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\":\"'Resources'\"}}}}}]}}}", - "filters": "[{\"name\":\"Filter2aee9f7816cc37b28843\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ResourceMachineName\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filter24de020c1ddb08dd9408\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ResourceName\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":1},{\"name\":\"Filter8e4069500149ea005c77\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Or\":{\"Left\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuMeterCategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Virtual Machines'\"}}}},\"Right\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuMeterCategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Virtual Machine Licenses'\"}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":2},{\"name\":\"Filterd8943a9c83b7718b13a8\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ConsumedQuantity\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":3},{\"name\":\"Filter102ca372043abcebc9a6\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":4},{\"name\":\"Filterd7643e3a6b1e95598e29\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"SubAccountName\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":5},{\"name\":\"Filter55d932a397dd799a0551\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_ResourceGroupName\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":6},{\"name\":\"Filter5b3ad3a585cdea45556e\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuLicenseStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseStatus\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Not supported'\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":0,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false,\"ordinal\":7},{\"name\":\"Filter942280d854167d06530e\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuLicenseCPUs\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":8},{\"name\":\"Filteref6ecb168e2468d26360\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuCPUs\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":9},{\"name\":\"Filter6bd92c808090b0786892\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuType\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":10},{\"name\":\"Filter16edf9183bb5de0359b4\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_ResourceMachineName\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":11},{\"name\":\"Filterf6d880f80eaea5658a03\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargePeriodStart\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"subquery\",\"Expression\":{\"Subquery\":{\"Query\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"field\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}},\"Function\":4}}}],\"Top\":1}}},\"Type\":2},{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}],\"Table\":{\"SourceRef\":{\"Source\":\"subquery\"}}}}}]},\"type\":\"TopN\",\"howCreated\":1,\"ordinal\":12}]", - "height": 320.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 1000.0 + "config": "{\"name\":\"4fd71fc9759cbd600327\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":392,\"z\":1000,\"width\":1048,\"height\":320,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ResourceName\"},{\"queryRef\":\"Costs.x_SkuType\"},{\"queryRef\":\"Costs.x_SkuCoreCountMeasure\"},{\"queryRef\":\"Costs.x_SkuLicenseQuantityMeasure\"},{\"queryRef\":\"Costs.x_SkuLicenseStatus\"},{\"queryRef\":\"Costs.x_ResourceGroupName\"},{\"queryRef\":\"Costs.SubAccountName\"},{\"queryRef\":\"Sum(Costs.ConsumedQuantity)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceName\"},\"Name\":\"Costs.ResourceName\",\"NativeReferenceName\":\"Name\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ConsumedQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.ConsumedQuantity)\",\"NativeReferenceName\":\"Quantity\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"Costs.SubAccountName\",\"NativeReferenceName\":\"Subscription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"Costs.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseStatus\"},\"Name\":\"Costs.x_SkuLicenseStatus\",\"NativeReferenceName\":\"AHB status\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuType\"},\"Name\":\"Costs.x_SkuType\",\"NativeReferenceName\":\"SKU\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuCoreCountMeasure\"},\"Name\":\"Costs.x_SkuCoreCountMeasure\",\"NativeReferenceName\":\"vCPUs\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseQuantityMeasure\"},\"Name\":\"Costs.x_SkuLicenseQuantityMeasure\",\"NativeReferenceName\":\"AHB CPUs\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"UsageDetails.AdditionalInfo.ImageType\":{\"displayName\":\"ImageType\"},\"Costs.ResourceName\":{\"displayName\":\"Name\"},\"Costs.x_SkuType\":{\"displayName\":\"SKU\"},\"Costs.x_SkuLicenseStatus\":{\"displayName\":\"AHB status\"},\"Costs.x_ResourceGroupName\":{\"displayName\":\"Resource group\"},\"Costs.SubAccountName\":{\"displayName\":\"Subscription\"},\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"Sum(Costs.ConsumedQuantity)\":{\"displayName\":\"Quantity\"},\"Costs.x_SkuCoreCountMeasure\":{\"displayName\":\"vCPUs\"},\"Costs.x_SkuLicenseQuantityMeasure\":{\"displayName\":\"AHB CPUs\"}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"objects\":{\"columnHeaders\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]},\"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\":\"'Resources'\"}}}}}]}}}", + "filters": "[{\"name\":\"Filter2aee9f7816cc37b28843\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ResourceMachineName\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filter24de020c1ddb08dd9408\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ResourceName\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":1},{\"name\":\"Filter8e4069500149ea005c77\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Or\":{\"Left\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuMeterCategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Virtual Machines'\"}}}},\"Right\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuMeterCategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Virtual Machine Licenses'\"}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":2},{\"name\":\"Filterd8943a9c83b7718b13a8\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ConsumedQuantity\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":3},{\"name\":\"Filter102ca372043abcebc9a6\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":4},{\"name\":\"Filterd7643e3a6b1e95598e29\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"SubAccountName\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":5},{\"name\":\"Filter55d932a397dd799a0551\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_ResourceGroupName\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":6},{\"name\":\"Filter5b3ad3a585cdea45556e\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuLicenseStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseStatus\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Not supported'\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":0,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false,\"ordinal\":7},{\"name\":\"Filter942280d854167d06530e\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuLicenseCPUs\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":8},{\"name\":\"Filter6bd92c808090b0786892\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuType\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":9},{\"name\":\"Filter16edf9183bb5de0359b4\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_ResourceMachineName\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":10},{\"name\":\"Filterf6d880f80eaea5658a03\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargePeriodStart\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"subquery\",\"Expression\":{\"Subquery\":{\"Query\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"field\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}},\"Function\":4}}}],\"Top\":1}}},\"Type\":2},{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}],\"Table\":{\"SourceRef\":{\"Source\":\"subquery\"}}}}}]},\"type\":\"TopN\",\"howCreated\":1,\"ordinal\":11},{\"name\":\"a187dbb0cb08c1cf10d5\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuLicenseQuantity\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":12},{\"name\":\"d86b6074acf922905f0d\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":13},{\"name\":\"e59b2b4eadcbd7d66e17\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuCoreCount\"}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":14}]", + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 1000.00 }, { "config": "{\"name\":\"535cd8d9c059fc7e27c8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":0}}],\"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\":\"17e3aec57fd1792ade91\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "config": "{\"name\":\"68ec67b7931af48aa970\",\"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\":\"741d4dad88a9752c79c5\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "config": "{\"name\":\"6bbe27812b1a4251d264\",\"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\":\"741d4dad88a9752c79c5\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"741d4dad88a9752c79c5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.39572239294395,\"y\":8.005493854933814,\"z\":0,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, + "height": 704.00, "width": 1048.09, - "x": 215.4, + "x": 215.40, "y": 8.01, - "z": 0.0 + "z": 0.00 }, { "config": "{\"name\":\"76cd378d8db257146730\",\"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\":\"741d4dad88a9752c79c5\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "config": "{\"name\":\"7b16154166fa226e78bf\",\"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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 500.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 500.00 }, { "config": "{\"name\":\"7bc341c7006b1048c3e0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":2000,\"width\":184,\"height\":88,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Count(Costs.ResourceId)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"Count(Costs.ResourceId)\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'11'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"visualHeader\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Enabled (last day)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[{\"name\":\"Filter81cb7b66d0191e5291ba\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ResourceId\"}},\"Function\":2}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filtera3b0f2110c90990363ab\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargePeriodStart\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"subquery\",\"Expression\":{\"Subquery\":{\"Query\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"field\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}},\"Function\":4}}}],\"Top\":1}}},\"Type\":2},{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}],\"Table\":{\"SourceRef\":{\"Source\":\"subquery\"}}}}}]},\"type\":\"TopN\",\"howCreated\":1,\"ordinal\":1},{\"name\":\"Filtere6405dcbd7ac3846c740\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuLicenseStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'Enabled'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":2}]", - "height": 88.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 2000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 2000.00 }, { "config": "{\"name\":\"7f6af94bbc9b714e7b6f\",\"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\":\"741d4dad88a9752c79c5\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"8398e400533b6692737f\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":200,\"x\":0,\"y\":0,\"z\":1000,\"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\":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\":\"7b16154166fa226e78bf\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"8d1248bc6be325edce57\",\"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\":\"741d4dad88a9752c79c5\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "config": "{\"name\":\"964b3cca4cea4b098753\",\"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\":\"17e3aec57fd1792ade91\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "config": "{\"name\":\"a9f4f7fb7d0a0b5e249f\",\"layouts\":[{\"id\":0,\"position\":{\"height\":40,\"width\":40,\"x\":160,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"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#hybrid-benefit'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"7b16154166fa226e78bf\"}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"b0ff2663559931c62b53\",\"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\":\"741d4dad88a9752c79c5\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "config": "{\"name\":\"b22edb9ac866041f9b95\",\"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\":\"741d4dad88a9752c79c5\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "config": "{\"name\":\"b5c04e5caae9c7d3ebd5\",\"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\":\"741d4dad88a9752c79c5\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "config": "{\"name\":\"b7fa0d78b0b5aaae5636\",\"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\":\"741d4dad88a9752c79c5\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"c90429bbd771cc026a52\",\"layouts\":[{\"id\":0,\"position\":{\"x\":504,\"y\":104,\"z\":5000,\"width\":280,\"height\":280,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"barChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.x_SkuType\",\"active\":true}],\"Y\":[{\"queryRef\":\"CountNonNull(Costs.ResourceId)\"}],\"Series\":[{\"queryRef\":\"Costs.x_SkuCoreCount\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"CountNonNull(Costs.ResourceId)\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuType\"},\"Name\":\"Costs.x_SkuType\",\"NativeReferenceName\":\"SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuCoreCount\"},\"Name\":\"Costs.x_SkuCoreCount\",\"NativeReferenceName\":\"vCPUs\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2}}}]},\"columnProperties\":{\"CountNonNull(Costs.ResourceId)\":{\"displayName\":\"Resources\"},\"Costs.x_SkuType\":{\"displayName\":\"SKU\"},\"Costs.x_SkuCoreCount\":{\"displayName\":\"vCPUs\"}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"legend\":[{\"properties\":{\"titleText\":{\"expr\":{\"Literal\":{\"Value\":\"'VCPUs'\"}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"categoryAxis\":[{\"properties\":{\"preferredCategoryWidth\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"maxMarginFactor\":{\"expr\":{\"Literal\":{\"Value\":\"25L\"}}},\"innerPadding\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'8'\"}}},\"concatenateLabels\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"valueAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Not enabled with 8+ vCPUs (last day)'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}]}}}", - "filters": "[{\"name\":\"Filterd2da69ba2473a8860a30\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ResourceId\"}},\"Function\":2}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filtera79267b6267d1a768e2b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuType\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":1},{\"name\":\"Filterc1f838932a75c1a28404\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuLicenseStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'Not Enabled'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":2},{\"name\":\"Filter5ba4cd51056dcae10dce\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargePeriodStart\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"subquery\",\"Expression\":{\"Subquery\":{\"Query\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"field\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}},\"Function\":4}}}],\"Top\":1}}},\"Type\":2},{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}],\"Table\":{\"SourceRef\":{\"Source\":\"subquery\"}}}}}]},\"type\":\"TopN\",\"howCreated\":1,\"ordinal\":3},{\"name\":\"46a9982d2fd3db6edd1f\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuCoreCount\"}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":4},{\"name\":\"dff7cb9838159db170d0\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuCoreCount\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":2,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuCoreCount\"}},\"Right\":{\"Literal\":{\"Value\":\"8L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":5}]", - "height": 280.0, - "width": 280.0, - "x": 504.0, - "y": 104.0, - "z": 5000.0 + "filters": "[{\"name\":\"Filterd2da69ba2473a8860a30\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ResourceId\"}},\"Function\":2}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filtera79267b6267d1a768e2b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuType\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":1},{\"name\":\"Filterc1f838932a75c1a28404\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuLicenseStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'Not Enabled'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":2},{\"name\":\"Filter5ba4cd51056dcae10dce\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargePeriodStart\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"subquery\",\"Expression\":{\"Subquery\":{\"Query\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"field\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}},\"Function\":4}}}],\"Top\":1}}},\"Type\":2},{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}],\"Table\":{\"SourceRef\":{\"Source\":\"subquery\"}}}}}]},\"type\":\"TopN\",\"howCreated\":1,\"ordinal\":3},{\"name\":\"46a9982d2fd3db6edd1f\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuCoreCount\"}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":4},{\"name\":\"dff7cb9838159db170d0\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuCoreCount\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":2,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuCoreCount\"}},\"Right\":{\"Literal\":{\"Value\":\"8L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":5}]", + "height": 280.00, + "width": 280.00, + "x": 504.00, + "y": 104.00, + "z": 5000.00 }, { "config": "{\"name\":\"ccc93c654e3825b4cc93\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":2000}}],\"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\":\"17e3aec57fd1792ade91\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { - "config": "{\"name\":\"e23bd7d216263d5347dd\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":3000,\"width\":184,\"height\":88,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.x_SkuLicenseQuantity)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_SkuLicenseQuantity)\",\"NativeReferenceName\":\"Hybrid Benefit CPUs\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseQuantity\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.x_SkuLicenseQuantity)\":{\"displayName\":\"Hybrid Benefit CPUs\"}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'11'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"visualHeader\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'vCPUs used (last day)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", + "config": "{\"name\":\"e23bd7d216263d5347dd\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":3000,\"width\":184,\"height\":88,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_SkuLicenseQuantityMeasure\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseQuantityMeasure\"},\"Name\":\"Costs.x_SkuLicenseQuantityMeasure\",\"NativeReferenceName\":\"x_SkuLicenseQuantityMeasure\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseQuantityMeasure\"}}}]},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'11'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"visualHeader\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'vCPUs used (last day)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[{\"name\":\"Filter15e10dae4e7443966e1d\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"HybridBenefitvCPUs\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filter1689997e49c37e4ec7dd\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"HybridBenefitCPUs\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":1},{\"name\":\"Filter791c759c6d09ab96975a\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargePeriodStart\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"subquery\",\"Expression\":{\"Subquery\":{\"Query\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"field\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}},\"Function\":4}}}],\"Top\":1}}},\"Type\":2},{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}],\"Table\":{\"SourceRef\":{\"Source\":\"subquery\"}}}}}]},\"type\":\"TopN\",\"howCreated\":1,\"ordinal\":2},{\"name\":\"Filter9f8c5f51931c2ada105b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuImageType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuImageType\"}},\"Right\":{\"Literal\":{\"Value\":\"'Windows Server BYOL'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":3}]", - "height": 88.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 3000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 3000.00 }, { "config": "{\"name\":\"e438a0a77b13abbb8ad8\",\"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\":\"741d4dad88a9752c79c5\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"ed7bb8655aaf8be267fa\",\"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\":\"741d4dad88a9752c79c5\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"eda9ade8c2820e631174\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":6000,\"width\":280,\"height\":280,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"barChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.x_SkuType\",\"active\":true}],\"Y\":[{\"queryRef\":\"CountNonNull(Costs.ResourceId)\"}],\"Series\":[{\"queryRef\":\"Costs.x_SkuCoreCount\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"CountNonNull(Costs.ResourceId)\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuType\"},\"Name\":\"Costs.x_SkuType\",\"NativeReferenceName\":\"SKU1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuCoreCount\"},\"Name\":\"Costs.x_SkuCoreCount\",\"NativeReferenceName\":\"vCPUs\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2}}}]},\"columnProperties\":{\"CountNonNull(Costs.ResourceId)\":{\"displayName\":\"Resources\"},\"Costs.x_SkuType\":{\"displayName\":\"SKU\"},\"Costs.x_SkuCoreCount\":{\"displayName\":\"vCPUs\"}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"labelPosition\":{\"expr\":{\"Literal\":{\"Value\":\"'InsideCenter'\"}}}}}],\"legend\":[{\"properties\":{\"titleText\":{\"expr\":{\"Literal\":{\"Value\":\"'VCPUs'\"}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"categoryAxis\":[{\"properties\":{\"preferredCategoryWidth\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"maxMarginFactor\":{\"expr\":{\"Literal\":{\"Value\":\"25L\"}}},\"innerPadding\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'8'\"}}},\"concatenateLabels\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"valueAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'SKUs enabled with <8 vCPU (last day)'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[{\"name\":\"Filterf9d0e00955a2bdae2260\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ResourceId\"}},\"Function\":2}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filterf2c9f5372cdc300020ae\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargePeriodStart\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"subquery\",\"Expression\":{\"Subquery\":{\"Query\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"field\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}},\"Function\":4}}}],\"Top\":1}}},\"Type\":2},{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}],\"Table\":{\"SourceRef\":{\"Source\":\"subquery\"}}}}}]},\"type\":\"TopN\",\"howCreated\":1,\"ordinal\":1},{\"name\":\"Filter3dc50ca76ed070726066\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuType\"}},\"type\":\"Categorical\",\"howCreated\":0,\"ordinal\":2},{\"name\":\"Filterc2ff97e648014129a516\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuLicenseStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'Enabled'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":3},{\"name\":\"2a7cc4e4da9f62cb7a23\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuCoreCount\"}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":4},{\"name\":\"1cfc153c915bca9cc89d\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuCoreCount\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":3,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuCoreCount\"}},\"Right\":{\"Literal\":{\"Value\":\"8L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":5}]", - "height": 280.0, - "width": 280.0, - "x": 216.0, - "y": 104.0, - "z": 6000.0 + "height": 280.00, + "width": 280.00, + "x": 216.00, + "y": 104.00, + "z": 6000.00 }, { "config": "{\"name\":\"ef64372303a097cfc522\",\"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\":\"741d4dad88a9752c79c5\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"f9a79ccde192e841d3e2\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":192,\"x\":0,\"y\":0,\"z\":5000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Hybrid Benefit\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Summarize reservation and savings plan cost, utilization, and 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\":\"7b16154166fa226e78bf\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Reservation recommendations", "displayOption": 1, "filters": "[{\"name\":\"38f4a6f6430e433a73e1\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false}]", - "height": 720.0, + "height": 720.00, "name": "ReportSection688a5a4c955eec0def76", "ordinal": 6, "visualContainers": [ { "config": "{\"name\":\"003a55c8e04e4ba4b7fe\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":200,\"x\":0,\"y\":0,\"z\":1000,\"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\":\"f77fc5fbcd293683f672\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { - "config": "{\"name\":\"0a25ba39d51731ffeb12\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":111.83139402906134,\"z\":1000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"ReservationRecommendations.x_LookbackPeriodLabel\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_LookbackPeriodLabel\"},\"Name\":\"ReservationRecommendations.x_LookbackPeriodLabel\",\"NativeReferenceName\":\"x_LookbackPeriodLabel\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"ReservationRecommendations.x_LookbackPeriodLabel\"],\"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\":\"'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\":\"'Lookback'\"}}}}}],\"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\":\"512bf45fa44cb87b8f87\"}", + "config": "{\"name\":\"0a25ba39d51731ffeb12\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":111.83139402906134,\"z\":2000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"ReservationRecommendations.x_LookbackPeriodLabel\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_LookbackPeriodLabel\"},\"Name\":\"ReservationRecommendations.x_LookbackPeriodLabel\",\"NativeReferenceName\":\"x_LookbackPeriodLabel\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"ReservationRecommendations.x_LookbackPeriodLabel\"],\"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\":\"'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\":\"'Lookback'\"}}}}}],\"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\":\"512bf45fa44cb87b8f87\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, + "height": 56.00, + "width": 200.00, + "x": 0.00, "y": 111.83, - "z": 1000.0 + "z": 2000.00 }, { "config": "{\"name\":\"0c76a2061c78e2bc75bc\",\"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\":\"9b6a4c8a5c5b82ad01d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { - "config": "{\"name\":\"0f5a9995f5a6b10e2a21\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":3000,\"width\":568,\"height\":280,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"barChart\",\"projections\":{\"Category\":[{\"queryRef\":\"ReservationRecommendations.RegionName\",\"active\":true},{\"queryRef\":\"AutofitComboMeter.InstanceSizeFlexibilityGroup\"},{\"queryRef\":\"Costs.x_SkuMeterSubcategory\"}],\"Tooltips\":[{\"queryRef\":\"Min(Usage details.ResourceId)\"}],\"Series\":[{\"queryRef\":\"Costs.x_PricingSubcategory\"}],\"Y\":[{\"queryRef\":\"Sum(Costs.x_ConsumedCoreHours)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u1\",\"Entity\":\"Costs\",\"Type\":0},{\"Name\":\"a\",\"Entity\":\"InstanceSizeFlexibility\",\"Type\":0},{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"Min(Usage details.ResourceId)\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"x_CommitmentDiscountFlexGroup\"},\"Name\":\"AutofitComboMeter.InstanceSizeFlexibilityGroup\",\"NativeReferenceName\":\"x_CommitmentDiscountFlexGroup\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_SkuMeterSubcategory\"},\"Name\":\"Costs.x_SkuMeterSubcategory\",\"NativeReferenceName\":\"x_SkuMeterSubcategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_PricingSubcategory\"},\"Name\":\"Costs.x_PricingSubcategory\",\"NativeReferenceName\":\"x_PricingSubcategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"RegionName\"},\"Name\":\"ReservationRecommendations.RegionName\",\"NativeReferenceName\":\"RegionName\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_ConsumedCoreHours\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_ConsumedCoreHours)\",\"NativeReferenceName\":\"Core hours\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_ConsumedCoreHours\"}},\"Function\":0}}}]},\"columnProperties\":{\"AutofitComboMeter.InstanceSizeFlexibilityGroup\":{},\"Min(Usage details.ResourceId)\":{\"displayName\":\"Resources\"},\"Costs.x_SkuMeterSubcategory\":{},\"Sum(Costs.x_ConsumedCoreHours)\":{\"displayName\":\"Core hours\"},\"ReservationRecommendations.RegionName\":{}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}},\"showTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"categoryAxis\":[{\"properties\":{\"concatenateLabels\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#990000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'OnDemand'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'Reservation'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'SavingsPlan'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Committed Spend'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Committed Usage'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#990000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Standard'\"}}}}}]}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Core hours by Region > Flexibility group > Size'\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", - "filters": "[{\"name\":\"Filter5bbf86e68796256d7c90\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ResourceId\"}},\"Function\":2}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filter518024010cd4d0cb01f8\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"InstanceSizeFlexibility\"}},\"Property\":\"x_CommitmentDiscountFlexGroup\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":1},{\"name\":\"Filterd981e081967870279aa8\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"RegionName\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":2},{\"name\":\"Filter0a1e4d600032cc26630d\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterSubcategory\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":3},{\"name\":\"Filtera4540d062700d7544be8\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_UsageCPUHours\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":4},{\"name\":\"Filter12dc03cc9545a38287a1\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":5},{\"name\":\"Filter713e47d0e8c260489cd9\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_UsageCPUHours\"}},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":6},{\"name\":\"Filter6296d6f710405678a875\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":7},{\"name\":\"Filter0e715e497049590600d7\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterSubcategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":8},{\"name\":\"Filter334808e2d2a2c1b00899\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":9},{\"name\":\"Filter0fb7b9a81c05c7d45456\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":10},{\"name\":\"Filtera8bbde2b6e76eca330b0\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"RegionName\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":11}]", - "height": 280.0, - "width": 568.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 - }, - { - "config": "{\"name\":\"1111cf1bb0652abd2fee\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":167.03015946116324,\"z\":500,\"width\":200,\"height\":56,\"tabOrder\":17002}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"ReservationRecommendations.x_CommitmentDiscountScope\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_CommitmentDiscountScope\"},\"Name\":\"ReservationRecommendations.x_CommitmentDiscountScope\",\"NativeReferenceName\":\"x_CommitmentDiscountScope\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"ReservationRecommendations.x_CommitmentDiscountScope\"],\"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\":\"'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'\"}}}}}],\"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\":\"'Scope'\"}}}}}],\"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\":\"512bf45fa44cb87b8f87\"}", + "config": "{\"name\":\"1111cf1bb0652abd2fee\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":167.03015946116324,\"z\":1000,\"width\":200,\"height\":56,\"tabOrder\":17002}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"ReservationRecommendations.x_CommitmentDiscountScope\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_CommitmentDiscountScope\"},\"Name\":\"ReservationRecommendations.x_CommitmentDiscountScope\",\"NativeReferenceName\":\"x_CommitmentDiscountScope\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"ReservationRecommendations.x_CommitmentDiscountScope\"],\"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\":\"'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'\"}}}}}],\"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\":\"'Scope'\"}}}}}],\"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\":\"512bf45fa44cb87b8f87\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, + "height": 56.00, + "width": 200.00, + "x": 0.00, "y": 167.03, - "z": 500.0 + "z": 1000.00 }, { "config": "{\"name\":\"143f8af048eac800f251\",\"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\":\"9b6a4c8a5c5b82ad01d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "config": "{\"name\":\"1c4ca47a810ae2db57d8\",\"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\":\"9b6a4c8a5c5b82ad01d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { - "config": "{\"name\":\"1f12408b2018f0bd8d94\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":7000,\"width\":184,\"height\":88,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(ReservationRecommendations.x_EffectiveCostBefore)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_EffectiveCostBefore\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_EffectiveCostBefore)\",\"NativeReferenceName\":\"x_EffectiveCostBefore\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_EffectiveCostBefore\"}},\"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\":\"'Current cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", + "config": "{\"name\":\"1f12408b2018f0bd8d94\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(ReservationRecommendations.x_EffectiveCostBefore)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_EffectiveCostBefore\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_EffectiveCostBefore)\",\"NativeReferenceName\":\"x_EffectiveCostBefore\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_EffectiveCostBefore\"}},\"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\":\"'Current cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[]", - "height": 88.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 7000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 6000.00 }, { "config": "{\"name\":\"2560701c2a22c6c10c42\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"tabOrder\":3000}}],\"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\":\"f77fc5fbcd293683f672\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "config": "{\"name\":\"2c5f4ecee314b57dd984\",\"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\":\"9b6a4c8a5c5b82ad01d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { - "config": "{\"name\":\"357f598c5ce9511ae25a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":4000}}],\"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\":\"512bf45fa44cb87b8f87\"}", + "config": "{\"name\":\"357f598c5ce9511ae25a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":5000,\"tabOrder\":4000}}],\"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\":\"512bf45fa44cb87b8f87\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"386dead952763517e7cf\",\"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\":\"9b6a4c8a5c5b82ad01d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"425083d1dd25bc9312e3\",\"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\":\"9b6a4c8a5c5b82ad01d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"466701bd63048dd2f61b\",\"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\":\"9b6a4c8a5c5b82ad01d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"512bf45fa44cb87b8f87\",\"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\":\"f77fc5fbcd293683f672\"}", - "height": 336.0, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 336.00, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { - "config": "{\"name\":\"52fb493df97f05450019\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":104,\"z\":2000,\"width\":472,\"height\":280,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"stackedAreaChart\",\"projections\":{\"Tooltips\":[{\"queryRef\":\"Count(Costs.ResourceId)\"}],\"Series\":[{\"queryRef\":\"Costs.x_PricingSubcategory\"}],\"Category\":[{\"queryRef\":\"Costs.x_ReportingDate\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(Costs.x_ConsumedCoreHours)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"Count(Costs.ResourceId)\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_PricingSubcategory\"},\"Name\":\"Costs.x_PricingSubcategory\",\"NativeReferenceName\":\"Pricing subcategory\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_ConsumedCoreHours\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_ConsumedCoreHours)\",\"NativeReferenceName\":\"Core hours\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_ReportingDate\"},\"Name\":\"Costs.x_ReportingDate\",\"NativeReferenceName\":\"x_ReportingDate\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_ReportingDate\"}}}]},\"columnProperties\":{\"Count(Costs.ResourceId)\":{\"displayName\":\"Resources\"},\"Sum(Costs.x_ConsumedCoreHours)\":{\"displayName\":\"Core hours\"},\"Costs.x_PricingSubcategory\":{\"displayName\":\"Pricing subcategory\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"legend\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}},\"showTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"matchLineColor\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"switchAxisPosition\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"invertAxis\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"categoryAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"reverseStackOrder\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'SavingsPlan'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'Reservation'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#990000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'OnDemand'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Committed Usage'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Committed Spend'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#990000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Standard'\"}}}}}]}}],\"seriesLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"layout\":[{\"properties\":{\"seriesOrderReversed\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'CPU hours'\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", + "config": "{\"name\":\"52fb493df97f05450019\",\"layouts\":[{\"id\":0,\"position\":{\"x\":888.0000000000001,\"y\":104,\"z\":2000,\"width\":376,\"height\":280,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"stackedAreaChart\",\"projections\":{\"Tooltips\":[{\"queryRef\":\"Count(Costs.ResourceId)\"}],\"Series\":[{\"queryRef\":\"Costs.x_PricingSubcategory\"}],\"Category\":[{\"queryRef\":\"Costs.x_ReportingDate\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(Costs.x_ConsumedCoreHours)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"Count(Costs.ResourceId)\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_PricingSubcategory\"},\"Name\":\"Costs.x_PricingSubcategory\",\"NativeReferenceName\":\"Pricing subcategory\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_ConsumedCoreHours\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_ConsumedCoreHours)\",\"NativeReferenceName\":\"Core hours\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_ReportingDate\"},\"Name\":\"Costs.x_ReportingDate\",\"NativeReferenceName\":\"x_ReportingDate\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_ReportingDate\"}}}]},\"columnProperties\":{\"Count(Costs.ResourceId)\":{\"displayName\":\"Resources\"},\"Sum(Costs.x_ConsumedCoreHours)\":{\"displayName\":\"Core hours\"},\"Costs.x_PricingSubcategory\":{\"displayName\":\"Pricing subcategory\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"legend\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}},\"showTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"matchLineColor\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"switchAxisPosition\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"invertAxis\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"categoryAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"reverseStackOrder\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'SavingsPlan'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'Reservation'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#990000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'OnDemand'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Committed Usage'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Committed Spend'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#990000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Standard'\"}}}}}]}}],\"seriesLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"layout\":[{\"properties\":{\"seriesOrderReversed\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'CPU hours'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", "filters": "[]", - "height": 280.0, - "width": 472.0, - "x": 792.0, - "y": 104.0, - "z": 2000.0 + "height": 280.00, + "width": 376.00, + "x": 888.00, + "y": 104.00, + "z": 2000.00 }, { - "config": "{\"name\":\"556d6105ab6c43006bcd\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"x_CommitmentDiscountSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"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\":\"'Potential savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", + "config": "{\"name\":\"556d6105ab6c43006bcd\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"x_CommitmentDiscountSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"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\":\"'Potential savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[]", - "height": 88.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 4000.00 }, { - "config": "{\"name\":\"55ed6c4e55097420df10\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(ReservationRecommendations.x_EffectiveCostAfter)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_EffectiveCostAfter\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_EffectiveCostAfter)\",\"NativeReferenceName\":\"x_EffectiveCostAfter\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_EffectiveCostAfter\"}},\"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\":\"'Potential cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", + "config": "{\"name\":\"55ed6c4e55097420df10\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(ReservationRecommendations.x_EffectiveCostAfter)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_EffectiveCostAfter\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_EffectiveCostAfter)\",\"NativeReferenceName\":\"x_EffectiveCostAfter\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_EffectiveCostAfter\"}},\"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\":\"'Potential cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[]", - "height": 88.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 6000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 5000.00 }, { - "config": "{\"name\":\"65a632502cf87d0de88f\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":223.0301594611632,\"z\":3000,\"width\":200,\"height\":56,\"tabOrder\":0}}],\"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\":\"512bf45fa44cb87b8f87\"}", + "config": "{\"name\":\"65a632502cf87d0de88f\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":223.0301594611632,\"z\":4000,\"width\":200,\"height\":56,\"tabOrder\":0}}],\"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\":\"512bf45fa44cb87b8f87\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, + "height": 56.00, + "width": 200.00, + "x": 0.00, "y": 223.03, - "z": 3000.0 + "z": 4000.00 }, { "config": "{\"name\":\"6e1153ac9fa26f2ebe5f\",\"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\":\"Reservation recommendations\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review opportunities to save with new reservations.\",\"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\":\"f77fc5fbcd293683f672\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"6e3560126139458a4eb3\",\"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\":\"9b6a4c8a5c5b82ad01d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "config": "{\"name\":\"71d410f1581befc20368\",\"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\":\"9b6a4c8a5c5b82ad01d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"76a5564c7e81d7d0cfe3\",\"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\":\"9b6a4c8a5c5b82ad01d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"77aeb47650294abe6c2d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":280,\"z\":0,\"width\":200,\"height\":56,\"tabOrder\":2000}}],\"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\":\"512bf45fa44cb87b8f87\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 280.0, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 280.00, + "z": 0.00 }, { "config": "{\"name\":\"7eb7a3de876470adbdb0\",\"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\":\"9b6a4c8a5c5b82ad01d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "config": "{\"name\":\"86985e90878bf55694b9\",\"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\":\"9b6a4c8a5c5b82ad01d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "config": "{\"name\":\"96895e63d55c40770fd9\",\"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\":\"9b6a4c8a5c5b82ad01d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { - "config": "{\"name\":\"9adefe0c71bd7f3a61e1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":576,\"y\":40.165263963274676,\"z\":8000,\"width\":40,\"height\":48,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"20pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Equals'\"}}}}}]}}}", + "config": "{\"name\":\"9adefe0c71bd7f3a61e1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":576,\"y\":40.165263963274676,\"z\":7000,\"width\":40,\"height\":48,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"20pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Equals'\"}}}}}]}}}", "filters": "[]", - "height": 48.0, - "width": 40.0, - "x": 576.0, + "height": 48.00, + "width": 40.00, + "x": 576.00, "y": 40.17, - "z": 8000.0 + "z": 7000.00 }, { "config": "{\"name\":\"9b6a4c8a5c5b82ad01d1\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.39572239294395,\"y\":8.005493854933814,\"z\":0,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, + "height": 704.00, "width": 1048.09, - "x": 215.4, + "x": 215.40, "y": 8.01, - "z": 0.0 + "z": 0.00 }, { - "config": "{\"name\":\"9bf065e82cc29ee2962e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":384,\"y\":40.165263963274676,\"z\":9000,\"width\":40,\"height\":48,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"−\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"20pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Minus'\"}}}}}]}}}", + "config": "{\"name\":\"9bf065e82cc29ee2962e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":384,\"y\":40.165263963274676,\"z\":8000,\"width\":40,\"height\":48,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"−\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"20pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Minus'\"}}}}}]}}}", "filters": "[]", - "height": 48.0, - "width": 40.0, - "x": 384.0, + "height": 48.00, + "width": 40.00, + "x": 384.00, "y": 40.17, - "z": 9000.0 + "z": 8000.00 }, { "config": "{\"name\":\"a6d290f49670b8be294c\",\"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\":\"9b6a4c8a5c5b82ad01d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 + }, + { + "config": "{\"name\":\"a8e588fca5a265020d92\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":104,\"z\":11000,\"width\":280,\"height\":280,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"barChart\",\"projections\":{\"Category\":[{\"queryRef\":\"ReservationRecommendations.RegionName\",\"active\":true},{\"queryRef\":\"AutofitComboMeter.InstanceSizeFlexibilityGroup\"},{\"queryRef\":\"Costs.x_SkuMeterSubcategory\"}],\"Tooltips\":[{\"queryRef\":\"Min(Usage details.ResourceId)\"}],\"Series\":[{\"queryRef\":\"Costs.x_PricingSubcategory\"}],\"Y\":[{\"queryRef\":\"Sum(Costs.x_ConsumedCoreHours)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u1\",\"Entity\":\"Costs\",\"Type\":0},{\"Name\":\"a\",\"Entity\":\"InstanceSizeFlexibility\",\"Type\":0},{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"Min(Usage details.ResourceId)\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"x_CommitmentDiscountFlexGroup\"},\"Name\":\"AutofitComboMeter.InstanceSizeFlexibilityGroup\",\"NativeReferenceName\":\"x_CommitmentDiscountFlexGroup\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_SkuMeterSubcategory\"},\"Name\":\"Costs.x_SkuMeterSubcategory\",\"NativeReferenceName\":\"x_SkuMeterSubcategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_PricingSubcategory\"},\"Name\":\"Costs.x_PricingSubcategory\",\"NativeReferenceName\":\"x_PricingSubcategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"RegionName\"},\"Name\":\"ReservationRecommendations.RegionName\",\"NativeReferenceName\":\"RegionName\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_ConsumedCoreHours\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_ConsumedCoreHours)\",\"NativeReferenceName\":\"Core hours\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_ConsumedCoreHours\"}},\"Function\":0}}}]},\"columnProperties\":{\"AutofitComboMeter.InstanceSizeFlexibilityGroup\":{},\"Min(Usage details.ResourceId)\":{\"displayName\":\"Resources\"},\"Costs.x_SkuMeterSubcategory\":{},\"Sum(Costs.x_ConsumedCoreHours)\":{\"displayName\":\"Core hours\"},\"ReservationRecommendations.RegionName\":{}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}},\"showTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"categoryAxis\":[{\"properties\":{\"concatenateLabels\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#990000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'OnDemand'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'Reservation'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'SavingsPlan'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Committed Spend'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Committed Usage'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#990000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Standard'\"}}}}}]}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Core hours by Region > Flexibility group > Size'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", + "filters": "[{\"name\":\"Filter5bbf86e68796256d7c90\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ResourceId\"}},\"Function\":2}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filter518024010cd4d0cb01f8\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"InstanceSizeFlexibility\"}},\"Property\":\"x_CommitmentDiscountFlexGroup\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":1},{\"name\":\"Filterd981e081967870279aa8\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"RegionName\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":2},{\"name\":\"Filter0a1e4d600032cc26630d\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterSubcategory\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":3},{\"name\":\"Filtera4540d062700d7544be8\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_UsageCPUHours\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":4},{\"name\":\"Filter12dc03cc9545a38287a1\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":5},{\"name\":\"Filter713e47d0e8c260489cd9\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_UsageCPUHours\"}},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":6},{\"name\":\"Filter6296d6f710405678a875\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":7},{\"name\":\"Filter0e715e497049590600d7\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterSubcategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":8},{\"name\":\"Filter334808e2d2a2c1b00899\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":9},{\"name\":\"Filter0fb7b9a81c05c7d45456\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":10},{\"name\":\"Filtera8bbde2b6e76eca330b0\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"RegionName\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":11}]", + "height": 280.00, + "width": 280.00, + "x": 600.00, + "y": 104.00, + "z": 11000.00 }, { "config": "{\"name\":\"bab08ec3256d1ca7d880\",\"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\":\"9b6a4c8a5c5b82ad01d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { - "config": "{\"name\":\"c87ecf964f0eba84267c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":4000,\"width\":1048,\"height\":320,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"ReservationRecommendations.x_CommitmentDiscountScope\"},{\"queryRef\":\"ReservationRecommendations.x_CommitmentDiscountNormalizedGroup\"},{\"queryRef\":\"ReservationRecommendations.RegionName\"},{\"queryRef\":\"AutofitComboMeter.ArmSkuName\"},{\"queryRef\":\"Sum(ReservationRecommendations.x_RecommendedQuantity)\"},{\"queryRef\":\"ReservationRecommendations.x_CommitmentDiscountNormalizedSize\"},{\"queryRef\":\"Sum(ReservationRecommendations.x_RecommendedQuantityNormalized)\"},{\"queryRef\":\"Sum(ReservationRecommendations.x_EffectiveCostBefore)\"},{\"queryRef\":\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"InstanceSizeFlexibility\",\"Type\":0},{\"Name\":\"r1\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"x_SkuType\"},\"Name\":\"AutofitComboMeter.ArmSkuName\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"RegionName\"},\"Name\":\"ReservationRecommendations.RegionName\",\"NativeReferenceName\":\"Region\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"Potential savings1\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_EffectiveCostBefore\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_EffectiveCostBefore)\",\"NativeReferenceName\":\"Contracted cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_RecommendedQuantity\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_RecommendedQuantity)\",\"NativeReferenceName\":\"Rec qty\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_RecommendedQuantityNormalized\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_RecommendedQuantityNormalized)\",\"NativeReferenceName\":\"Rec qty normalized1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_CommitmentDiscountNormalizedSize\"},\"Name\":\"ReservationRecommendations.x_CommitmentDiscountNormalizedSize\",\"NativeReferenceName\":\"Normalized size1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_CommitmentDiscountNormalizedGroup\"},\"Name\":\"ReservationRecommendations.x_CommitmentDiscountNormalizedGroup\",\"NativeReferenceName\":\"Flexibility group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_CommitmentDiscountScope\"},\"Name\":\"ReservationRecommendations.x_CommitmentDiscountScope\",\"NativeReferenceName\":\"Scope1\"}]},\"columnProperties\":{\"AutofitComboMeter.ArmSkuName\":{\"displayName\":\"SKU\"},\"ReservationRecommendations.RegionName\":{\"displayName\":\"Region\"},\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\":{\"displayName\":\"Potential savings\"},\"Sum(ReservationRecommendations.x_EffectiveCostBefore)\":{\"displayName\":\"Contracted cost\"},\"Sum(ReservationRecommendations.x_RecommendedQuantity)\":{\"displayName\":\"Rec qty\"},\"ReservationRecommendations.x_CommitmentDiscountNormalizedSize\":{\"displayName\":\"Normalized size\"},\"Sum(ReservationRecommendations.x_RecommendedQuantityNormalized)\":{\"displayName\":\"Rec qty normalized\"},\"ReservationRecommendations.x_CommitmentDiscountScope\":{\"displayName\":\"Scope\"},\"ReservationRecommendations.x_CommitmentDiscountNormalizedGroup\":{\"displayName\":\"Flexibility group\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"values\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'8'\"}}}}}],\"columnHeaders\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'9'\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Recommendations based on recent usage'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"lockAspect\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"stylePreset\":[{\"properties\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Default'\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", + "config": "{\"name\":\"c87ecf964f0eba84267c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":3000,\"width\":1048,\"height\":320,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"ReservationRecommendations.x_CommitmentDiscountScope\"},{\"queryRef\":\"ReservationRecommendations.x_SkuTermLabel\"},{\"queryRef\":\"ReservationRecommendations.x_CommitmentDiscountNormalizedGroup\"},{\"queryRef\":\"ReservationRecommendations.RegionName\"},{\"queryRef\":\"Sum(ReservationRecommendations.x_RecommendedQuantity)\"},{\"queryRef\":\"AutofitComboMeter.ArmSkuName\"},{\"queryRef\":\"Sum(ReservationRecommendations.x_RecommendedQuantityNormalized)\"},{\"queryRef\":\"ReservationRecommendations.x_CommitmentDiscountNormalizedSize\"},{\"queryRef\":\"Sum(ReservationRecommendations.x_EffectiveCostBefore)\"},{\"queryRef\":\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\"},{\"queryRef\":\"Sum(ReservationRecommendations.x_BreakEvenMonths)\"},{\"queryRef\":\"ReservationRecommendations.x_BreakEvenDate\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"InstanceSizeFlexibility\",\"Type\":0},{\"Name\":\"r1\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"x_SkuType\"},\"Name\":\"AutofitComboMeter.ArmSkuName\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"RegionName\"},\"Name\":\"ReservationRecommendations.RegionName\",\"NativeReferenceName\":\"Region\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"Potential savings1\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_EffectiveCostBefore\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_EffectiveCostBefore)\",\"NativeReferenceName\":\"Contracted cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_RecommendedQuantity\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_RecommendedQuantity)\",\"NativeReferenceName\":\"Rec qty\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_RecommendedQuantityNormalized\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_RecommendedQuantityNormalized)\",\"NativeReferenceName\":\"Rec qty normalized1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_CommitmentDiscountNormalizedSize\"},\"Name\":\"ReservationRecommendations.x_CommitmentDiscountNormalizedSize\",\"NativeReferenceName\":\"Normalized size1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_CommitmentDiscountNormalizedGroup\"},\"Name\":\"ReservationRecommendations.x_CommitmentDiscountNormalizedGroup\",\"NativeReferenceName\":\"Normalized group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_CommitmentDiscountScope\"},\"Name\":\"ReservationRecommendations.x_CommitmentDiscountScope\",\"NativeReferenceName\":\"Scope1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_BreakEvenDate\"},\"Name\":\"ReservationRecommendations.x_BreakEvenDate\",\"NativeReferenceName\":\"Target\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_BreakEvenMonths\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_BreakEvenMonths)\",\"NativeReferenceName\":\"Break-even\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_SkuTermLabel\"},\"Name\":\"ReservationRecommendations.x_SkuTermLabel\",\"NativeReferenceName\":\"Term\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_BreakEvenDate\"}}}]},\"columnProperties\":{\"AutofitComboMeter.ArmSkuName\":{\"displayName\":\"Size\"},\"ReservationRecommendations.RegionName\":{\"displayName\":\"Region\"},\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\":{\"displayName\":\"Potential savings\"},\"Sum(ReservationRecommendations.x_EffectiveCostBefore)\":{\"displayName\":\"Contracted cost\"},\"Sum(ReservationRecommendations.x_RecommendedQuantity)\":{\"displayName\":\"Rec qty\"},\"ReservationRecommendations.x_CommitmentDiscountNormalizedSize\":{\"displayName\":\"Normalized size\"},\"Sum(ReservationRecommendations.x_RecommendedQuantityNormalized)\":{\"displayName\":\"Rec qty normalized\"},\"ReservationRecommendations.x_CommitmentDiscountScope\":{\"displayName\":\"Scope\"},\"ReservationRecommendations.x_CommitmentDiscountNormalizedGroup\":{\"displayName\":\"Normalized group\"},\"ReservationRecommendations.x_BreakEvenDate\":{\"displayName\":\"Target\"},\"Sum(ReservationRecommendations.x_BreakEvenMonths)\":{\"displayName\":\"Break-even\"},\"ReservationRecommendations.x_SkuTermLabel\":{\"displayName\":\"Term\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"values\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'8'\"}}}}}],\"columnHeaders\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'9'\"}}}}}],\"columnFormatting\":[{\"properties\":{\"styleTotal\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"metadata\":\"Sum(ReservationRecommendations.x_BreakEvenMonths)\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Recommendations based on recent usage'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"lockAspect\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"stylePreset\":[{\"properties\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Default'\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", "filters": "[]", - "height": 320.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 4000.0 + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 3000.00 }, { - "config": "{\"name\":\"c9eda8b13e18eaede87c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":55.831394029061336,\"z\":2000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"ReservationRecommendations.x_SkuTermLabel\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_SkuTermLabel\"},\"Name\":\"ReservationRecommendations.x_SkuTermLabel\",\"NativeReferenceName\":\"Term\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"ReservationRecommendations.x_SkuTermLabel\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"ReservationRecommendations.x_SkuTermLabel\":{\"displayName\":\"Term\"}},\"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\":\"'Term'\"}}},\"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\":\"'Term'\"}}}}}],\"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\":\"512bf45fa44cb87b8f87\"}", + "config": "{\"name\":\"c9eda8b13e18eaede87c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":55.831394029061336,\"z\":3000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"ReservationRecommendations.x_SkuTermLabel\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_SkuTermLabel\"},\"Name\":\"ReservationRecommendations.x_SkuTermLabel\",\"NativeReferenceName\":\"Term\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"ReservationRecommendations.x_SkuTermLabel\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"ReservationRecommendations.x_SkuTermLabel\":{\"displayName\":\"Term\"}},\"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\":\"'Term'\"}}},\"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\":\"'Term'\"}}}}}],\"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\":\"512bf45fa44cb87b8f87\"}", "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.0, - "width": 200.0, - "x": 0.0, + "height": 56.00, + "width": 200.00, + "x": 0.00, "y": 55.83, - "z": 2000.0 + "z": 3000.00 }, { "config": "{\"name\":\"ca4b9c7d702a8aab05bc\",\"layouts\":[{\"id\":0,\"position\":{\"height\":40,\"width\":40,\"x\":160,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"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#reservation-recommendations'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"f77fc5fbcd293683f672\"}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"d31efcef163838b2340d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":192,\"x\":0,\"y\":0,\"z\":0,\"tabOrder\":6000}}],\"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\":\"f77fc5fbcd293683f672\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"da3cbd6700e9897281ff\",\"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\":\"9b6a4c8a5c5b82ad01d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 + }, + { + "config": "{\"name\":\"e4ab08c20ea51077b926\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":10000,\"width\":376,\"height\":280,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"lineClusteredColumnComboChart\",\"projections\":{\"Category\":[{\"queryRef\":\"ReservationRecommendations.x_CommitmentDiscountNormalizedGroup\",\"active\":true}],\"Y2\":[{\"queryRef\":\"Sum(ReservationRecommendations.x_BreakEvenMonths)\"}],\"Y\":[{\"queryRef\":\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_BreakEvenMonths\"}},\"Function\":3},\"Name\":\"Sum(ReservationRecommendations.x_BreakEvenMonths)\",\"NativeReferenceName\":\"Break-even\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_CommitmentDiscountNormalizedGroup\"},\"Name\":\"ReservationRecommendations.x_CommitmentDiscountNormalizedGroup\",\"NativeReferenceName\":\"Normalized group\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"Reservation discount\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0}}}]},\"columnProperties\":{\"Min(Usage details.ResourceId)\":{\"displayName\":\"Resources\"},\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\":{\"displayName\":\"Reservation discount\"},\"Sum(ReservationRecommendations.x_BreakEvenMonths)\":{\"displayName\":\"Break-even\"},\"ReservationRecommendations.x_CommitmentDiscountNormalizedGroup\":{\"displayName\":\"Normalized group\"}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}},\"showTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"categoryAxis\":[{\"properties\":{\"concatenateLabels\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#990000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'OnDemand'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'Reservation'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'SavingsPlan'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Committed Spend'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Committed Usage'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#990000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Standard'\"}}}}}]}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"invertAxis\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Savings x Breakeven'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", + "filters": "[{\"name\":\"Filter518024010cd4d0cb01f8\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"InstanceSizeFlexibility\"}},\"Property\":\"x_CommitmentDiscountFlexGroup\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":1},{\"name\":\"Filterd981e081967870279aa8\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"RegionName\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":2},{\"name\":\"Filter0a1e4d600032cc26630d\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterSubcategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":3},{\"name\":\"Filtera4540d062700d7544be8\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_UsageCPUHours\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":4},{\"name\":\"Filter12dc03cc9545a38287a1\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":5},{\"name\":\"Filter713e47d0e8c260489cd9\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_UsageCPUHours\"}},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":6},{\"name\":\"Filter6296d6f710405678a875\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":7},{\"name\":\"Filter0e715e497049590600d7\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterSubcategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":8},{\"name\":\"Filter334808e2d2a2c1b00899\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":9},{\"name\":\"Filter0fb7b9a81c05c7d45456\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":10},{\"name\":\"Filtera8bbde2b6e76eca330b0\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"RegionName\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":11}]", + "height": 280.00, + "width": 376.00, + "x": 216.00, + "y": 104.00, + "z": 10000.00 }, { - "config": "{\"name\":\"ece2d625fee5317088d5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"tabOrder\":5000}}],\"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.RateOptimization/featureName/KQL.ReservationRecommendations'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"f77fc5fbcd293683f672\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"ece2d625fee5317088d5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"tabOrder\":5000}}],\"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/FTK$$ftkver$$/bladeName/PowerBI.RateOptimization/featureName/KQL.ReservationRecommendations'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"f77fc5fbcd293683f672\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"f3080620308661fb465d\",\"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\":\"9b6a4c8a5c5b82ad01d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { - "config": "{\"name\":\"f42ce7186574f2147f1c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1080,\"y\":8,\"z\":10000,\"width\":184,\"height\":88,\"tabOrder\":17003}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"ℹ️ This page requires reservation recommendations. If it does not load, confirm \",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#000000\"}},{\"value\":\"Cost Management \",\"textStyle\":{\"fontSize\":\"10.6667px\",\"color\":\"#000000\"}},{\"value\":\"exports were created.\",\"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'\"}}}}}}}]}}}", + "config": "{\"name\":\"f42ce7186574f2147f1c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1080,\"y\":8,\"z\":9000,\"width\":184,\"height\":88,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"ℹ️ This page requires reservation recommendations. If it does not load, confirm \",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#000000\"}},{\"value\":\"Cost Management \",\"textStyle\":{\"fontSize\":\"10.6667px\",\"color\":\"#000000\"}},{\"value\":\"exports were created.\",\"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.0, - "width": 184.0, - "x": 1080.0, - "y": 8.0, - "z": 10000.0 + "height": 88.00, + "width": 184.00, + "x": 1080.00, + "y": 8.00, + "z": 9000.00 }, { "config": "{\"name\":\"f4780a711d57b35deafe\",\"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\":\"9b6a4c8a5c5b82ad01d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"f77fc5fbcd293683f672\",\"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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{\"filterSortOrder\":3}", "displayName": "Commitment savings", "displayOption": 1, "filters": "[{\"name\":\"Filterdbb9d1b54707630db807\",\"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\":{},\"ordinal\":0},{\"name\":\"Filterc733fd6032a5383472b6\",\"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\":{},\"ordinal\":1}]", - "height": 720.0, + "height": 720.00, "name": "ReportSection7e6c4580ee0b342bf135", "ordinal": 3, "visualContainers": [ { - "config": "{\"name\":\"084efe22ce64d80153be\",\"layouts\":[{\"id\":0,\"position\":{\"x\":576,\"y\":48,\"z\":8000,\"width\":40,\"height\":48,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"20pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Equals'\"}}}}}]}}}", + "config": "{\"name\":\"0488159030c8211a4260\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":2000}}],\"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\":\"56f13e298007589ec999\"}", "filters": "[]", - "height": 48.0, - "width": 40.0, - "x": 576.0, - "y": 48.0, - "z": 8000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { - "config": "{\"name\":\"08cbcbd365ab05e0af5f\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.39572239294395,\"y\":8.005493854933814,\"z\":0,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, - "width": 1048.09, - "x": 215.4, - "y": 8.01, - "z": 0.0 + "config": "{\"name\":\"07477883a05434090c09\",\"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\":\"cebc3053acb3093c537d\"}", + "filters": "[]", + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { - "config": "{\"name\":\"0f1816299d658085a121\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":8,\"z\":4000,\"width\":176,\"height\":88,\"tabOrder\":9000}}],\"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\":\"'Commitment ESR'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Default'\"}}}}}]}}}", + "config": "{\"name\":\"0eb8ceb90d8c8e0d5aa3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK$$ftkver$$/bladeName/PowerBI.RateOptimization/featureName/KQL.CommitmentDiscountSavings'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"cebc3053acb3093c537d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 176.0, - "x": 792.0, - "y": 8.0, - "z": 4000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { - "config": "{\"name\":\"1263a48a4f59474f1853\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"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\":\"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\"}}}}}]}}}", + "config": "{\"name\":\"0fe1780035bc0547c9a5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":7000,\"width\":184,\"height\":88,\"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\":\"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\":\"'Contracted cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[]", - "height": 88.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 6000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 7000.00 }, { - "config": "{\"name\":\"1e3729d8b640f2013785\",\"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\":\"08cbcbd365ab05e0af5f\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"12013905a35c59e89b99\",\"layouts\":[{\"id\":0,\"position\":{\"x\":576,\"y\":40.39591545419347,\"z\":8000,\"width\":40,\"height\":48,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"20pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Equals'\"}}}}}]}}}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.01, - "y": 383.9, - "z": 13000.0 + "height": 48.00, + "width": 40.00, + "x": 576.00, + "y": 40.40, + "z": 8000.00 }, { - "config": "{\"name\":\"21b5e448b55901cc7968\",\"layouts\":[{\"id\":0,\"position\":{\"x\":384,\"y\":48,\"z\":9000,\"width\":40,\"height\":48,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"−\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"20pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Minus'\"}}}}}]}}}", + "config": "{\"name\":\"1343de33720acc890365\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":6000,\"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": 48.0, - "width": 40.0, - "x": 384.0, - "y": 48.0, - "z": 9000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 6000.00 }, { - "config": "{\"name\":\"21df02571d411dfa301f\",\"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\":\"08cbcbd365ab05e0af5f\",\"howCreated\":\"InsertVisualButton\"}", - "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "config": "{\"name\":\"13a7fed15d91b44d6e00\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.39572239294395,\"y\":8.005493854933814,\"z\":0,\"tabOrder\":9000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", + "height": 704.00, + "width": 1048.09, + "x": 215.40, + "y": 8.01, + "z": 0.00 }, { - "config": "{\"name\":\"2dd2887e5fdd25f480bf\",\"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\":\"08cbcbd365ab05e0af5f\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"18942b0899d81028355a\",\"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\":\"13a7fed15d91b44d6e00\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 286.79, - "y": 0.0, - "z": 7000.0 + "height": 704.00, + "width": 88.00, + "x": 960.09, + "y": 0.00, + "z": 0.00 }, { - "config": "{\"name\":\"344697e75daf0d8e8da3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":2000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "config": "{\"name\":\"1c1df03ab230408e3724\",\"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\":\"13a7fed15d91b44d6e00\",\"howCreated\":\"InsertVisualButton\"}", + "filters": "[]", + "height": 704.00, + "width": 88.00, + "x": 479.16, + "y": 0.00, + "z": 5000.00 }, { - "config": "{\"name\":\"468fa052859322149692\",\"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\":\"08cbcbd365ab05e0af5f\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"25c6f8e9e268170d6ba6\",\"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\":\"13a7fed15d91b44d6e00\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 382.98, - "y": 0.0, - "z": 6000.0 + "height": 704.00, + "width": 88.00, + "x": 671.53, + "y": 0.00, + "z": 3000.00 }, { - "config": "{\"name\":\"4dcedb6143dbc6f93186\",\"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\":\"08cbcbd365ab05e0af5f\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"2df5257d27c69c0570a6\",\"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\":\"13a7fed15d91b44d6e00\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { - "config": "{\"name\":\"4efb92a8a1cd1063c1d9\",\"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\":\"08cbcbd365ab05e0af5f\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"33219d330089285ac919\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":3000}}],\"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\":\"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\":\"'Commitment savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 5000.00 }, { - "config": "{\"name\":\"4fcea32824b1df3fb414\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":3000,\"width\":1048,\"height\":280,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.x_ReportingDate\",\"active\":true}],\"Series\":[{\"queryRef\":\"Costs.CommitmentDiscountType\"}],\"Y\":[{\"queryRef\":\"Sum(Costs.x_CommitmentDiscountSavings)\"}]},\"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\":\"x_ReportingDate\"},\"Name\":\"Costs.x_ReportingDate\",\"NativeReferenceName\":\"x_ReportingDate\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"Commitment savings\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"}}}]},\"columnProperties\":{\"Sum(Costs.x_CommitmentDiscountSavings)\":{\"displayName\":\"Commitment savings\"},\"Costs.CommitmentDiscountType\":{\"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'\"}}},\"showTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"zoom\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountProgram\"}},\"Right\":{\"Literal\":{\"Value\":\"'Reservation'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountProgram\"}},\"Right\":{\"Literal\":{\"Value\":\"'Savings plan'\"}}}}}]}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount savings'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}", + "config": "{\"name\":\"3f2b567921c7c1bbe3a2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":384,\"y\":40.39591545419347,\"z\":9000,\"width\":48,\"height\":48,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"−\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"20pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Minus'\"}}}}}]}}}", "filters": "[]", - "height": 280.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 48.00, + "width": 48.00, + "x": 384.00, + "y": 40.40, + "z": 9000.00 }, { - "config": "{\"name\":\"58142ba1a06925e08fc2\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"344697e75daf0d8e8da3\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "config": "{\"name\":\"41a1a001220e9a2a0873\",\"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\":\"13a7fed15d91b44d6e00\",\"howCreated\":\"InsertVisualButton\"}", + "filters": "[]", + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { - "config": "{\"name\":\"5c085a1fe7cbada53c81\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":192,\"x\":0,\"y\":0,\"z\":5000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Commitment \",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"discount savings\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review cost savings from reservation and savings plan usage.\",\"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\":\"344697e75daf0d8e8da3\"}", + "config": "{\"name\":\"53045172da6bd38900b1\",\"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\":\"13a7fed15d91b44d6e00\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { - "config": "{\"name\":\"6a1079ff5673f73818a9\",\"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\":\"08cbcbd365ab05e0af5f\",\"howCreated\":\"InsertVisualButton\"}", - "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 671.53, - "y": 0.0, - "z": 3000.0 + "config": "{\"name\":\"56f13e298007589ec999\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"cebc3053acb3093c537d\"}", + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { - "config": "{\"name\":\"7500f73de257277a3b5b\",\"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\":\"08cbcbd365ab05e0af5f\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"57546b02061dee86a166\",\"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\":\"13a7fed15d91b44d6e00\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { - "config": "{\"name\":\"75c56f0727b95d5ed625\",\"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\":\"08cbcbd365ab05e0af5f\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"673f1a051dc262d82443\",\"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\":\"56f13e298007589ec999\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { - "config": "{\"name\":\"7b394c6bbdddfd151a09\",\"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\":\"08cbcbd365ab05e0af5f\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"67f1526136bac09e34cd\",\"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\":\"13a7fed15d91b44d6e00\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.01, + "y": 383.90, + "z": 13000.00 }, { - "config": "{\"name\":\"80d5709dbc5aaeb0015c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":7000,\"width\":184,\"height\":88,\"tabOrder\":4000}}],\"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\":\"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\":\"'Contracted cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", + "config": "{\"name\":\"6a27c03e046dd6d424c0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":192,\"x\":0,\"y\":0,\"z\":5000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Commitment \",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"discount savings\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review cost savings from reservation and savings plan usage.\",\"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\":\"cebc3053acb3093c537d\"}", "filters": "[]", - "height": 88.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 7000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { - "config": "{\"name\":\"8abb93b54893d889738b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":0}}],\"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\":\"58142ba1a06925e08fc2\"}", + "config": "{\"name\":\"6b1152db5e8180d58d03\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":8,\"z\":4000,\"width\":176,\"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\":\"'Commitment 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": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 88.00, + "width": 176.00, + "x": 792.00, + "y": 8.00, + "z": 4000.00 }, { - "config": "{\"name\":\"8f7eccef672de866892e\",\"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\":\"08cbcbd365ab05e0af5f\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"71065a4dd366463a206e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":4000}}],\"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\":\"56f13e298007589ec999\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { - "config": "{\"name\":\"93efa748b3ac5b2a0fc7\",\"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\":\"08cbcbd365ab05e0af5f\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"855e425240eb8716e675\",\"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\":\"13a7fed15d91b44d6e00\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 767.72, - "y": 0.0, - "z": 2000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { - "config": "{\"name\":\"997b3c159d66511107a4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":40,\"width\":40,\"x\":160,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"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#commitment-discount-savings'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"344697e75daf0d8e8da3\"}", + "config": "{\"name\":\"88fa2600447bd9e62916\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1080,\"y\":8,\"z\":10000,\"width\":184,\"height\":88,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"ℹ️ If you see 0 savings for reservations, export prices from Cost Management and re-ingest costs in Data Factory.\",\"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": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 88.00, + "width": 184.00, + "x": 1080.00, + "y": 8.00, + "z": 10000.00 }, { - "config": "{\"name\":\"9b43d91b906268b4eab8\",\"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\":\"58142ba1a06925e08fc2\"}", + "config": "{\"name\":\"9e7bdb04bb7c7b84a7a2\",\"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\":\"13a7fed15d91b44d6e00\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { - "config": "{\"name\":\"9d8d0ea1d744beaa78fd\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":4000}}],\"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\":\"58142ba1a06925e08fc2\"}", - "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "config": "{\"name\":\"a67e63e1b7de1e420e0c\",\"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\":\"56f13e298007589ec999\"}", + "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\":\"a6d186079d7a077122ff\",\"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\":\"08cbcbd365ab05e0af5f\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"b06c02b1b17101910787\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":3000,\"width\":1048,\"height\":280,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.x_ReportingDate\",\"active\":true}],\"Series\":[{\"queryRef\":\"Costs.CommitmentDiscountType\"}],\"Y\":[{\"queryRef\":\"Sum(Costs.x_CommitmentDiscountSavings)\"}]},\"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\":\"x_ReportingDate\"},\"Name\":\"Costs.x_ReportingDate\",\"NativeReferenceName\":\"x_ReportingDate\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"Commitment savings\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"}}}]},\"columnProperties\":{\"Sum(Costs.x_CommitmentDiscountSavings)\":{\"displayName\":\"Commitment savings\"},\"Costs.CommitmentDiscountType\":{\"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'\"}}},\"showTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"zoom\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountProgram\"}},\"Right\":{\"Literal\":{\"Value\":\"'Reservation'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountProgram\"}},\"Right\":{\"Literal\":{\"Value\":\"'Savings plan'\"}}}}}]}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount savings'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { - "config": "{\"name\":\"a7030d1e32c5da56181d\",\"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\":\"08cbcbd365ab05e0af5f\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"b54decd1c619200173c3\",\"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\":\"13a7fed15d91b44d6e00\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 479.16, - "y": 0.0, - "z": 5000.0 + "height": 704.00, + "width": 88.00, + "x": 382.98, + "y": 0.00, + "z": 6000.00 }, { - "config": "{\"name\":\"abbf2d86a7da1b3ffd81\",\"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\":\"08cbcbd365ab05e0af5f\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"c4d1b830dab2050642e6\",\"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\":\"13a7fed15d91b44d6e00\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.01, + "y": 479.90, + "z": 12000.00 }, { - "config": "{\"name\":\"ad48e216de24ac9e322c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":392,\"z\":2000,\"width\":1048,\"height\":320,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.CommitmentDiscountName\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.x_CommitmentDiscountMeterCategory1\"},{\"queryRef\":\"Costs.x_CommitmentDiscountMeterSubcategory1\"},{\"queryRef\":\"Costs.ResourceId\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.x_CommitmentDiscountSavings)\"},{\"queryRef\":\"Costs.x_EffectiveSavingsRate\"}]},\"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\":\"Commitment\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"Contracted cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"Costs.ResourceId\",\"NativeReferenceName\":\"Resources\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"Savings\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveSavingsRate\"},\"Name\":\"Costs.x_EffectiveSavingsRate\",\"NativeReferenceName\":\"ESR\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountMeterCategory\"},\"Name\":\"Costs.x_CommitmentDiscountMeterCategory1\",\"NativeReferenceName\":\"Meter category\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountMeterSubcategory\"},\"Name\":\"Costs.x_CommitmentDiscountMeterSubcategory1\",\"NativeReferenceName\":\"Meter subcategory\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0}}}]},\"columnProperties\":{\"Costs.CommitmentDiscountName\":{\"displayName\":\"Commitment\"},\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"Sum(Costs.ContractedCost)\":{\"displayName\":\"Contracted cost\"},\"Costs.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"Costs.ResourceId\":{\"displayName\":\"Resources\"},\"Sum(Costs.x_CommitmentDiscountSavings)\":{\"displayName\":\"Savings\"},\"Costs.x_EffectiveSavingsRate\":{\"displayName\":\"ESR\"},\"Costs.x_CommitmentDiscountMeterCategory1\":{\"displayName\":\"Meter category\"},\"Costs.x_CommitmentDiscountMeterSubcategory1\":{\"displayName\":\"Meter subcategory\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"278.55073384258395D\"}}}},\"selector\":{\"metadata\":\"Costs.CommitmentDiscountName\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"143.26869590450173D\"}}}},\"selector\":{\"metadata\":\"Costs.x_CommitmentDiscountMeterCategory1\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"136.52239560720403D\"}}}},\"selector\":{\"metadata\":\"Costs.x_CommitmentDiscountMeterSubcategory1\"}}],\"values\":[{\"properties\":{\"wordWrap\":{\"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\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", - "filters": "[]", - "height": 320.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "config": "{\"name\":\"cebc3053acb3093c537d\",\"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 }, { - "config": "{\"name\":\"b9e3e628ce4096d735f7\",\"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\":\"08cbcbd365ab05e0af5f\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"cfeb40b8006600654735\",\"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\":\"13a7fed15d91b44d6e00\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.01, - "y": 479.9, - "z": 12000.0 + "height": 704.00, + "width": 88.00, + "x": 767.72, + "y": 0.00, + "z": 2000.00 }, { - "config": "{\"name\":\"bc2e903403b5e2c67a33\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":200,\"x\":0,\"y\":0,\"z\":1000,\"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\":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\":\"344697e75daf0d8e8da3\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"d0aa23852a8b5ad8187a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":0}}],\"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\":\"56f13e298007589ec999\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { - "config": "{\"name\":\"c061500e77c5e0ec0161\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1080,\"y\":8,\"z\":10000,\"width\":184,\"height\":88,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"ℹ️ If you see 0 savings for reservations, export prices from Cost Management and re-ingest costs in Data Factory.\",\"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'\"}}}}}}}]}}}", + "config": "{\"name\":\"d6703d02756e18a49829\",\"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\":\"13a7fed15d91b44d6e00\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 184.0, - "x": 1080.0, - "y": 8.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { - "config": "{\"name\":\"c7909631ed23dd3a6cb0\",\"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\":\"344697e75daf0d8e8da3\"}", + "config": "{\"name\":\"d6938c0ee653b00038b7\",\"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\":\"13a7fed15d91b44d6e00\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { - "config": "{\"name\":\"cb03cb4eeaaa4c808a31\",\"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\":\"08cbcbd365ab05e0af5f\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"d83ee570940004404005\",\"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\":\"cebc3053acb3093c537d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 575.35, - "y": 0.0, - "z": 4000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { - "config": "{\"name\":\"d355b56b4f2e2236b1fd\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":5000}}],\"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\":\"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\":\"'Commitment savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", + "config": "{\"name\":\"dde4aea82823a1c1e32b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":392,\"z\":2000,\"width\":1048,\"height\":320,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.CommitmentDiscountName\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.x_CommitmentDiscountMeterCategory1\"},{\"queryRef\":\"Costs.x_CommitmentDiscountMeterSubcategory1\"},{\"queryRef\":\"Costs.ResourceId\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.x_CommitmentDiscountSavings)\"},{\"queryRef\":\"Costs.x_EffectiveSavingsRate\"}]},\"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\":\"Commitment\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"Contracted cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"Costs.ResourceId\",\"NativeReferenceName\":\"Resources\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"Savings\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveSavingsRate\"},\"Name\":\"Costs.x_EffectiveSavingsRate\",\"NativeReferenceName\":\"ESR\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountMeterCategory\"},\"Name\":\"Costs.x_CommitmentDiscountMeterCategory1\",\"NativeReferenceName\":\"Meter category\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountMeterSubcategory\"},\"Name\":\"Costs.x_CommitmentDiscountMeterSubcategory1\",\"NativeReferenceName\":\"Meter subcategory\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0}}}]},\"columnProperties\":{\"Costs.CommitmentDiscountName\":{\"displayName\":\"Commitment\"},\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"Sum(Costs.ContractedCost)\":{\"displayName\":\"Contracted cost\"},\"Costs.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"Costs.ResourceId\":{\"displayName\":\"Resources\"},\"Sum(Costs.x_CommitmentDiscountSavings)\":{\"displayName\":\"Savings\"},\"Costs.x_EffectiveSavingsRate\":{\"displayName\":\"ESR\"},\"Costs.x_CommitmentDiscountMeterCategory1\":{\"displayName\":\"Meter category\"},\"Costs.x_CommitmentDiscountMeterSubcategory1\":{\"displayName\":\"Meter subcategory\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"278.55073384258395D\"}}}},\"selector\":{\"metadata\":\"Costs.CommitmentDiscountName\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"143.26869590450173D\"}}}},\"selector\":{\"metadata\":\"Costs.x_CommitmentDiscountMeterCategory1\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"136.52239560720403D\"}}}},\"selector\":{\"metadata\":\"Costs.x_CommitmentDiscountMeterSubcategory1\"}}],\"values\":[{\"properties\":{\"wordWrap\":{\"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\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[]", - "height": 88.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 5000.0 + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 }, { - "config": "{\"name\":\"daaef55dd1c1b9507cb7\",\"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\":\"58142ba1a06925e08fc2\"}", - "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "config": "{\"name\":\"e50a2b0d042cdc9e8798\",\"layouts\":[{\"id\":0,\"position\":{\"height\":40,\"width\":40,\"x\":160,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"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#commitment-discount-savings'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"cebc3053acb3093c537d\"}", + "filters": "[]", + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { - "config": "{\"name\":\"dc00639b4345b907729a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.RateOptimization/featureName/KQL.CommitmentDiscountSavings'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"344697e75daf0d8e8da3\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"eb7aacad417d2e82cc00\",\"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\":\"13a7fed15d91b44d6e00\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 704.00, + "width": 88.00, + "x": 575.35, + "y": 0.00, + "z": 4000.00 }, { - "config": "{\"name\":\"f5e644aa7cfd0df78832\",\"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\":\"08cbcbd365ab05e0af5f\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"f31503392b94520c5050\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":200,\"x\":0,\"y\":0,\"z\":1000,\"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\":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\":\"cebc3053acb3093c537d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 960.09, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { - "config": "{\"name\":\"f6c689259a7c06e25276\",\"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\":\"344697e75daf0d8e8da3\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"f8e286257aca3ccdb6ee\",\"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\":\"13a7fed15d91b44d6e00\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { - "config": "{\"name\":\"ffc7c1f54db2d8d68621\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":2000}}],\"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\":\"58142ba1a06925e08fc2\"}", + "config": "{\"name\":\"faf1d9a0c5242cb73e27\",\"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\":\"13a7fed15d91b44d6e00\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 704.00, + "width": 88.00, + "x": 286.79, + "y": 0.00, + "z": 7000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{\"filterSortOrder\":3}", "displayName": "Chargeback", "displayOption": 1, "filters": "[{\"name\":\"Filter8589aeaa9f96c95550d4\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"CMConnector\"}},\"Property\":\"CommitmentDiscountId\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":0},{\"name\":\"13a00810b20c27404cbc\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_AmortizationCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_AmortizationCategory\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Principal'\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"ordinal\":1}]", - "height": 720.0, + "height": 720.00, "name": "ReportSectionb4553e12c2cd5e230209", "ordinal": 5, "visualContainers": [ { "config": "{\"name\":\"01101b984b0cacc2ba89\",\"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\":\"ea023152e6ac6a1b5f79\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"0223adfc42d9e2801ef7\",\"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\":\"ea023152e6ac6a1b5f79\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "config": "{\"name\":\"185fc5a754fa219373bb\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":392,\"z\":2000,\"width\":1048,\"height\":320,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"pivotTable\",\"projections\":{\"Rows\":[{\"queryRef\":\"Costs.SubAccountName\",\"active\":true},{\"queryRef\":\"Costs.x_ResourceGroupName\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.CommitmentDiscountName\"}],\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.x_TotalSavings)\"}],\"Columns\":[{\"queryRef\":\"Costs.x_ReportingDate\",\"active\":true}]},\"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\":\"SubAccountName\"},\"Name\":\"Costs.SubAccountName\",\"NativeReferenceName\":\"Subscription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"Costs.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"Costs.CommitmentDiscountName\",\"NativeReferenceName\":\"Commitment\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"},\"Name\":\"Costs.x_ReportingDate\",\"NativeReferenceName\":\"x_ReportingDate\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_TotalSavings)\",\"NativeReferenceName\":\"Savings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"expansionStates\":[{\"roles\":[\"Rows\"],\"levels\":[{\"queryRefs\":[\"Costs.SubAccountName\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"SubAccountName\"}}],\"isPinned\":true},{\"queryRefs\":[\"Costs.x_ResourceGroupName\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_ResourceGroupName\"}}],\"isPinned\":true},{\"queryRefs\":[\"Costs.CommitmentDiscountType\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"Costs.CommitmentDiscountName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Costs.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"Costs.x_ResourceGroupName\":{\"displayName\":\"Resource group\"},\"Costs.SubAccountName\":{\"displayName\":\"Subscription\"},\"Costs.CommitmentDiscountName\":{\"displayName\":\"Commitment\"},\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Cost\"},\"Sum(Costs.x_TotalSavings)\":{\"displayName\":\"Savings\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"171.85825965311D\"}}}},\"selector\":{\"metadata\":\"Costs.CommitmentDiscountName\"}}]},\"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.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 }, { "config": "{\"name\":\"1c60663d33ce60053bc0\",\"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\":\"ea023152e6ac6a1b5f79\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "config": "{\"name\":\"2d17530ca5489eb2cab8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":192,\"x\":0,\"y\":0,\"z\":5000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Chargeback\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Break effective (amortized) cost down by subscription and resource group for 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\":\"a43f42b4b89247be1ddb\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"2e91173f0bee2eaf0458\",\"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\":\"ea023152e6ac6a1b5f79\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "config": "{\"name\":\"2ec6b09c69aba03f8564\",\"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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 5000.00 }, { "config": "{\"name\":\"3af399e52ae8458a0d8e\",\"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\":\"ea023152e6ac6a1b5f79\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "config": "{\"name\":\"44c4adb5504098894579\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":8,\"z\":3500,\"width\":176,\"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.0, - "width": 176.0, - "x": 792.0, - "y": 8.0, - "z": 3500.0 + "height": 88.00, + "width": 176.00, + "x": 792.00, + "y": 8.00, + "z": 3500.00 }, { "config": "{\"name\":\"4cad2fad7983c9409875\",\"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\":\"725f2e6068302e388633\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "config": "{\"name\":\"61f2b416d27b8a6036a9\",\"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\":\"ea023152e6ac6a1b5f79\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "config": "{\"name\":\"643ef1478e4ebdd68b8d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":0}}],\"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\":\"725f2e6068302e388633\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "config": "{\"name\":\"674ac1260cb02595e392\",\"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\":\"ea023152e6ac6a1b5f79\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"725f2e6068302e388633\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"a43f42b4b89247be1ddb\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"7e31a100ec0d4e3d141c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":4000}}],\"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\":\"725f2e6068302e388633\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"85cbef4bd7e58ad477af\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"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.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 4000.00 }, { "config": "{\"name\":\"90776f381f2206281e34\",\"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\":\"ea023152e6ac6a1b5f79\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { - "config": "{\"name\":\"954874dd67a6bd28c77f\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.RateOptimization/featureName/KQL.Chargeback'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"a43f42b4b89247be1ddb\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"954874dd67a6bd28c77f\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK$$ftkver$$/bladeName/PowerBI.RateOptimization/featureName/KQL.Chargeback'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"a43f42b4b89247be1ddb\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"9aeba88c07bc1ac9022a\",\"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\":\"ea023152e6ac6a1b5f79\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"9b70b0392af4a312c5bc\",\"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\":\"ea023152e6ac6a1b5f79\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"9c9464c739a174ec07b9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":2000}}],\"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\":\"725f2e6068302e388633\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "config": "{\"name\":\"a43f42b4b89247be1ddb\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":2000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"afb4c71ec53b4ea747b8\",\"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\":\"ea023152e6ac6a1b5f79\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "config": "{\"name\":\"b339252ff222cff06e1d\",\"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\":\"a43f42b4b89247be1ddb\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"b3b3dd89de934dc3146d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":200,\"x\":0,\"y\":0,\"z\":1000,\"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\":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\":\"a43f42b4b89247be1ddb\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"bd3b36bcfd6f896ec28b\",\"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\":\"ea023152e6ac6a1b5f79\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"c0727b3efbe58c0c913f\",\"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\":\"ea023152e6ac6a1b5f79\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "config": "{\"name\":\"c0b3c639a5b0f53f4b3f\",\"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\":\"a43f42b4b89247be1ddb\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "config": "{\"name\":\"c1dee687cea0d7225488\",\"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\":\"ea023152e6ac6a1b5f79\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "config": "{\"name\":\"ea023152e6ac6a1b5f79\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.39572239294395,\"y\":8.005493854933814,\"z\":0,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, + "height": 704.00, "width": 1048.09, - "x": 215.4, + "x": 215.40, "y": 8.01, - "z": 0.0 + "z": 0.00 }, { "config": "{\"name\":\"eb3ba2ae4866e89779e3\",\"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\":\"ea023152e6ac6a1b5f79\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"eba4cf5a38a623bb9bae\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_CommitmentDiscountUtilization\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_CommitmentDiscountUtilization\"},\"Name\":\"Costs.x_CommitmentDiscountUtilization\",\"NativeReferenceName\":\"x_CommitmentDiscountUtilization\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_CommitmentDiscountUtilization\"}}}]},\"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\":\"'Utilization'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[]", - "height": 88.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 6000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 6000.00 }, { "config": "{\"name\":\"ed45785ce2605aacffd8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":40,\"width\":40,\"x\":160,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"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#chargeback'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"a43f42b4b89247be1ddb\"}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"eeba3513ece72ad0bd6b\",\"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\":\"ea023152e6ac6a1b5f79\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"f5c614c9c9d44534092a\",\"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\":\"ea023152e6ac6a1b5f79\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "config": "{\"name\":\"fc23f4f4a24addd16f1b\",\"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\":\"ea023152e6ac6a1b5f79\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"fdcc124b3d84a8ec8a4c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":3000,\"width\":1048,\"height\":280,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.x_ReportingDate\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}],\"Series\":[{\"queryRef\":\"Costs.SubAccountName\"}]},\"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\":\"SubAccountName\"},\"Name\":\"Costs.SubAccountName\",\"NativeReferenceName\":\"Subscription\"},{\"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\"}}}]},\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"Costs.SubAccountName\":{\"displayName\":\"Subscription\"}},\"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\":\"'#990000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"SubscriptionName\"}},\"Right\":{\"Literal\":{\"Value\":\"'Unassigned'\"}}}}}]}}],\"layout\":[{\"properties\":{\"seriesOrderReversed\":{\"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": 280.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { "config": "{\"name\":\"ff84ab962e7447c2c4cc\",\"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\":\"725f2e6068302e388633\"}", "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{\"objects\":{},\"visibility\":1}", "displayName": "DQ", "displayOption": 2, "filters": "[]", - "height": 6000.0, + "height": 6000.00, "name": "ReportSectiond6ca3d1f0b7616304592", "ordinal": 10, "visualContainers": [ { "config": "{\"name\":\"019fd101ba5991e9013b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":144,\"y\":424,\"z\":46000,\"width\":152,\"height\":56,\"tabOrder\":44000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'List 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\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera10ee5ceee4531a0e792\",\"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\":\"Filter87a9078edba7a348e2c9\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filterac2af06bbba88bdc1720\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter0784f6c3eede70625b0e\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter9f9b168e613673359517\",\"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\":\"'Dynamic'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 56.0, - "width": 152.0, - "x": 144.0, - "y": 424.0, - "z": 46000.0 + "height": 56.00, + "width": 152.00, + "x": 144.00, + "y": 424.00, + "z": 46000.00 }, { "config": "{\"name\":\"0291b16753a082de3815\",\"layouts\":[{\"id\":0,\"position\":{\"x\":16.00505056554392,\"y\":1598.738223553032,\"z\":1000,\"width\":1248,\"height\":272,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_SkuDescription\"},{\"queryRef\":\"Costs.x_SkuRegion\"},{\"queryRef\":\"Sum(Costs.x_TotalDiscountPercent)\"},{\"queryRef\":\"Sum(Costs.ListUnitPrice)\"},{\"queryRef\":\"Costs.ContractedUnitPrice\"},{\"queryRef\":\"Sum(Costs.x_EffectiveUnitPrice)\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.CommitmentDiscountName\"},{\"queryRef\":\"Sum(Costs.BilledCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveUnitPrice\"},\"Name\":\"Sum(Costs.x_EffectiveUnitPrice)\",\"NativeReferenceName\":\"x_EffectiveUnitPrice1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListUnitPrice\"},\"Name\":\"Sum(Costs.ListUnitPrice)\",\"NativeReferenceName\":\"ListUnitPrice1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"x_SkuDescription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"CommitmentDiscountType\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedUnitPrice\"},\"Name\":\"Costs.ContractedUnitPrice\",\"NativeReferenceName\":\"ContractedUnitPrice\"},{\"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\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuRegion\"},\"Name\":\"Costs.x_SkuRegion\",\"NativeReferenceName\":\"x_SkuRegion\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"Costs.CommitmentDiscountName\",\"NativeReferenceName\":\"CommitmentDiscountName\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_TotalDiscountPercent\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_TotalDiscountPercent)\",\"NativeReferenceName\":\"x_TotalDiscountPercent\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_DiscountUnitPriceSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"448.75002107312343D\"}}}},\"selector\":{\"metadata\":\"Costs.x_SkuDescription\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'All rows with some discount'\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera2c21b8088b49ddb1001\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeCategory\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Adjustment'\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},{\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_TotalDiscountPercent\"}},\"Function\":0}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_TotalDiscountPercent\"}},\"Function\":0}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false}]", - "height": 272.0, - "width": 1248.0, + "height": 272.00, + "width": 1248.00, "x": 16.01, "y": 1598.74, - "z": 1000.0 + "z": 1000.00 }, { "config": "{\"name\":\"04a0f7289496c7309c78\",\"layouts\":[{\"id\":0,\"position\":{\"x\":144,\"y\":192.00000000000009,\"z\":25000,\"width\":152,\"height\":96,\"tabOrder\":23000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'List cost without discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera10ee5ceee4531a0e792\",\"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\":\"'Purchase'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter87a9078edba7a348e2c9\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 96.0, - "width": 152.0, - "x": 144.0, - "y": 192.0, - "z": 25000.0 + "height": 96.00, + "width": 152.00, + "x": 144.00, + "y": 192.00, + "z": 25000.00 }, { "config": "{\"name\":\"07c9b655a2e28a22c320\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":336,\"x\":0,\"y\":40,\"z\":45001,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Savings from\",\"textStyle\":{\"color\":\"#3393dd\"}}],\"horizontalTextAlignment\":\"center\"},{\"textRuns\":[{\"value\":\"commitment discounts\",\"textStyle\":{\"color\":\"#3393dd\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"eb68afd2c0010323736c\"}", "filters": "[]", - "height": 48.0, - "width": 336.0, - "x": 0.0, - "y": 40.0, - "z": 45001.0 + "height": 48.00, + "width": 336.00, + "x": 0.00, + "y": 40.00, + "z": 45001.00 }, { "config": "{\"name\":\"07e4462c400321037053\",\"layouts\":[{\"id\":0,\"position\":{\"x\":734.8580294802174,\"y\":518.8642358417379,\"z\":95000,\"width\":32,\"height\":56,\"tabOrder\":93000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 734.86, "y": 518.86, - "z": 95000.0 + "z": 95000.00 }, { "config": "{\"name\":\"10e7d5ec90a92dddd10b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":48,\"z\":4000,\"width\":1280,\"height\":128,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Cost savings\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"Cost savings can be broken down into savings from negotiated discounts \"},{\"value\":\"and savings from commitment discounts. Savings from negotiated discounts generally only applies to enterprise accounts and can be calculated as L\",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"istCost minus ContractedCost. Savings from commitment discounts applies to reservations and savings plans and can be calculated as ContractedCost minus EffectiveCost and EffectiveCost is calculated as the amortized cost of \\\"used\\\" and \\\"unused\\\" commitments. The \\\"unused\\\" commitment amount is the \\\"waste\\\" from usage or spend that was committed but not used by any resources during the commitment period – an hour for traditional reservations or the full term for prepurchase plans.\"}]}]}}]},\"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.0, - "width": 1280.0, - "x": 0.0, - "y": 48.0, - "z": 4000.0 + "height": 128.00, + "width": 1280.00, + "x": 0.00, + "y": 48.00, + "z": 4000.00 }, { "config": "{\"name\":\"13161778d66422736181\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1120,\"y\":1038.4384798295835,\"z\":49000,\"width\":136,\"height\":104,\"tabOrder\":47000}}],\"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\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.5}}}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.5}}}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Cost not included'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.5}}}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}]}}}", "filters": "[{\"name\":\"Filtera10ee5ceee4531a0e792\",\"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\":\"Filter87a9078edba7a348e2c9\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter1f5b26abd21cd013de0c\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingCategory\"}},\"type\":\"Categorical\",\"howCreated\":1},{\"name\":\"Filterf1bb82286209506dad41\",\"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": 104.0, - "width": 136.0, - "x": 1120.0, + "height": 104.00, + "width": 136.00, + "x": 1120.00, "y": 1038.44, - "z": 49000.0 + "z": 49000.00 }, { "config": "{\"name\":\"132c661345e251182509\",\"layouts\":[{\"id\":0,\"position\":{\"x\":942.8580294802173,\"y\":406.80876588811356,\"z\":48000,\"width\":176,\"height\":88,\"tabOrder\":46000}}],\"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\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"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\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}}}]}}}", "filters": "[{\"name\":\"Filterf31c3d3aae424e79a635\",\"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\":\"Filter9737721cb5c78e09e20b\",\"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\":\"'Dynamic'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 88.0, - "width": 176.0, + "height": 88.00, + "width": 176.00, "x": 942.86, "y": 406.81, - "z": 48000.0 + "z": 48000.00 }, { "config": "{\"name\":\"1b013f3008c414a09d48\",\"layouts\":[{\"id\":0,\"position\":{\"x\":743.8182129371943,\"y\":1030.9839831653585,\"z\":40000,\"width\":152,\"height\":96,\"tabOrder\":38000}}],\"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\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Unused commitment (waste)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera12c2a0dc4dccbe5b41b\",\"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\":{}},{\"name\":\"Filteraaa08787790362a27e0a\",\"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\":\"Filterd8fbd80db8e66d803e66\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filterdc6562c24d57b460dd8b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter2711f36306a3b2e28505\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'Unused'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"objects\":{}}]", - "height": 96.0, - "width": 152.0, + "height": 96.00, + "width": 152.00, "x": 743.82, "y": 1030.98, - "z": 40000.0 + "z": 40000.00 }, { "config": "{\"name\":\"1c0a43cff11d80e383c2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":5000,\"z\":97000,\"width\":1280,\"height\":96,\"tabOrder\":95000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Commitment orders\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"Commitment purchases are identified by the x_SkuOrderId. To map commitment usage back to the purchase, you will need to use this column.\"}]}]}}]},\"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": 96.0, - "width": 1280.0, - "x": 0.0, - "y": 5000.0, - "z": 97000.0 + "height": 96.00, + "width": 1280.00, + "x": 0.00, + "y": 5000.00, + "z": 97000.00 }, { "config": "{\"name\":\"2037b146c5261cd01b75\",\"layouts\":[{\"id\":0,\"position\":{\"x\":446.8017794802174,\"y\":614.8642358417379,\"z\":77000,\"width\":152,\"height\":56,\"tabOrder\":75000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Contracted cost after negotiated discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filter70beaddc01344a005587\",\"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\":\"Filter4bf10f9ab06e46cd0d9a\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter6e7bab30ac398d0bee37\",\"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": 56.0, - "width": 152.0, - "x": 446.8, + "height": 56.00, + "width": 152.00, + "x": 446.80, "y": 614.86, - "z": 77000.0 + "z": 77000.00 }, { "config": "{\"name\":\"245bd76b3239e0d19a30\",\"layouts\":[{\"id\":0,\"position\":{\"x\":728.0054384262527,\"y\":1167.2693501269214,\"z\":58000,\"width\":32,\"height\":56,\"tabOrder\":56000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 728.01, "y": 1167.27, - "z": 58000.0 + "z": 58000.00 }, { "config": "{\"name\":\"2466b0b76895060e3028\",\"layouts\":[{\"id\":0,\"position\":{\"x\":430.8017794802174,\"y\":614.8642358417379,\"z\":93000,\"width\":32,\"height\":56,\"tabOrder\":91000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"+\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, - "x": 430.8, + "height": 56.00, + "width": 32.00, + "x": 430.80, "y": 614.86, - "z": 93000.0 + "z": 93000.00 }, { "config": "{\"name\":\"24a7dd505080a20ca0c5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":304,\"y\":192,\"z\":28000,\"width\":176,\"height\":96,\"tabOrder\":26000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Contracted cost after negotiated discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filter129e400c7dc2e0083c9c\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter70beaddc01344a005587\",\"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\":\"'Purchase'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 96.0, - "width": 176.0, - "x": 304.0, - "y": 192.0, - "z": 28000.0 + "height": 96.00, + "width": 176.00, + "x": 304.00, + "y": 192.00, + "z": 28000.00 }, { "config": "{\"name\":\"2507afb197805329d549\",\"layouts\":[{\"id\":0,\"position\":{\"x\":936.0054384262527,\"y\":1247.2138801732972,\"z\":24000,\"width\":176,\"height\":88,\"tabOrder\":22000}}],\"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,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#DEF7AA'\"}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"preserveWhitespace\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"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\"}}}}}]}}}", "filters": "[{\"name\":\"Filter72199da057b650ab95bb\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_DiscountCostSavings\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filter0ef39c03524503151378\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":1},{\"name\":\"Filter683679acaa2c06ec9db0\",\"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\":{},\"ordinal\":2},{\"name\":\"Filtera89957212ee70c51005e\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_CommitmentCostSavings\"}},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":3},{\"name\":\"Filterfe90d01078200cbd5c0b\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_CommitmentCostSavings\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":4},{\"name\":\"Filter5cd89b8dca0041000b39\",\"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\":{},\"ordinal\":5}]", - "height": 88.0, - "width": 176.0, + "height": 88.00, + "width": 176.00, "x": 936.01, "y": 1247.21, - "z": 24000.0 + "z": 24000.00 }, { "config": "{\"name\":\"2763f10777733a8d649d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":295.8882854926301,\"y\":328,\"z\":34000,\"width\":152,\"height\":56,\"tabOrder\":32000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Contracted cost after negotiated discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filter129e400c7dc2e0083c9c\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter70beaddc01344a005587\",\"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\":\"Filter848f399050070931517a\",\"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\":\"'Standard'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 56.0, - "width": 152.0, + "height": 56.00, + "width": 152.00, "x": 295.89, - "y": 328.0, - "z": 34000.0 + "y": 328.00, + "z": 34000.00 }, { "config": "{\"name\":\"29ecd7e700db5731e391\",\"layouts\":[{\"id\":0,\"position\":{\"x\":936.0054384262527,\"y\":1151.2138801732972,\"z\":53000,\"width\":176,\"height\":88,\"tabOrder\":51000}}],\"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\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"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\":\"32D\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"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\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}}}]}}}", "filters": "[{\"name\":\"Filter5f0c1579a14c4b460b04\",\"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\":\"Filter5af08250b5b9c07ed590\",\"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\":{}},{\"name\":\"Filterbf70b6bd66692898e9e2\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 88.0, - "width": 176.0, + "height": 88.00, + "width": 176.00, "x": 936.01, "y": 1151.21, - "z": 53000.0 + "z": 53000.00 }, { "config": "{\"name\":\"2a23ba14e2a8327c9022\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":128,\"x\":102.06351446718419,\"y\":8,\"z\":44000,\"tabOrder\":1000}}],\"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\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0.2}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"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\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"eb68afd2c0010323736c\"}", "filters": "[{\"name\":\"Filterf31c3d3aae424e79a635\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 48.0, - "width": 128.0, + "height": 48.00, + "width": 128.00, "x": 102.06, - "y": 8.0, - "z": 44000.0 + "y": 8.00, + "z": 44000.00 }, { "config": "{\"name\":\"2b1dc984ad80012de3cc\",\"layouts\":[{\"id\":0,\"position\":{\"x\":-0.0013596908662998957,\"y\":4505.23822355303,\"z\":7000,\"width\":1280,\"height\":96,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Free SKUs\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"The following SKUs are all free. This may be due to preview pricing, a trial period, a free tier in tiered pricing, or another reason. If anything here is not free but has 0 billed and effective cost, please contact support as this means the Cost Management data is inaccurate or incomplete.\"}]}]}}]},\"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": 96.0, - "width": 1280.0, - "x": 0.0, + "height": 96.00, + "width": 1280.00, + "x": 0.00, "y": 4505.24, - "z": 7000.0 + "z": 7000.00 }, { "config": "{\"name\":\"2c33684277e3925c021c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":592,\"y\":1031.219243182222,\"z\":22000,\"width\":152,\"height\":96,\"tabOrder\":20000}}],\"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\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"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\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera12c2a0dc4dccbe5b41b\",\"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\":{}},{\"name\":\"Filteraaa08787790362a27e0a\",\"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\":\"Filterd8fbd80db8e66d803e66\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filterdc6562c24d57b460dd8b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter2711f36306a3b2e28505\",\"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\":{}}]", - "height": 96.0, - "width": 152.0, - "x": 592.0, + "height": 96.00, + "width": 152.00, + "x": 592.00, "y": 1031.22, - "z": 22000.0 + "z": 22000.00 }, { "config": "{\"name\":\"31cf1b6eb964c59d0a97\",\"layouts\":[{\"id\":0,\"position\":{\"x\":16.00505056554392,\"y\":1886.738223553032,\"z\":18000,\"width\":1248,\"height\":256,\"tabOrder\":18000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_SkuDescription\"},{\"queryRef\":\"Costs.x_SkuRegion\"},{\"queryRef\":\"Costs.ListUnitPrice\"},{\"queryRef\":\"Sum(Costs.ContractedUnitPrice)\"},{\"queryRef\":\"Sum(Costs.x_NegotiatedDiscountPercent)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedUnitPrice\"},\"Name\":\"Sum(Costs.ContractedUnitPrice)\",\"NativeReferenceName\":\"ContractedUnitPrice1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListUnitPrice\"},\"Name\":\"Costs.ListUnitPrice\",\"NativeReferenceName\":\"ListUnitPrice\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"x_SkuDescription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuRegion\"},\"Name\":\"Costs.x_SkuRegion\",\"NativeReferenceName\":\"x_SkuRegion\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_NegotiatedDiscountPercent\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_NegotiatedDiscountPercent)\",\"NativeReferenceName\":\"x_NegotiatedDiscountPercent\"}]},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Negotiated price discount (list - contracted)'\"}}}}}]}}}", "filters": "[{\"name\":\"Filter22e21a70c37a79255bd3\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filter89420b1e4a88d05e06b9\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_CommitmentUnitPriceSavings\"}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":1},{\"name\":\"Filter33c5cb0672a1361b6a98\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_EffectiveUnitPrice\"}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":2},{\"name\":\"Filtera91e378720ae0a76a660\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedUnitPrice\"}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":3},{\"name\":\"Filterc7a1e0b910c042d97105\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListUnitPrice\"}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":4},{\"name\":\"Filterad7cee600734613d44c0\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuDescription\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":5},{\"name\":\"Filterd0e34a65cd61e6a41369\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuRegion\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":6},{\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_NegotiatedDiscountPercent\"}},\"Function\":0}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_NegotiatedDiscountPercent\"}},\"Function\":0}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false}]", - "height": 256.0, - "width": 1248.0, + "height": 256.00, + "width": 1248.00, "x": 16.01, "y": 1886.74, - "z": 18000.0 + "z": 18000.00 }, { "config": "{\"name\":\"36507095783797a9ec07\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1120.0054384262526,\"y\":1246.078116015035,\"z\":52000,\"width\":136,\"height\":88,\"tabOrder\":50000}}],\"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\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.5}}}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0.4}}}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Cost not included'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.5}}}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.3}}}}}}}]}}}", "filters": "[{\"name\":\"Filtera10ee5ceee4531a0e792\",\"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\":\"Filter0780a1c02b7ac2062e55\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filterf8dcfa0170682ac24502\",\"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\":{}}]", - "height": 88.0, - "width": 136.0, + "height": 88.00, + "width": 136.00, "x": 1120.01, "y": 1246.08, - "z": 52000.0 + "z": 52000.00 }, { "config": "{\"name\":\"37e8d498b0d5d68b6dd0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":582.8017794802174,\"y\":614.8642358417379,\"z\":84000,\"width\":32,\"height\":56,\"tabOrder\":82000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, - "x": 582.8, + "height": 56.00, + "width": 32.00, + "x": 582.80, "y": 614.86, - "z": 84000.0 + "z": 84000.00 }, { "config": "{\"name\":\"3b305c7ec4b677b79e27\",\"layouts\":[{\"id\":0,\"position\":{\"x\":902.8580294802173,\"y\":616.0000000000001,\"z\":88000,\"width\":32,\"height\":56,\"tabOrder\":86000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 902.86, - "y": 616.0, - "z": 88000.0 + "y": 616.00, + "z": 88000.00 }, { "config": "{\"name\":\"44b2d2c859dbd83e4934\",\"layouts\":[{\"id\":0,\"position\":{\"x\":294.80256497284734,\"y\":614.8642358417379,\"z\":66000,\"width\":152,\"height\":56,\"tabOrder\":64000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Contracted cost after negotiated discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filter129e400c7dc2e0083c9c\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter70beaddc01344a005587\",\"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\":\"Filter4bf10f9ab06e46cd0d9a\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter6e7bab30ac398d0bee37\",\"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\":{}},{\"name\":\"Filter1680e704e005d70a06e6\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 56.0, - "width": 152.0, - "x": 294.8, + "height": 56.00, + "width": 152.00, + "x": 294.80, "y": 614.86, - "z": 66000.0 + "z": 66000.00 }, { "config": "{\"name\":\"47fad54a750500c636bd\",\"layouts\":[{\"id\":0,\"position\":{\"x\":936,\"y\":1038.4384798295835,\"z\":23000,\"width\":176,\"height\":104,\"tabOrder\":21000}}],\"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\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"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\":\"32D\"}}}}}],\"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\":\"'Commitment savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}}}]}}}", "filters": "[{\"name\":\"Filter5f0c1579a14c4b460b04\",\"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\":\"Filter5af08250b5b9c07ed590\",\"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\":{}},{\"name\":\"Filterbf70b6bd66692898e9e2\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter166be6ee82701315598b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 104.0, - "width": 176.0, - "x": 936.0, + "height": 104.00, + "width": 176.00, + "x": 936.00, "y": 1038.44, - "z": 23000.0 + "z": 23000.00 }, { "config": "{\"name\":\"4823f252c40910497205\",\"layouts\":[{\"id\":0,\"position\":{\"x\":942.8580294802173,\"y\":310.80876588811356,\"z\":35000,\"width\":176,\"height\":88,\"tabOrder\":33000}}],\"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\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"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\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}}}]}}}", "filters": "[{\"name\":\"Filterf31c3d3aae424e79a635\",\"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\":\"Filter4de46032594cdc70a323\",\"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\":\"'Standard'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 88.0, - "width": 176.0, + "height": 88.00, + "width": 176.00, "x": 942.86, "y": 310.81, - "z": 35000.0 + "z": 35000.00 }, { "config": "{\"name\":\"498ba11d8056be101d28\",\"layouts\":[{\"id\":0,\"position\":{\"x\":942.8580294802173,\"y\":502.80876588811356,\"z\":72000,\"width\":176,\"height\":88,\"tabOrder\":70000}}],\"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\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"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\":\"32D\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"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\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}}}]}}}", "filters": "[{\"name\":\"Filter5f0c1579a14c4b460b04\",\"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\":\"Filter5af08250b5b9c07ed590\",\"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": 88.0, - "width": 176.0, + "height": 88.00, + "width": 176.00, "x": 942.86, "y": 502.81, - "z": 72000.0 + "z": 72000.00 }, { "config": "{\"name\":\"4b63ac0e10222eb65c00\",\"layouts\":[{\"id\":0,\"position\":{\"x\":744.0054384262527,\"y\":1167.2693501269214,\"z\":45000,\"width\":152,\"height\":56,\"tabOrder\":43000}}],\"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\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Unused commitment (waste)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera12c2a0dc4dccbe5b41b\",\"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\":{}},{\"name\":\"Filteraaa08787790362a27e0a\",\"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\":\"Filterd8fbd80db8e66d803e66\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filterdc6562c24d57b460dd8b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter2711f36306a3b2e28505\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'Unused'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"objects\":{}}]", - "height": 56.0, - "width": 152.0, + "height": 56.00, + "width": 152.00, "x": 744.01, "y": 1167.27, - "z": 45000.0 + "z": 45000.00 }, { "config": "{\"name\":\"4ca6f22cd001ae085c75\",\"layouts\":[{\"id\":0,\"position\":{\"x\":942.8580294802173,\"y\":598.8087658881136,\"z\":83000,\"width\":176,\"height\":88,\"tabOrder\":81000}}],\"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\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"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\":\"32D\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"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\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}}}]}}}", "filters": "[{\"name\":\"Filter5f0c1579a14c4b460b04\",\"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\":\"Filter5af08250b5b9c07ed590\",\"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": 88.0, - "width": 176.0, + "height": 88.00, + "width": 176.00, "x": 942.86, "y": 598.81, - "z": 83000.0 + "z": 83000.00 }, { "config": "{\"name\":\"5036750c581ce6994c58\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":112,\"x\":24,\"y\":8,\"z\":44000,\"tabOrder\":0}}],\"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\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0.2}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"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\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"9558afe7ec38ab1146b5\"}", "filters": "[{\"name\":\"Filterf31c3d3aae424e79a635\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter65175bcc836ce25cd031\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 48.0, - "width": 112.0, - "x": 24.0, - "y": 8.0, - "z": 44000.0 + "height": 48.00, + "width": 112.00, + "x": 24.00, + "y": 8.00, + "z": 44000.00 }, { "config": "{\"name\":\"50505fad2bc05dc1403a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1120.0054384262526,\"y\":1150.078116015035,\"z\":50000,\"width\":136,\"height\":88,\"tabOrder\":48000}}],\"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\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.5}}}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.5}}}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Cost not included'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.5}}}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}]}}}", "filters": "[{\"name\":\"Filtera10ee5ceee4531a0e792\",\"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\":\"Filter87a9078edba7a348e2c9\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter1f5b26abd21cd013de0c\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingCategory\"}},\"type\":\"Categorical\",\"howCreated\":1},{\"name\":\"Filterf1bb82286209506dad41\",\"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\":{}},{\"name\":\"Filterf48f2a787a3d1ebbde73\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 88.0, - "width": 136.0, + "height": 88.00, + "width": 136.00, "x": 1120.01, "y": 1150.08, - "z": 50000.0 + "z": 50000.00 }, { "config": "{\"name\":\"5178a9492896400ec2ea\",\"layouts\":[{\"id\":0,\"position\":{\"x\":16.00000000000003,\"y\":616.0000000000001,\"z\":76000,\"width\":128,\"height\":56,\"tabOrder\":74000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Reservation usage\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"12pt\"}}]}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 128.0, - "x": 16.0, - "y": 616.0, - "z": 76000.0 + "height": 56.00, + "width": 128.00, + "x": 16.00, + "y": 616.00, + "z": 76000.00 }, { "config": "{\"name\":\"5bda8a3ba09b9e78954d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":144,\"y\":616.0000000000001,\"z\":42000,\"width\":152,\"height\":56,\"tabOrder\":40000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'List 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\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera10ee5ceee4531a0e792\",\"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\":\"Filter87a9078edba7a348e2c9\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filterac2af06bbba88bdc1720\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter2664c1e9ca84a4244e7e\",\"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\":{}},{\"name\":\"Filter0784f6c3eede70625b0e\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 56.0, - "width": 152.0, - "x": 144.0, - "y": 616.0, - "z": 42000.0 + "height": 56.00, + "width": 152.00, + "x": 144.00, + "y": 616.00, + "z": 42000.00 }, { "config": "{\"name\":\"5d2ecc09dca9f8cbd7df\",\"layouts\":[{\"id\":0,\"position\":{\"x\":8,\"y\":1248,\"z\":96000,\"width\":696,\"height\":216,\"tabOrder\":94000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ChargeCategory\"},{\"queryRef\":\"Costs.CommitmentDiscountStatus\"},{\"queryRef\":\"Costs.PricingCategory\"},{\"queryRef\":\"Costs.x_PricingSubcategory\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Sum(Costs.x_CommitmentDiscountSavings)\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"CommitmentDiscountType\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"},\"Name\":\"Costs.CommitmentDiscountStatus\",\"NativeReferenceName\":\"CommitmentDiscountStatus\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_PricingSubcategory\"},\"Name\":\"Costs.x_PricingSubcategory\",\"NativeReferenceName\":\"x_PricingSubcategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingCategory\"},\"Name\":\"Costs.PricingCategory\",\"NativeReferenceName\":\"PricingCategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeCategory\"},\"Name\":\"Costs.ChargeCategory\",\"NativeReferenceName\":\"ChargeCategory\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"x_CommitmentDiscountSavings\"}]},\"drillFilterOtherVisuals\":true}}", "filters": "[]", - "height": 216.0, - "width": 696.0, - "x": 8.0, - "y": 1248.0, - "z": 96000.0 + "height": 216.00, + "width": 696.00, + "x": 8.00, + "y": 1248.00, + "z": 96000.00 }, { "config": "{\"name\":\"5da689c6953bee08512e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":936,\"z\":70000,\"width\":1280,\"height\":80,\"tabOrder\":68000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Commitment savings\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"Below is commitment savings only without factoring in list cost since it is not always available for commitment discounts. For details, see the the \\\"Missing list price/cost\\\" section below.\"}]}]}}]},\"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.0, - "width": 1280.0, - "x": 0.0, - "y": 936.0, - "z": 70000.0 + "height": 80.00, + "width": 1280.00, + "x": 0.00, + "y": 936.00, + "z": 70000.00 }, { "config": "{\"name\":\"5e047a1eebd7ce757ca0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":942.8580294802173,\"y\":694.8087658881136,\"z\":73000,\"width\":176,\"height\":88,\"tabOrder\":71000}}],\"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,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#DEF7AA'\"}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"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\":\"false\"}}},\"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\"}}}}}]}}}", "filters": "[{\"name\":\"Filter72199da057b650ab95bb\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_DiscountCostSavings\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":0}]", - "height": 88.0, - "width": 176.0, + "height": 88.00, + "width": 176.00, "x": 942.86, "y": 694.81, - "z": 73000.0 + "z": 73000.00 }, { "config": "{\"name\":\"63be6b3d0c50b260670a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.005050565543920964,\"y\":1470.7382235530315,\"z\":5000,\"width\":1280,\"height\":112,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Unit price discounts\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"Calculating savings at a price per unit level is fundamentally the same with list, contracted, and effective unit prices, but since the price changes per SKU, the key to understanding savings at this level is evaluating each row with the right supplemental data. Note that Cost Management is missing some values that makes this incomplete. For simplicity, the tables in this section only include rows where savings can be calculated. View the sections below to identify data gaps.\"}]}]}}]},\"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.0, - "width": 1280.0, + "height": 112.00, + "width": 1280.00, "x": 0.01, "y": 1470.74, - "z": 5000.0 + "z": 5000.00 }, { "config": "{\"name\":\"671fd3402a0394bc342c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":752,\"y\":480,\"z\":91000,\"width\":160,\"height\":96,\"tabOrder\":89000}}],\"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\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Unused commitment (waste)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera12c2a0dc4dccbe5b41b\",\"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\":{}},{\"name\":\"Filteraaa08787790362a27e0a\",\"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\":\"Filterd8fbd80db8e66d803e66\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filterdc6562c24d57b460dd8b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter2711f36306a3b2e28505\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'Unused'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"objects\":{}}]", - "height": 96.0, - "width": 160.0, - "x": 752.0, - "y": 480.0, - "z": 91000.0 + "height": 96.00, + "width": 160.00, + "x": 752.00, + "y": 480.00, + "z": 91000.00 }, { "config": "{\"name\":\"67253183555b602d1314\",\"layouts\":[{\"id\":0,\"position\":{\"x\":15.998640309133702,\"y\":4681.238223553032,\"z\":6000,\"width\":1248,\"height\":304,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ChargeCategory\"},{\"queryRef\":\"Costs.x_SkuDescription\"},{\"queryRef\":\"Sum(Costs.PricingQuantity)\"},{\"queryRef\":\"Costs.PricingUnit\"},{\"queryRef\":\"Sum(Costs.x_PricingBlockSize)\"},{\"queryRef\":\"Sum(Costs.BilledCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Sum(Costs.ListCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"x_SkuDescription\"},{\"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\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeCategory\"},\"Name\":\"Costs.ChargeCategory\",\"NativeReferenceName\":\"ChargeCategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_PricingBlockSize\"},\"Name\":\"Sum(Costs.x_PricingBlockSize)\",\"NativeReferenceName\":\"x_PricingBlockSize1\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.PricingQuantity)\",\"NativeReferenceName\":\"PricingQuantity\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingUnit\"},\"Name\":\"Costs.PricingUnit\",\"NativeReferenceName\":\"PricingUnit\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"ListCost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"}}}]},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"472.6959847227845D\"}}}},\"selector\":{\"metadata\":\"Costs.x_SkuDescription\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"93.76234956166823D\"}}}},\"selector\":{\"metadata\":\"Costs.PricingUnit\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}}}}]}}}", "filters": "[{\"name\":\"Filter99d0a0928548c95e3087\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false},{\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"BilledCost\"}},\"Function\":0}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BilledCost\"}},\"Function\":0}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false},{\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false},{\"name\":\"Filter2719e5872ea81ee82b88\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_FreeReason\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_FreeReason\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Preview'\"}}],[{\"Literal\":{\"Value\":\"'Trial'\"}}],[{\"Literal\":{\"Value\":\"'Other'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{}}]}}]", - "height": 304.0, - "width": 1248.0, - "x": 16.0, + "height": 304.00, + "width": 1248.00, + "x": 16.00, "y": 4681.24, - "z": 6000.0 + "z": 6000.00 }, { "config": "{\"name\":\"674e0f995db72a517376\",\"layouts\":[{\"id\":0,\"position\":{\"x\":750.8580294802174,\"y\":614.8642358417379,\"z\":79000,\"width\":152,\"height\":56,\"tabOrder\":77000}}],\"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\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Unused commitment (waste)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera12c2a0dc4dccbe5b41b\",\"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\":{}},{\"name\":\"Filteraaa08787790362a27e0a\",\"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\":\"Filterd8fbd80db8e66d803e66\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filterdc6562c24d57b460dd8b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter2711f36306a3b2e28505\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'Unused'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"objects\":{}}]", - "height": 56.0, - "width": 152.0, + "height": 56.00, + "width": 152.00, "x": 750.86, "y": 614.86, - "z": 79000.0 + "z": 79000.00 }, { "config": "{\"name\":\"67791ca27244634bb5b8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":439.9491884262527,\"y\":1167.2693501269214,\"z\":43000,\"width\":152,\"height\":56,\"tabOrder\":41000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Contracted cost after negotiated discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filter129e400c7dc2e0083c9c\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter70beaddc01344a005587\",\"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\":\"Filter4bf10f9ab06e46cd0d9a\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter6e7bab30ac398d0bee37\",\"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\":{}},{\"name\":\"Filter1680e704e005d70a06e6\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 56.0, - "width": 152.0, + "height": 56.00, + "width": 152.00, "x": 439.95, "y": 1167.27, - "z": 43000.0 + "z": 43000.00 }, { "config": "{\"name\":\"70580f6aab5182d37231\",\"layouts\":[{\"id\":0,\"position\":{\"x\":902.8580294802173,\"y\":424,\"z\":29000,\"width\":32,\"height\":56,\"tabOrder\":27000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 902.86, - "y": 424.0, - "z": 29000.0 + "y": 424.00, + "z": 29000.00 }, { "config": "{\"name\":\"72e24c0ce00ebcbe3990\",\"layouts\":[{\"id\":0,\"position\":{\"x\":294.8580294802174,\"y\":518.8642358417379,\"z\":65000,\"width\":152,\"height\":56,\"tabOrder\":63000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Contracted cost equivalent'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filter129e400c7dc2e0083c9c\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter70beaddc01344a005587\",\"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\":\"Filter4bf10f9ab06e46cd0d9a\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter6e7bab30ac398d0bee37\",\"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\":{}},{\"name\":\"Filter1680e704e005d70a06e6\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 56.0, - "width": 152.0, + "height": 56.00, + "width": 152.00, "x": 294.86, "y": 518.86, - "z": 65000.0 + "z": 65000.00 }, { "config": "{\"name\":\"75c66114482303647b12\",\"layouts\":[{\"id\":0,\"position\":{\"x\":430.8017794802174,\"y\":518.8642358417379,\"z\":94000,\"width\":32,\"height\":56,\"tabOrder\":92000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"+\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, - "x": 430.8, + "height": 56.00, + "width": 32.00, + "x": 430.80, "y": 518.86, - "z": 94000.0 + "z": 94000.00 }, { "config": "{\"name\":\"7f4d6443a3cd5659be15\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":2448,\"z\":17000,\"width\":1280,\"height\":128,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Missing contracted cost\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"The following SKUs are not free but the \"},{\"value\":\"ContractedCost was \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"0. This is the result of 2 known bugs in Cost Management where MCA accounts do not have contracted price/cost for reservations and when missing, it is shown as \\\"0\\\" instead of null. We have copied EffectiveCost to support calculating partial savings, but the savings will be incomplete due to the missing data. Please contact support to help raise the priority of either bug if they are impeding your reporting. Commitment cost savings cannot be calculated and total savings will be lower than expected due to these values being missing. For additional details, see \"},{\"value\":\"issue #874\",\"textStyle\":{},\"url\":\"https://github.com/microsoft/finops-toolkit/issues/874\"},{\"value\":\". To prioritize a workaround in the toolkit reports, please leave a thumbs up (👍) on \"},{\"value\":\"issue #835.\",\"textStyle\":{},\"url\":\"https://github.com/microsoft/finops-toolkit/issues/835\"}]}]}}]},\"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": 128.0, - "width": 1280.0, - "x": 0.0, - "y": 2448.0, - "z": 17000.0 + "height": 128.00, + "width": 1280.00, + "x": 0.00, + "y": 2448.00, + "z": 17000.00 }, { "config": "{\"name\":\"80b2a3d70d329e179b36\",\"layouts\":[{\"id\":0,\"position\":{\"x\":446.8017794802174,\"y\":478.8642358417378,\"z\":75000,\"width\":152,\"height\":96,\"tabOrder\":73000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Contracted cost equivalent'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filter129e400c7dc2e0083c9c\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter70beaddc01344a005587\",\"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\":\"Filter4bf10f9ab06e46cd0d9a\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter6e7bab30ac398d0bee37\",\"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": 96.0, - "width": 152.0, - "x": 446.8, + "height": 96.00, + "width": 152.00, + "x": 446.80, "y": 478.86, - "z": 75000.0 + "z": 75000.00 }, { "config": "{\"name\":\"82cb3df02148be98379e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":734.8580294802174,\"y\":614.8642358417379,\"z\":86000,\"width\":32,\"height\":56,\"tabOrder\":84000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 734.86, "y": 614.86, - "z": 86000.0 + "z": 86000.00 }, { "config": "{\"name\":\"84837d48720ae6705601\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1232.002186090996,\"y\":-0.8809946714031502,\"z\":19000,\"width\":48,\"height\":48,\"tabOrder\":19000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}},\"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/rateoptimization#dq'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}]}}}", "filters": "[]", - "height": 48.0, - "width": 48.0, - "x": 1232.0, + "height": 48.00, + "width": 48.00, + "x": 1232.00, "y": -0.88, - "z": 19000.0 + "z": 19000.00 }, { "config": "{\"name\":\"864e4704e56873dc4647\",\"layouts\":[{\"id\":0,\"position\":{\"x\":582.8017794802174,\"y\":518.8642358417379,\"z\":85000,\"width\":32,\"height\":56,\"tabOrder\":83000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, - "x": 582.8, + "height": 56.00, + "width": 32.00, + "x": 582.80, "y": 518.86, - "z": 85000.0 + "z": 85000.00 }, { "config": "{\"name\":\"89e352c7fa9df004131f\",\"layouts\":[{\"id\":0,\"position\":{\"x\":16,\"y\":5432,\"z\":99000,\"width\":1248,\"height\":304,\"tabOrder\":97000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.CommitmentDiscountName\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.x_SkuDescription\"},{\"queryRef\":\"Costs.x_SkuOrderName\"},{\"queryRef\":\"Costs.x_SkuOrderId\"},{\"queryRef\":\"Sum(Costs.ListCost)\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.BilledCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"x_SkuDescription\"},{\"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\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"ListCost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuOrderName\"},\"Name\":\"Costs.x_SkuOrderName\",\"NativeReferenceName\":\"x_SkuOrderName\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuOrderId\"},\"Name\":\"Costs.x_SkuOrderId\",\"NativeReferenceName\":\"x_SkuOrderId\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"Costs.CommitmentDiscountName\",\"NativeReferenceName\":\"CommitmentDiscountName\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"Type\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"}}}]},\"columnProperties\":{\"Costs.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"Costs.CommitmentDiscountName\":{}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"472.6959847227845D\"}}}},\"selector\":{\"metadata\":\"Costs.x_SkuDescription\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}}}}]}}}", "filters": "[{\"name\":\"Filter99d0a0928548c95e3087\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false},{\"name\":\"Filter2719e5872ea81ee82b88\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_FreeReason\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{}}]}},{\"name\":\"Filterd44666f24dd519a0dfed\",\"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\":{}},{\"name\":\"Filter4b6b22de60bf6bbb415c\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuOrderName\"}},\"type\":\"Categorical\",\"howCreated\":0,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},{\"name\":\"Filterf9b00e0aca972c6c201b\",\"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": 304.0, - "width": 1248.0, - "x": 16.0, - "y": 5432.0, - "z": 99000.0 + "height": 304.00, + "width": 1248.00, + "x": 16.00, + "y": 5432.00, + "z": 99000.00 }, { "config": "{\"name\":\"8fecfb5e3dc200a44464\",\"layouts\":[{\"id\":0,\"position\":{\"x\":902.8580294802173,\"y\":520.0000000000001,\"z\":87000,\"width\":32,\"height\":56,\"tabOrder\":85000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 902.86, - "y": 520.0, - "z": 87000.0 + "y": 520.00, + "z": 87000.00 }, { "config": "{\"name\":\"935653147cd61a8b4e89\",\"layouts\":[{\"id\":0,\"position\":{\"x\":14.858029480217397,\"y\":326.8642358417379,\"z\":32000,\"width\":136,\"height\":56,\"tabOrder\":30000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"On-demand usage\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"12pt\"}}]}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 136.0, + "height": 56.00, + "width": 136.00, "x": 14.86, "y": 326.86, - "z": 32000.0 + "z": 32000.00 }, { "config": "{\"name\":\"93729e93cb27391a73d0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":591.9491884262527,\"y\":1167.2693501269214,\"z\":44000,\"width\":152,\"height\":56,\"tabOrder\":42000}}],\"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\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'After commitment discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera12c2a0dc4dccbe5b41b\",\"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\":{}},{\"name\":\"Filteraaa08787790362a27e0a\",\"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\":\"Filterd8fbd80db8e66d803e66\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filterdc6562c24d57b460dd8b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter2711f36306a3b2e28505\",\"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\":{}}]", - "height": 56.0, - "width": 152.0, + "height": 56.00, + "width": 152.00, "x": 591.95, "y": 1167.27, - "z": 44000.0 + "z": 44000.00 }, { "config": "{\"name\":\"93bfaee59adaac006bce\",\"layouts\":[{\"id\":0,\"position\":{\"x\":440.00000000000006,\"y\":1031.2192431822218,\"z\":39000,\"width\":152,\"height\":96,\"tabOrder\":37000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Contracted cost equivalent'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filter129e400c7dc2e0083c9c\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter70beaddc01344a005587\",\"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\":\"Filter4bf10f9ab06e46cd0d9a\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter6e7bab30ac398d0bee37\",\"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\":{}},{\"name\":\"Filter1680e704e005d70a06e6\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 96.0, - "width": 152.0, - "x": 440.0, + "height": 96.00, + "width": 152.00, + "x": 440.00, "y": 1031.22, - "z": 39000.0 + "z": 39000.00 }, { "config": "{\"name\":\"945a843ca7313359000e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":278.91427946378485,\"y\":326.8642358444371,\"z\":36000,\"width\":32,\"height\":56,\"tabOrder\":34000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 278.91, "y": 326.86, - "z": 36000.0 + "z": 36000.00 }, { "config": "{\"name\":\"9558afe7ec38ab1146b5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":160,\"x\":206.91427948010266,\"y\":662.8642358417568,\"z\":21000,\"tabOrder\":98000}}],\"singleVisualGroup\":{\"displayName\":\"Group 1\",\"groupMode\":0}}", - "height": 88.0, - "width": 160.0, + "height": 88.00, + "width": 160.00, "x": 206.91, "y": 662.86, - "z": 21000.0 + "z": 21000.00 }, { "config": "{\"name\":\"966dc9476da9913c165d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":278.91427946378485,\"y\":518.8642358444372,\"z\":68000,\"width\":32,\"height\":56,\"tabOrder\":66000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 278.91, "y": 518.86, - "z": 68000.0 + "z": 68000.00 }, { "config": "{\"name\":\"968bfe730a822832dd0b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":16.00000000000003,\"y\":520.0000000000001,\"z\":74000,\"width\":128,\"height\":56,\"tabOrder\":72000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Savings plan usage\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"12pt\"}}]}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 128.0, - "x": 16.0, - "y": 520.0, - "z": 74000.0 + "height": 56.00, + "width": 128.00, + "x": 16.00, + "y": 520.00, + "z": 74000.00 }, { "config": "{\"name\":\"9697b4389e76ea607c47\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":160,\"x\":0,\"y\":40,\"z\":45001,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Savings from \",\"textStyle\":{\"color\":\"#3393dd\"}}],\"horizontalTextAlignment\":\"center\"},{\"textRuns\":[{\"value\":\"negotiated discounts\",\"textStyle\":{\"color\":\"#3393dd\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"9558afe7ec38ab1146b5\"}", "filters": "[]", - "height": 48.0, - "width": 160.0, - "x": 0.0, - "y": 40.0, - "z": 45001.0 + "height": 48.00, + "width": 160.00, + "x": 0.00, + "y": 40.00, + "z": 45001.00 }, { "config": "{\"name\":\"9a65ea7bd0dd37ee273d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":144,\"y\":328,\"z\":31000,\"width\":152,\"height\":56,\"tabOrder\":29000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'List 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\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera10ee5ceee4531a0e792\",\"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\":\"Filter87a9078edba7a348e2c9\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter035ee44664270008060d\",\"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\":\"'Standard'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 56.0, - "width": 152.0, - "x": 144.0, - "y": 328.0, - "z": 31000.0 + "height": 56.00, + "width": 152.00, + "x": 144.00, + "y": 328.00, + "z": 31000.00 }, { "config": "{\"name\":\"9d6138ccf36cae72b729\",\"layouts\":[{\"id\":0,\"position\":{\"x\":16,\"y\":5112,\"z\":98000,\"width\":1248,\"height\":304,\"tabOrder\":96000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_SkuOrderName\"},{\"queryRef\":\"Costs.x_SkuOrderId\"},{\"queryRef\":\"Costs.CommitmentDiscountName\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.x_SkuDescription\"},{\"queryRef\":\"Sum(Costs.ListCost)\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.BilledCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"x_SkuDescription\"},{\"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\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"ListCost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuOrderName\"},\"Name\":\"Costs.x_SkuOrderName\",\"NativeReferenceName\":\"x_SkuOrderName\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuOrderId\"},\"Name\":\"Costs.x_SkuOrderId\",\"NativeReferenceName\":\"x_SkuOrderId\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"Costs.CommitmentDiscountName\",\"NativeReferenceName\":\"Name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"Type\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"}}}]},\"columnProperties\":{\"Costs.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"Costs.CommitmentDiscountName\":{\"displayName\":\"Name\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"472.6959847227845D\"}}}},\"selector\":{\"metadata\":\"Costs.x_SkuDescription\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}}}}]}}}", "filters": "[{\"name\":\"Filter99d0a0928548c95e3087\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false},{\"name\":\"Filter2719e5872ea81ee82b88\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_FreeReason\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{}}]}},{\"name\":\"Filterd44666f24dd519a0dfed\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter4b6b22de60bf6bbb415c\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuOrderName\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuOrderName\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}],[{\"Literal\":{\"Value\":\"'Azure plan'\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":0,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},{\"name\":\"Filter2fa1ac5a15a0847beef4\",\"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\":\"'Purchase'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 304.0, - "width": 1248.0, - "x": 16.0, - "y": 5112.0, - "z": 98000.0 + "height": 304.00, + "width": 1248.00, + "x": 16.00, + "y": 5112.00, + "z": 98000.00 }, { "config": "{\"name\":\"a08ad00060505857e34a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":160,\"x\":0,\"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\":{\"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\"}}]}},\"parentGroupName\":\"9558afe7ec38ab1146b5\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 160.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 32.00, + "width": 160.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"a6ed6f9026e401c44494\",\"layouts\":[{\"id\":0,\"position\":{\"x\":16,\"y\":3432,\"z\":3000,\"width\":1248,\"height\":296,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ChargeCategory\"},{\"queryRef\":\"Costs.x_SkuDescription\"},{\"queryRef\":\"Costs.x_SkuRegion\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.CommitmentDiscountName\"},{\"queryRef\":\"Costs.ListUnitPrice\"},{\"queryRef\":\"Sum(Costs.ListCost)\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.PricingQuantity)\"},{\"queryRef\":\"Costs.PricingUnit\"},{\"queryRef\":\"Costs.x_PricingBlockSize\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"ListCost1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"x_SkuDescription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListUnitPrice\"},\"Name\":\"Costs.ListUnitPrice\",\"NativeReferenceName\":\"ListUnitPrice\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"CommitmentDiscountType\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeCategory\"},\"Name\":\"Costs.ChargeCategory\",\"NativeReferenceName\":\"ChargeCategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"Costs.CommitmentDiscountName\",\"NativeReferenceName\":\"CommitmentDiscountName\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuRegion\"},\"Name\":\"Costs.x_SkuRegion\",\"NativeReferenceName\":\"x_SkuRegion\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.PricingQuantity)\",\"NativeReferenceName\":\"PricingQuantity\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingUnit\"},\"Name\":\"Costs.PricingUnit\",\"NativeReferenceName\":\"PricingUnit\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_PricingBlockSize\"},\"Name\":\"Costs.x_PricingBlockSize\",\"NativeReferenceName\":\"x_PricingBlockSize\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"421.5054350700155D\"}}}},\"selector\":{\"metadata\":\"Costs.x_SkuDescription\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Missing List Cost'\"}}}}}]}}}", "filters": "[{\"name\":\"Filtercc429bd6bb44e04e890a\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_FreeReason\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"2686c6ea5f58d6349f92\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SourceChanges\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Or\":{\"Left\":{\"Contains\":{\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SourceChanges\"}},\"Right\":{\"Literal\":{\"Value\":\"'ListCostMissing'\"}}}},\"Right\":{\"Contains\":{\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SourceChanges\"}},\"Right\":{\"Literal\":{\"Value\":\"'ListUnitPriceMissing'\"}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 296.0, - "width": 1248.0, - "x": 16.0, - "y": 3432.0, - "z": 3000.0 + "height": 296.00, + "width": 1248.00, + "x": 16.00, + "y": 3432.00, + "z": 3000.00 }, { "config": "{\"name\":\"a8ef77633660d9350720\",\"layouts\":[{\"id\":0,\"position\":{\"x\":278.91427946378485,\"y\":614.8642358444372,\"z\":67000,\"width\":32,\"height\":56,\"tabOrder\":65000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 278.91, "y": 614.86, - "z": 67000.0 + "z": 67000.00 }, { "config": "{\"name\":\"ad3ba43b746ea471e022\",\"layouts\":[{\"id\":0,\"position\":{\"x\":295.8882854926301,\"y\":424,\"z\":47000,\"width\":152,\"height\":56,\"tabOrder\":45000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Contracted cost after negotiated discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filter129e400c7dc2e0083c9c\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter70beaddc01344a005587\",\"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\":\"Filter4bf10f9ab06e46cd0d9a\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter1680e704e005d70a06e6\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter613c55630ab960604849\",\"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\":\"'Dynamic'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 56.0, - "width": 152.0, + "height": 56.00, + "width": 152.00, "x": 295.89, - "y": 424.0, - "z": 47000.0 + "y": 424.00, + "z": 47000.00 }, { "config": "{\"name\":\"adfb43221b2650ead70a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":598.8017794802174,\"y\":614.864235841738,\"z\":78000,\"width\":152,\"height\":56,\"tabOrder\":76000}}],\"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\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'After commitment discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera12c2a0dc4dccbe5b41b\",\"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\":{}},{\"name\":\"Filteraaa08787790362a27e0a\",\"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\":\"Filterdc6562c24d57b460dd8b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter2711f36306a3b2e28505\",\"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\":{}}]", - "height": 56.0, - "width": 152.0, - "x": 598.8, + "height": 56.00, + "width": 152.00, + "x": 598.80, "y": 614.86, - "z": 78000.0 + "z": 78000.00 }, { "config": "{\"name\":\"b06b9100b620a0108050\",\"layouts\":[{\"id\":0,\"position\":{\"x\":896.0054384262527,\"y\":1168.4051142851836,\"z\":62000,\"width\":32,\"height\":56,\"tabOrder\":60000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 896.01, "y": 1168.41, - "z": 62000.0 + "z": 62000.00 }, { "config": "{\"name\":\"b0a11b2a0e65d02464b3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.0021860909960584,\"y\":-0.8809946714031502,\"z\":0,\"width\":1280,\"height\":48,\"tabOrder\":0}}],\"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.0, - "width": 1280.0, - "x": 0.0, + "height": 48.00, + "width": 1280.00, + "x": 0.00, "y": -0.88, - "z": 0.0 + "z": 0.00 }, { "config": "{\"name\":\"b4b7e411b90da6c1e407\",\"layouts\":[{\"id\":0,\"position\":{\"x\":278.91427946378485,\"y\":422.8642358444371,\"z\":55000,\"width\":32,\"height\":56,\"tabOrder\":53000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 278.91, "y": 422.86, - "z": 55000.0 + "z": 55000.00 }, { "config": "{\"name\":\"b68150e33a0480cd0d63\",\"layouts\":[{\"id\":0,\"position\":{\"x\":16.00505056554392,\"y\":2158.738223553031,\"z\":2000,\"width\":1248,\"height\":272,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.CommitmentDiscountName\"},{\"queryRef\":\"Sum(Costs.x_CommitmentDiscountPercent)\"},{\"queryRef\":\"Sum(Costs.ContractedUnitPrice)\"},{\"queryRef\":\"Sum(Costs.x_EffectiveUnitPrice)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveUnitPrice\"},\"Name\":\"Sum(Costs.x_EffectiveUnitPrice)\",\"NativeReferenceName\":\"x_EffectiveUnitPrice1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedUnitPrice\"},\"Name\":\"Sum(Costs.ContractedUnitPrice)\",\"NativeReferenceName\":\"ContractedUnitPrice1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"Costs.CommitmentDiscountName\",\"NativeReferenceName\":\"CommitmentDiscountName\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"CommitmentDiscountType\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountPercent\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_CommitmentDiscountPercent)\",\"NativeReferenceName\":\"x_CommitmentDiscountPercent\"}]},\"drillFilterOtherVisuals\":true,\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment price discount (contracted - effective)'\"}}}}}]}}}", "filters": "[{\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_CommitmentDiscountPercent\"}},\"Function\":0}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountPercent\"}},\"Function\":0}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false},{\"name\":\"d0fba154662f0747581f\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountId\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountId\"}},\"Right\":{\"Literal\":{\"Value\":\"''\"}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 272.0, - "width": 1248.0, + "height": 272.00, + "width": 1248.00, "x": 16.01, "y": 2158.74, - "z": 2000.0 + "z": 2000.00 }, { "config": "{\"name\":\"b7b4e7a6b092cae977d5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":598.8017794802174,\"y\":478.8642358417379,\"z\":71000,\"width\":152,\"height\":96,\"tabOrder\":69000}}],\"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\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"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\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera12c2a0dc4dccbe5b41b\",\"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\":{}},{\"name\":\"Filteraaa08787790362a27e0a\",\"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\":\"Filter2711f36306a3b2e28505\",\"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\":{}}]", - "height": 96.0, - "width": 152.0, - "x": 598.8, + "height": 96.00, + "width": 152.00, + "x": 598.80, "y": 478.86, - "z": 71000.0 + "z": 71000.00 }, { "config": "{\"name\":\"b91909ab122acc2617a1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":3312,\"z\":8000,\"width\":1280,\"height\":112,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Missing list price/cost\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"The following SKUs are not free but the \"},{\"value\":\"ListUnitPrice and \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"ListCost are both 0. This is the result of 2 known bugs in Cost Management where some rows are missing these values (for example, for reservations) and where, when a value is missing, it is shown as \\\"0\\\" instead of null. Please contact support to help raise the priority of either bug if they are impeding your reporting. Total savings will be lower than expected due to these records because we cannot accurately calculate negotiated discounts. \"},{\"value\":\"For additional details, see \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"issue #873\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://github.com/microsoft/finops-toolkit/issues/873\"},{\"value\":\". To prioritize a workaround in the toolkit reports, please leave a thumbs up (👍) on \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"issue #835.\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://github.com/microsoft/finops-toolkit/issues/835\"}]}]}}]},\"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": 112.0, - "width": 1280.0, - "x": 0.0, - "y": 3312.0, - "z": 8000.0 + "height": 112.00, + "width": 1280.00, + "x": 0.00, + "y": 3312.00, + "z": 8000.00 }, { "config": "{\"name\":\"bb9ef1b36a5e69d04500\",\"layouts\":[{\"id\":0,\"position\":{\"x\":311.8182129371942,\"y\":1166.9839831653585,\"z\":41000,\"width\":128,\"height\":56,\"tabOrder\":39000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Reservation usage\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"12pt\"}}]}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 128.0, + "height": 56.00, + "width": 128.00, "x": 311.82, "y": 1166.98, - "z": 41000.0 + "z": 41000.00 }, { "config": "{\"name\":\"bbf623407170c65cbd1a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":311.8182129371942,\"y\":1070.9839831653585,\"z\":37000,\"width\":128,\"height\":56,\"tabOrder\":35000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Savings plan usage\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"12pt\"}}]}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 128.0, + "height": 56.00, + "width": 128.00, "x": 311.82, "y": 1070.98, - "z": 37000.0 + "z": 37000.00 }, { "config": "{\"name\":\"bc745594aee5a9c0929d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":278.91427946378485,\"y\":230.86423584443716,\"z\":59000,\"width\":32,\"height\":56,\"tabOrder\":57000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 278.91, "y": 230.86, - "z": 59000.0 + "z": 59000.00 }, { "config": "{\"name\":\"bf462c9605c97ad970e1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":16,\"y\":2592,\"z\":16000,\"width\":1248,\"height\":272,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ChargeCategory\"},{\"queryRef\":\"Costs.x_SkuDescription\"},{\"queryRef\":\"Costs.x_SkuRegion\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.CommitmentDiscountName\"},{\"queryRef\":\"Costs.ContractedUnitPrice\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Costs.x_EffectiveUnitPrice\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.PricingQuantity)\"},{\"queryRef\":\"Costs.PricingUnit\"},{\"queryRef\":\"Costs.x_PricingBlockSize\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"x_SkuDescription\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveUnitPrice\"},\"Name\":\"Costs.x_EffectiveUnitPrice\",\"NativeReferenceName\":\"x_EffectiveUnitPrice\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedUnitPrice\"},\"Name\":\"Costs.ContractedUnitPrice\",\"NativeReferenceName\":\"ContractedUnitPrice\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"CommitmentDiscountType\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeCategory\"},\"Name\":\"Costs.ChargeCategory\",\"NativeReferenceName\":\"ChargeCategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"Costs.CommitmentDiscountName\",\"NativeReferenceName\":\"CommitmentDiscountName\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuRegion\"},\"Name\":\"Costs.x_SkuRegion\",\"NativeReferenceName\":\"x_SkuRegion\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.PricingQuantity)\",\"NativeReferenceName\":\"PricingQuantity\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingUnit\"},\"Name\":\"Costs.PricingUnit\",\"NativeReferenceName\":\"PricingUnit\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_PricingBlockSize\"},\"Name\":\"Costs.x_PricingBlockSize\",\"NativeReferenceName\":\"x_PricingBlockSize\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"}}}]},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"455.2380618884485D\"}}}},\"selector\":{\"metadata\":\"Costs.x_SkuDescription\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Missing List Cost'\"}}}}}]}}}", "filters": "[{\"name\":\"Filterfc817c6d46d45a58b9b6\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_FreeReason\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"b814b90e68dd4b3975e2\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SourceChanges\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Contains\":{\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SourceChanges\"}},\"Right\":{\"Literal\":{\"Value\":\"'ContractedCostMissing'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 272.0, - "width": 1248.0, - "x": 16.0, - "y": 2592.0, - "z": 16000.0 + "height": 272.00, + "width": 1248.00, + "x": 16.00, + "y": 2592.00, + "z": 16000.00 }, { "config": "{\"name\":\"c0c132d4849bb54b69ea\",\"layouts\":[{\"id\":0,\"position\":{\"x\":942.8580294802173,\"y\":189.6730017298514,\"z\":30000,\"width\":176,\"height\":112,\"tabOrder\":28000}}],\"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\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"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\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}}}]}}}", "filters": "[{\"name\":\"Filterf31c3d3aae424e79a635\",\"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\":\"'Purchase'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 112.0, - "width": 176.0, + "height": 112.00, + "width": 176.00, "x": 942.86, "y": 189.67, - "z": 30000.0 + "z": 30000.00 }, { "config": "{\"name\":\"c28a8957a74002184806\",\"layouts\":[{\"id\":0,\"position\":{\"x\":16.00000000000003,\"y\":424,\"z\":54000,\"width\":128,\"height\":56,\"tabOrder\":52000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Spot \",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"12pt\"}}]},{\"textRuns\":[{\"value\":\"usage\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"12pt\"}}]}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 128.0, - "x": 16.0, - "y": 424.0, - "z": 54000.0 + "height": 56.00, + "width": 128.00, + "x": 16.00, + "y": 424.00, + "z": 54000.00 }, { "config": "{\"name\":\"c4b7fd506c231bbb3899\",\"layouts\":[{\"id\":0,\"position\":{\"x\":902.8580294802173,\"y\":328,\"z\":63000,\"width\":32,\"height\":56,\"tabOrder\":61000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 902.86, - "y": 328.0, - "z": 63000.0 + "y": 328.00, + "z": 63000.00 }, { "config": "{\"name\":\"c86fbb0c20c2c231176a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":727.8182129371943,\"y\":1070.9839831653585,\"z\":92000,\"width\":32,\"height\":56,\"tabOrder\":90000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 727.82, "y": 1070.98, - "z": 92000.0 + "z": 92000.00 }, { "config": "{\"name\":\"cc3556101da080206147\",\"layouts\":[{\"id\":0,\"position\":{\"x\":608,\"y\":792,\"z\":90000,\"width\":656,\"height\":112,\"tabOrder\":88000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"⚠️ Cannot calculate full cost savings\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"Cost Management is missing the list and contracted cost for some records. Without list cost, we cannot calculate the full negotiated cost savings and, without contracted cost, we cannot calculate the full commitment discount savings. To track resolution of these bugs, subscribe to \"},{\"value\":\"issue #873\",\"textStyle\":{},\"url\":\"https://github.com/microsoft/finops-toolkit/issues/873\"},{\"value\":\" and \"},{\"value\":\"issue #874\",\"textStyle\":{},\"url\":\"https://github.com/microsoft/finops-toolkit/issues/874\"},{\"value\":\".\"}]}]}}]},\"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\":\"'#FFEECC'\"}}}}}}}]}}}", "filters": "[]", - "height": 112.0, - "width": 656.0, - "x": 608.0, - "y": 792.0, - "z": 90000.0 + "height": 112.00, + "width": 656.00, + "x": 608.00, + "y": 792.00, + "z": 90000.00 }, { "config": "{\"name\":\"d1e03d68207246ece37d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":16.00000000000003,\"y\":192.00000000000009,\"z\":26000,\"width\":128,\"height\":96,\"tabOrder\":24000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Purchases\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"12pt\"}}]}]}}]}}}", "filters": "[]", - "height": 96.0, - "width": 128.0, - "x": 16.0, - "y": 192.0, - "z": 26000.0 + "height": 96.00, + "width": 128.00, + "x": 16.00, + "y": 192.00, + "z": 26000.00 }, { "config": "{\"name\":\"d254e060c0008404064d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":896.0054384262527,\"y\":1072.4051142851836,\"z\":61000,\"width\":32,\"height\":56,\"tabOrder\":59000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 896.01, "y": 1072.41, - "z": 61000.0 + "z": 61000.00 }, { "config": "{\"name\":\"d49ecea020454e4dbd89\",\"layouts\":[{\"id\":0,\"position\":{\"x\":15.998640309133702,\"y\":4185.23822355303,\"z\":9000,\"width\":1248,\"height\":304,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ChargeCategory\"},{\"queryRef\":\"Costs.x_SkuDescription\"},{\"queryRef\":\"Sum(Costs.PricingQuantity)\"},{\"queryRef\":\"Costs.PricingUnit\"},{\"queryRef\":\"Sum(Costs.x_PricingBlockSize)\"},{\"queryRef\":\"Sum(Costs.ListUnitPrice)\"},{\"queryRef\":\"Costs.ContractedUnitPrice\"},{\"queryRef\":\"Sum(Costs.x_EffectiveUnitPrice)\"},{\"queryRef\":\"Costs.x_BilledUnitPrice\"},{\"queryRef\":\"Sum(Costs.BilledCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Sum(Costs.ListCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveUnitPrice\"},\"Name\":\"Sum(Costs.x_EffectiveUnitPrice)\",\"NativeReferenceName\":\"x_EffectiveUnitPrice1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListUnitPrice\"},\"Name\":\"Sum(Costs.ListUnitPrice)\",\"NativeReferenceName\":\"ListUnitPrice1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"x_SkuDescription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedUnitPrice\"},\"Name\":\"Costs.ContractedUnitPrice\",\"NativeReferenceName\":\"ContractedUnitPrice\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_BilledUnitPrice\"},\"Name\":\"Costs.x_BilledUnitPrice\",\"NativeReferenceName\":\"x_BilledUnitPrice\"},{\"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\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeCategory\"},\"Name\":\"Costs.ChargeCategory\",\"NativeReferenceName\":\"ChargeCategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_PricingBlockSize\"},\"Name\":\"Sum(Costs.x_PricingBlockSize)\",\"NativeReferenceName\":\"x_PricingBlockSize1\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.PricingQuantity)\",\"NativeReferenceName\":\"PricingQuantity\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingUnit\"},\"Name\":\"Costs.PricingUnit\",\"NativeReferenceName\":\"PricingUnit\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"ListCost\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"}}}]},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"306.7688229176549D\"}}}},\"selector\":{\"metadata\":\"Costs.x_SkuDescription\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}}}}]}}}", "filters": "[{\"name\":\"Filter99d0a0928548c95e3087\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false},{\"name\":\"Filter29d3511900b08a46964b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_FreeReason\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_FreeReason\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}],[{\"Literal\":{\"Value\":\"'Other'\"}}],[{\"Literal\":{\"Value\":\"'Preview'\"}}],[{\"Literal\":{\"Value\":\"'Trial'\"}}],[{\"Literal\":{\"Value\":\"'Unknown Unused Commitment'\"}}],[{\"Literal\":{\"Value\":\"'Unknown Used Commitment'\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},{\"name\":\"Filter3ce81818518db0292705\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false}]", - "height": 304.0, - "width": 1248.0, - "x": 16.0, + "height": 304.00, + "width": 1248.00, + "x": 16.00, "y": 4185.24, - "z": 9000.0 + "z": 9000.00 }, { "config": "{\"name\":\"dc47785c16ae0edb3772\",\"layouts\":[{\"id\":0,\"position\":{\"x\":575.9491884262527,\"y\":1167.2693501269214,\"z\":56000,\"width\":32,\"height\":56,\"tabOrder\":54000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 575.95, "y": 1167.27, - "z": 56000.0 + "z": 56000.00 }, { "config": "{\"name\":\"dee8caf6a16337030790\",\"layouts\":[{\"id\":0,\"position\":{\"x\":806.8580294802174,\"y\":702.8642358417379,\"z\":89000,\"width\":128,\"height\":80,\"tabOrder\":87000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Total savings\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"18pt\",\"color\":\"#7fba00\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 80.0, - "width": 128.0, + "height": 80.00, + "width": 128.00, "x": 806.86, "y": 702.86, - "z": 89000.0 + "z": 89000.00 }, { "config": "{\"name\":\"e9b81a3758a1a4761674\",\"layouts\":[{\"id\":0,\"position\":{\"x\":16,\"y\":3024,\"z\":14000,\"width\":1248,\"height\":272,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ChargeCategory\"},{\"queryRef\":\"Costs.x_SkuDescription\"},{\"queryRef\":\"Costs.x_SkuRegion\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.CommitmentDiscountName\"},{\"queryRef\":\"Costs.ContractedUnitPrice\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Costs.x_EffectiveUnitPrice\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.PricingQuantity)\"},{\"queryRef\":\"Costs.PricingUnit\"},{\"queryRef\":\"Costs.x_PricingBlockSize\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"x_SkuDescription\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveUnitPrice\"},\"Name\":\"Costs.x_EffectiveUnitPrice\",\"NativeReferenceName\":\"x_EffectiveUnitPrice\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedUnitPrice\"},\"Name\":\"Costs.ContractedUnitPrice\",\"NativeReferenceName\":\"ContractedUnitPrice\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"CommitmentDiscountType\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeCategory\"},\"Name\":\"Costs.ChargeCategory\",\"NativeReferenceName\":\"ChargeCategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"Costs.CommitmentDiscountName\",\"NativeReferenceName\":\"CommitmentDiscountName\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuRegion\"},\"Name\":\"Costs.x_SkuRegion\",\"NativeReferenceName\":\"x_SkuRegion\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.PricingQuantity)\",\"NativeReferenceName\":\"PricingQuantity\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingUnit\"},\"Name\":\"Costs.PricingUnit\",\"NativeReferenceName\":\"PricingUnit\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_PricingBlockSize\"},\"Name\":\"Costs.x_PricingBlockSize\",\"NativeReferenceName\":\"x_PricingBlockSize\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"}}}]},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"455.2380618884485D\"}}}},\"selector\":{\"metadata\":\"Costs.x_SkuDescription\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Missing List Cost'\"}}}}}]}}}", "filters": "[{\"name\":\"Filterfc817c6d46d45a58b9b6\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_FreeReason\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"6d55f92d329cdc9b6de0\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SourceChanges\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Contains\":{\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SourceChanges\"}},\"Right\":{\"Literal\":{\"Value\":\"'ContractedUnitPriceMissing'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 272.0, - "width": 1248.0, - "x": 16.0, - "y": 3024.0, - "z": 14000.0 + "height": 272.00, + "width": 1248.00, + "x": 16.00, + "y": 3024.00, + "z": 14000.00 }, { "config": "{\"name\":\"eb68afd2c0010323736c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":510.80308671792227,\"y\":662.8492385681684,\"z\":20000,\"width\":336,\"height\":88,\"tabOrder\":99000}}],\"singleVisualGroup\":{\"displayName\":\"Group 1\",\"groupMode\":0}}", - "height": 88.0, - "width": 336.0, - "x": 510.8, + "height": 88.00, + "width": 336.00, + "x": 510.80, "y": 662.85, - "z": 20000.0 + "z": 20000.00 }, { "config": "{\"name\":\"ebc9cce139915e128330\",\"layouts\":[{\"id\":0,\"position\":{\"x\":-0.0013596908662998957,\"y\":3737.23822355303,\"z\":13000,\"width\":1280,\"height\":112,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Unknown commitment usage\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"The following charges are for used and unused commitments that have no billed or effective cost. In general, all commitment usage should have 0 billed but some effective (amortized) cost. At the time this report was created, it was not clear why some records were being written with 0 quantity and others with a 0 unit price. Neither is expected and may be due to using a test account. If you have rows here, please contact support to get a better explanation of these rows.\"}]}]}}]},\"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\":\"'#FFCC66'\"}}}}}}}]}}}", "filters": "[]", - "height": 112.0, - "width": 1280.0, - "x": 0.0, + "height": 112.00, + "width": 1280.00, + "x": 0.00, "y": 3737.24, - "z": 13000.0 + "z": 13000.00 }, { "config": "{\"name\":\"ebe1ca85be4d990ab960\",\"layouts\":[{\"id\":0,\"position\":{\"x\":144,\"y\":520.0000000000001,\"z\":38000,\"width\":152,\"height\":56,\"tabOrder\":36000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'List 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\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera10ee5ceee4531a0e792\",\"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\":\"Filter87a9078edba7a348e2c9\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filterac2af06bbba88bdc1720\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter2664c1e9ca84a4244e7e\",\"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\":{}},{\"name\":\"Filter0784f6c3eede70625b0e\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 56.0, - "width": 152.0, - "x": 144.0, - "y": 520.0, - "z": 38000.0 + "height": 56.00, + "width": 152.00, + "x": 144.00, + "y": 520.00, + "z": 38000.00 }, { "config": "{\"name\":\"ed1ed98b4e1a3e22b850\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.005050565543920964,\"y\":4094.73822355303,\"z\":11000,\"width\":1280,\"height\":80,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Little to no usage\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"The following SKUs had little to no usage, which resulted in a charge too small to be registered and are effectively free. Additional usage will eventually result in a charge.\"}]}]}}]},\"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.0, - "width": 1280.0, + "height": 80.00, + "width": 1280.00, "x": 0.01, "y": 4094.74, - "z": 11000.0 + "z": 11000.00 }, { "config": "{\"name\":\"f031fee0016a60cc81cb\",\"layouts\":[{\"id\":0,\"position\":{\"x\":744,\"y\":1254.4384798295835,\"z\":64000,\"width\":184,\"height\":80,\"tabOrder\":62000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Commitment savings\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"18pt\",\"color\":\"#7fba00\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 80.0, - "width": 184.0, - "x": 744.0, + "height": 80.00, + "width": 184.00, + "x": 744.00, "y": 1254.44, - "z": 64000.0 + "z": 64000.00 }, { "config": "{\"name\":\"f1c9d203e684c50707b4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":336,\"x\":0,\"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\":{\"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\"}}]}},\"parentGroupName\":\"eb68afd2c0010323736c\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 336.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 32.00, + "width": 336.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"f364ff55956770b0a491\",\"layouts\":[{\"id\":0,\"position\":{\"x\":576,\"y\":1071.2192431822218,\"z\":57000,\"width\":32,\"height\":56,\"tabOrder\":55000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, - "x": 576.0, + "height": 56.00, + "width": 32.00, + "x": 576.00, "y": 1071.22, - "z": 57000.0 + "z": 57000.00 }, { "config": "{\"name\":\"f58735265db33a0d027e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":2880,\"z\":15000,\"width\":1280,\"height\":128,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Missing contracted price\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"The following SKUs are not free but the \"},{\"value\":\"ContractedUnitPrice is \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"0. This is the result of 2 known bugs in Cost Management where some rows are missing these values (for example, for reservations) and where, when a value is missing, it is shown as \\\"0\\\" instead of null. \"},{\"value\":\"We have copied EffectiveCost to support calculating partial savings, but the savings will be incomplete due to the missing data. \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Please contact support to help raise the priority of either bug if they are impeding your reporting. Commitment unit price savings cannot be calculated for these rows as-is. \"},{\"value\":\"For additional details, see \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"issue #874\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://github.com/microsoft/finops-toolkit/issues/874\"},{\"value\":\". To prioritize a workaround in the toolkit reports, please leave a thumbs up (👍) on \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"issue #835\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://github.com/microsoft/finops-toolkit/issues/835\"},{\"value\":\".\"}]}]}}]},\"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": 128.0, - "width": 1280.0, - "x": 0.0, - "y": 2880.0, - "z": 15000.0 + "height": 128.00, + "width": 1280.00, + "x": 0.00, + "y": 2880.00, + "z": 15000.00 }, { "config": "{\"name\":\"f801d633670596aeb000\",\"layouts\":[{\"id\":0,\"position\":{\"x\":15.998640309133702,\"y\":4609.238223553032,\"z\":10000,\"width\":1248,\"height\":64,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_FreeReason\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_FreeReason\"},\"Name\":\"Costs.x_FreeReason\",\"NativeReferenceName\":\"x_FreeReason\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_FreeReason\"}}}]},\"drillFilterOtherVisuals\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Basic'\"}}}}}],\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[{\"name\":\"Filtere833c73406c9b08592ad\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_FreeReason\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_FreeReason\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}],[{\"Literal\":{\"Value\":\"'Unknown Unused Commitment'\"}}],[{\"Literal\":{\"Value\":\"'Unknown Used Commitment'\"}}],[{\"Literal\":{\"Value\":\"'Low Usage'\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":0,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false}]", - "height": 64.0, - "width": 1248.0, - "x": 16.0, + "height": 64.00, + "width": 1248.00, + "x": 16.00, "y": 4609.24, - "z": 10000.0 + "z": 10000.00 }, { "config": "{\"name\":\"fc2d8321c04d41a90722\",\"layouts\":[{\"id\":0,\"position\":{\"x\":15.998640309133702,\"y\":3857.23822355303,\"z\":12000,\"width\":1248,\"height\":224,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.CommitmentDiscountStatus\"},{\"queryRef\":\"Costs.x_SkuDescription\"},{\"queryRef\":\"Sum(Costs.PricingQuantity)\"},{\"queryRef\":\"Costs.PricingUnit\"},{\"queryRef\":\"Sum(Costs.x_PricingBlockSize)\"},{\"queryRef\":\"Sum(Costs.ListUnitPrice)\"},{\"queryRef\":\"Costs.ContractedUnitPrice\"},{\"queryRef\":\"Sum(Costs.x_EffectiveUnitPrice)\"},{\"queryRef\":\"Costs.x_BilledUnitPrice\"},{\"queryRef\":\"Sum(Costs.BilledCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Sum(Costs.ListCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveUnitPrice\"},\"Name\":\"Sum(Costs.x_EffectiveUnitPrice)\",\"NativeReferenceName\":\"x_EffectiveUnitPrice1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListUnitPrice\"},\"Name\":\"Sum(Costs.ListUnitPrice)\",\"NativeReferenceName\":\"ListUnitPrice1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"x_SkuDescription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedUnitPrice\"},\"Name\":\"Costs.ContractedUnitPrice\",\"NativeReferenceName\":\"ContractedUnitPrice\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_BilledUnitPrice\"},\"Name\":\"Costs.x_BilledUnitPrice\",\"NativeReferenceName\":\"x_BilledUnitPrice\"},{\"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\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_PricingBlockSize\"},\"Name\":\"Sum(Costs.x_PricingBlockSize)\",\"NativeReferenceName\":\"x_PricingBlockSize1\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.PricingQuantity)\",\"NativeReferenceName\":\"PricingQuantity\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingUnit\"},\"Name\":\"Costs.PricingUnit\",\"NativeReferenceName\":\"PricingUnit\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"},\"Name\":\"Costs.CommitmentDiscountStatus\",\"NativeReferenceName\":\"CommitmentDiscountStatus\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"CommitmentDiscountType\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"ListCost\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"}}}]},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"407.6090135772365D\"}}}},\"selector\":{\"metadata\":\"Costs.x_SkuDescription\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}}}}]}}}", "filters": "[{\"name\":\"Filter99d0a0928548c95e3087\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":0,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false},{\"name\":\"Filter29d3511900b08a46964b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_FreeReason\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_FreeReason\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}],[{\"Literal\":{\"Value\":\"'Low Usage'\"}}],[{\"Literal\":{\"Value\":\"'Other'\"}}],[{\"Literal\":{\"Value\":\"'Preview'\"}}],[{\"Literal\":{\"Value\":\"'Trial'\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},{\"name\":\"Filter3ce81818518db0292705\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false}]", - "height": 224.0, - "width": 1248.0, - "x": 16.0, + "height": 224.00, + "width": 1248.00, + "x": 16.00, "y": 3857.24, - "z": 12000.0 + "z": 12000.00 }, { "config": "{\"name\":\"fe3c33b3a6d18c1c0e4e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":902.8580294802173,\"y\":230.86423584173792,\"z\":60000,\"width\":32,\"height\":56,\"tabOrder\":58000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 902.86, "y": 230.86, - "z": 60000.0 + "z": 60000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{\"objects\":{\"outspacePane\":[{\"properties\":{\"width\":{\"expr\":{\"Literal\":{\"Value\":\"201L\"}}}}}]},\"filterSortOrder\":3}", "displayName": "Prices", "displayOption": 1, "filters": "[{\"name\":\"Filter72b466caaa836a084608\",\"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\":{},\"ordinal\":0},{\"name\":\"Filter7205c3d3bbda0ccbda22\",\"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\":{},\"ordinal\":1},{\"name\":\"Filterd7fb63677ba2053d0e09\",\"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\":{},\"ordinal\":2}]", - "height": 720.0, + "height": 720.00, "name": "ReportSectiondad058bdadae9fb4faca", "ordinal": 9, "visualContainers": [ { "config": "{\"name\":\"02e71298f511059356b3\",\"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\":\"0feca253641bdf6c2eab\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "config": "{\"name\":\"09c5e63bd2660765a334\",\"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\":\"723e762ecc91af453ede\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "config": "{\"name\":\"0feca253641bdf6c2eab\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":216.00126878372978,\"y\":7.522749379008424,\"z\":1000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, + "height": 704.00, "width": 1048.09, - "x": 216.0, + "x": 216.00, "y": 7.52, - "z": 1000.0 + "z": 1000.00 }, { "config": "{\"name\":\"12285fbdad677e09c2b8\",\"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\":\"0feca253641bdf6c2eab\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"262d884f7240e5c713d3\",\"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\":\"0feca253641bdf6c2eab\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { - "config": "{\"name\":\"2639018036f1822a3207\",\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.RateOptimization/featureName/KQL.Prices'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b9cd244994ebbe2de787\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"2639018036f1822a3207\",\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK$$ftkver$$/bladeName/PowerBI.RateOptimization/featureName/KQL.Prices'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b9cd244994ebbe2de787\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"375badd4b382e8c1cf1b\",\"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\":\"0feca253641bdf6c2eab\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"3cb9336916dc3d040c10\",\"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\":\"0feca253641bdf6c2eab\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"3d899d2ed03f1eecf0a2\",\"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\":\"0feca253641bdf6c2eab\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "config": "{\"name\":\"4bf0635244e2b67d6547\",\"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\":\"0feca253641bdf6c2eab\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"5c234797e5eba229fcc3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":3000,\"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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 3000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 3000.00 }, { "config": "{\"name\":\"6101948b6d2783b118c3\",\"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\":\"0feca253641bdf6c2eab\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"682b5013695912b8a7d8\",\"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\":\"0feca253641bdf6c2eab\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "config": "{\"name\":\"68f9979d7bc54aef7496\",\"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\":\"0feca253641bdf6c2eab\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"69c8c8942280a55d0031\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":4000,\"width\":760,\"height\":608,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_SkuDescription\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.x_SkuTermLabel\"},{\"queryRef\":\"Sum(Costs.ListUnitPrice)\"},{\"queryRef\":\"Sum(Costs.ContractedUnitPrice)\"},{\"queryRef\":\"Costs.x_EffectiveUnitPrice\"},{\"queryRef\":\"Sum(Costs.ConsumedQuantity)\"},{\"queryRef\":\"Costs.ConsumedUnit\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveUnitPrice\"},\"Name\":\"Costs.x_EffectiveUnitPrice\",\"NativeReferenceName\":\"Effective\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListUnitPrice\"},\"Name\":\"Sum(Costs.ListUnitPrice)\",\"NativeReferenceName\":\"List\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"Commitment\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuTermLabel\"},\"Name\":\"Costs.x_SkuTermLabel\",\"NativeReferenceName\":\"Term\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"SKU\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ConsumedQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.ConsumedQuantity)\",\"NativeReferenceName\":\"Quantity\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedUnitPrice\"},\"Name\":\"Sum(Costs.ContractedUnitPrice)\",\"NativeReferenceName\":\"Contracted\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ConsumedUnit\"},\"Name\":\"Costs.ConsumedUnit\",\"NativeReferenceName\":\"Unit\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Cost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Costs.CommitmentDiscountType\":{\"displayName\":\"Commitment\"},\"Costs.x_EffectiveUnitPrice\":{\"displayName\":\"Effective\"},\"Sum(Costs.ListUnitPrice)\":{\"displayName\":\"List\"},\"Costs.x_SkuTermLabel\":{\"displayName\":\"Term\"},\"Costs.x_SkuDescription\":{\"displayName\":\"SKU\"},\"Sum(Costs.ContractedUnitPrice)\":{\"displayName\":\"Contracted\"},\"Sum(Costs.ConsumedQuantity)\":{\"displayName\":\"Quantity\"},\"Costs.ConsumedUnit\":{\"displayName\":\"Unit\"},\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Cost\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"65.83913379737045D\"}}}},\"selector\":{\"metadata\":\"Sum(Costs.ListUnitPrice)\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"208.62690723349726D\"}}}},\"selector\":{\"metadata\":\"Costs.x_SkuDescription\"}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", "filters": "[]", - "height": 608.0, - "width": 760.0, - "x": 216.0, - "y": 104.0, - "z": 4000.0 + "height": 608.00, + "width": 760.00, + "x": 216.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"723e762ecc91af453ede\",\"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\":\"b9cd244994ebbe2de787\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"809adbacd2563bc4015f\",\"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\":\"b9cd244994ebbe2de787\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"89905ce5152aab335bbb\",\"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\":\"0feca253641bdf6c2eab\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "config": "{\"name\":\"90b6d76a14831103543f\",\"layouts\":[{\"id\":0,\"position\":{\"x\":983.9999999999999,\"y\":104,\"z\":2000,\"width\":280,\"height\":608,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"clusteredBarChart\",\"projections\":{\"Y\":[{\"queryRef\":\"Sum(Costs.ConsumedQuantity)\"}],\"Category\":[{\"queryRef\":\"Costs.x_SkuMeterName\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuMeterName\"},\"Name\":\"Costs.x_SkuMeterName\",\"NativeReferenceName\":\"x_SkuMeterName\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ConsumedQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.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'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", "filters": "[]", - "height": 608.0, - "width": 280.0, - "x": 984.0, - "y": 104.0, - "z": 2000.0 + "height": 608.00, + "width": 280.00, + "x": 984.00, + "y": 104.00, + "z": 2000.00 }, { "config": "{\"name\":\"92d7bfefe078dc58129a\",\"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\":\"b9cd244994ebbe2de787\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "config": "{\"name\":\"a797506233a60e68a0b9\",\"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\":\"0feca253641bdf6c2eab\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "config": "{\"name\":\"ab84c1f54d352ae5e029\",\"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\":\"b9cd244994ebbe2de787\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"b1959f7cc616da8ca45e\",\"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\":\"723e762ecc91af453ede\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "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/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.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"b9cd244994ebbe2de787\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"bb22895b4acc4a569cd5\",\"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\":\"0feca253641bdf6c2eab\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"bca4f2639b8a56e938f9\",\"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\":\"723e762ecc91af453ede\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"d6529331b1741e61323e\",\"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\":\"0feca253641bdf6c2eab\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "config": "{\"name\":\"d9393b21d6033d46974a\",\"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\":\"723e762ecc91af453ede\"}", "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "config": "{\"name\":\"deb7d4a941f068b87168\",\"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\":\"0feca253641bdf6c2eab\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"e1deba80b4a9a6fbc873\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":17001}}],\"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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 5000.00 }, { "config": "{\"name\":\"e4cb98d985141b5f70eb\",\"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\":\"0feca253641bdf6c2eab\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"e5a4675b23080bb13978\",\"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\":\"723e762ecc91af453ede\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "config": "{\"name\":\"e8f0c2f0186d0077b41d\",\"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\":\"0feca253641bdf6c2eab\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "config": "{\"name\":\"eacc883fabcdbc7e90e7\",\"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\":\"0feca253641bdf6c2eab\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "config": "{\"name\":\"fa25c75d9687dd314bba\",\"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\":\"b9cd244994ebbe2de787\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{\"filterSortOrder\":3}", "displayName": "Purchases", "displayOption": 1, "filters": "[{\"name\":\"Filter0ebdef10813ba98b0451\",\"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\":\"'Purchase'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{},\"ordinal\":0},{\"name\":\"Filter591d7de150ba5a89b6b2\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountCategory\"}},\"Right\":{\"Literal\":{\"Value\":\"null\"}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":1}]", - "height": 720.0, + "height": 720.00, "name": "ReportSectione54dbd483648a9e74ff0", "ordinal": 7, "visualContainers": [ { "config": "{\"name\":\"019e8098fc37dd6c8f10\",\"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\":\"15db45788d585a7112b2\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"130bd33c629b5e7cb7a5\",\"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\":\"80dc3313174c69934287\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "config": "{\"name\":\"15db45788d585a7112b2\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":216.83810176118737,\"y\":8.087324571173982,\"z\":1000,\"tabOrder\":3000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, + "height": 704.00, "width": 1048.09, "x": 216.84, "y": 8.09, - "z": 1000.0 + "z": 1000.00 }, { "config": "{\"name\":\"1ccd1d25f80b6e01b043\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":4000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"1f73574df25aa53ffa23\",\"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\":\"1ccd1d25f80b6e01b043\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"217b6df36334a102f295\",\"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\":\"15db45788d585a7112b2\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"26f014304379e3f10c27\",\"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/RateOptimization#commitment-discount-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\":\"1ccd1d25f80b6e01b043\"}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"339a3d9daf784b654b19\",\"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\":\"15db45788d585a7112b2\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"3d12d54bb64eccf1bf32\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":3000,\"width\":1048,\"height\":280,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.ChargePeriodStart\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(Costs.BilledCost)\"}],\"Series\":[{\"queryRef\":\"Costs.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(Costs.BilledCost)\",\"NativeReferenceName\":\"Billed cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"Costs.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"Sum(Costs.BilledCost)\":{\"displayName\":\"Billed cost\"},\"Costs.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.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { "config": "{\"name\":\"44c74934c71e72ef7e13\",\"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\":\"15db45788d585a7112b2\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"4658808ff9db12cfbbf4\",\"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\":\"80dc3313174c69934287\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"59ead30aca09310f010f\",\"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\":\"15db45788d585a7112b2\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"5feb99675854c51128d8\",\"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\":\"1ccd1d25f80b6e01b043\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "config": "{\"name\":\"61f7fa6654bb33e4d91a\",\"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\":\"80dc3313174c69934287\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "config": "{\"name\":\"62e73cfda205e92e4ded\",\"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\":\"15db45788d585a7112b2\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"63360335e58ae1795143\",\"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\":\"15db45788d585a7112b2\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "config": "{\"name\":\"69750c9cb569aa789562\",\"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\":\"15db45788d585a7112b2\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"7f28ad541a6add1b865e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":2000,\"width\":1048,\"height\":320,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ChargePeriodStart\"},{\"queryRef\":\"Costs.PublisherName\"},{\"queryRef\":\"Costs.x_SkuDescription\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.ChargeFrequency\"},{\"queryRef\":\"Costs.ChargeClass\"},{\"queryRef\":\"Sum(Costs.PricingQuantity)\"},{\"queryRef\":\"Sum(Costs.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(Costs.BilledCost)\",\"NativeReferenceName\":\"Billed cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PublisherName\"},\"Name\":\"Costs.PublisherName\",\"NativeReferenceName\":\"Publisher\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeClass\"},\"Name\":\"Costs.ChargeClass\",\"NativeReferenceName\":\"ChargeClass\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.PricingQuantity)\",\"NativeReferenceName\":\"Quantity\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeFrequency\"},\"Name\":\"Costs.ChargeFrequency\",\"NativeReferenceName\":\"Frequency\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"Costs.ChargePeriodStart\",\"NativeReferenceName\":\"Date\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"Commitment type\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"Sum(Costs.BilledCost)\":{\"displayName\":\"Billed cost\"},\"Costs.PublisherName\":{\"displayName\":\"Publisher\"},\"Costs.x_SkuDescription\":{\"displayName\":\"SKU\"},\"Sum(Costs.PricingQuantity)\":{\"displayName\":\"Quantity\"},\"Costs.ChargeFrequency\":{\"displayName\":\"Frequency\"},\"Costs.ChargePeriodStart\":{\"displayName\":\"Date\"},\"Costs.CommitmentDiscountType\":{\"displayName\":\"Commitment type\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"grid\":[{\"properties\":{\"gridHorizontal\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"100.01519756838906D\"}}}},\"selector\":{\"metadata\":\"Costs.PublisherName\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"407.47841221272733D\"}}}},\"selector\":{\"metadata\":\"Costs.x_SkuDescription\"}}],\"columnFormatting\":[{\"properties\":{\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}},\"selector\":{\"metadata\":\"Sum(Costs.PricingQuantity)\"}}]},\"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.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 }, { "config": "{\"name\":\"80dc3313174c69934287\",\"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\":\"1ccd1d25f80b6e01b043\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"88651c01649e837563aa\",\"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\":\"15db45788d585a7112b2\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "config": "{\"name\":\"b0bf9d0fcdef50e2a026\",\"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\":\"15db45788d585a7112b2\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { - "config": "{\"name\":\"b2f030b18311a760b2bd\",\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.RateOptimization/featureName/KQL.Purchases'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1ccd1d25f80b6e01b043\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"b2f030b18311a760b2bd\",\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK$$ftkver$$/bladeName/PowerBI.RateOptimization/featureName/KQL.Purchases'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1ccd1d25f80b6e01b043\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"b8c988f007138026de66\",\"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\":\"1ccd1d25f80b6e01b043\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"bbc7928d8258bad7de6b\",\"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\":\"15db45788d585a7112b2\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"c7639fc267929bbc5cf1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.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(Costs.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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 4000.00 }, { "config": "{\"name\":\"cc13e40e31c08416976d\",\"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\":\"Commitment \",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"discount purchases\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review and track your commitment discount 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\":\"1ccd1d25f80b6e01b043\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"cd5a749583b97efa243a\",\"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\":\"15db45788d585a7112b2\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "config": "{\"name\":\"d2f4bae8e6999dc0a2b6\",\"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\":\"15db45788d585a7112b2\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "config": "{\"name\":\"d8fd4a0b3c9306add4ef\",\"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\":\"15db45788d585a7112b2\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "config": "{\"name\":\"e275f5df11afb7fbf9de\",\"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\":\"15db45788d585a7112b2\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"e886049b10b1e9dc829d\",\"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\":\"15db45788d585a7112b2\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "config": "{\"name\":\"eb9899b4ec32704b3c37\",\"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\":\"15db45788d585a7112b2\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "config": "{\"name\":\"f8a57c9d52a69d67ed87\",\"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\":\"80dc3313174c69934287\"}", "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "config": "{\"name\":\"f8dcf1ce8bf841d77f5a\",\"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\":\"80dc3313174c69934287\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "config": "{\"name\":\"fa043e879e7a0ef85a26\",\"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\":\"15db45788d585a7112b2\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{\"filterSortOrder\":3}", "displayName": "Commitments", "displayOption": 1, "filters": "[{\"name\":\"Filtercf9c0cb49977d0109855\",\"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\":{},\"ordinal\":0},{\"name\":\"Filter3a96ad32e00450ad17a5\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"ordinal\":1},{\"name\":\"Filter87334233b8a1ee605dae\",\"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\":{},\"ordinal\":2}]", - "height": 720.0, + "height": 720.00, "name": "ReportSectione611eddfb8ad789c7e53", "ordinal": 4, "visualContainers": [ { "config": "{\"name\":\"069f24ab9703f8af5951\",\"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\":\"d1026817a389ac9f3ffa\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "config": "{\"name\":\"119b8a19609f99199125\",\"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\":\"73e8d862cebd28d3c41c\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"1c841d6e5f987c16a987\",\"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\":\"d1026817a389ac9f3ffa\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"2124e61d12dfa8acfcf9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":4000}}],\"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\":\"b5c7451da0db7bc0be46\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"266f33c45aa8c9a5c035\",\"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\":\"d1026817a389ac9f3ffa\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"2930256bb30812a4eee2\",\"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\":\"d1026817a389ac9f3ffa\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"4384b95da791b7158e2d\",\"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\":\"d1026817a389ac9f3ffa\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "config": "{\"name\":\"4fb63587811c14c86d9f\",\"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\":\"d1026817a389ac9f3ffa\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"506d7764bb52f085de92\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":200,\"x\":0,\"y\":0,\"z\":1000,\"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\":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\":\"73e8d862cebd28d3c41c\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"5c5c8a6fdada7b576437\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":0}}],\"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\":\"b5c7451da0db7bc0be46\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "config": "{\"name\":\"5f776d2330d034e915c0\",\"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\":\"d1026817a389ac9f3ffa\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { - "config": "{\"name\":\"69d0cb185d256fa42439\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.RateOptimization/featureName/KQL.CommitmentDiscounts'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"73e8d862cebd28d3c41c\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"69d0cb185d256fa42439\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK$$ftkver$$/bladeName/PowerBI.RateOptimization/featureName/KQL.CommitmentDiscounts'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"73e8d862cebd28d3c41c\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"7361bcca2b55ccc50727\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":3500,\"width\":184,\"height\":88,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_CommitmentDiscountUtilization\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_CommitmentDiscountUtilization\"},\"Name\":\"Costs.x_CommitmentDiscountUtilization\",\"NativeReferenceName\":\"x_CommitmentDiscountUtilization\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_CommitmentDiscountUtilization\"}}}]},\"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\":\"'Utilization'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[]", - "height": 88.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 3500.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 3500.00 }, { "config": "{\"name\":\"73e8d862cebd28d3c41c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":2000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"7928d0424f27a45e8308\",\"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\":\"d1026817a389ac9f3ffa\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"7bbd8d144107eea75319\",\"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\":\"b5c7451da0db7bc0be46\"}", "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "config": "{\"name\":\"7ff8c5e52911c13c16f5\",\"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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 5000.00 }, { "config": "{\"name\":\"8eacd9d1caf7a1e79690\",\"layouts\":[{\"id\":0,\"position\":{\"height\":40,\"width\":40,\"x\":160,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"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#commitment-discounts'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"73e8d862cebd28d3c41c\"}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"933350aada31e4781fd1\",\"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\":\"d1026817a389ac9f3ffa\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "config": "{\"name\":\"9d1008f140aea09ea991\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":8,\"z\":3250,\"width\":176,\"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\":\"'Commitment 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.0, - "width": 176.0, - "x": 792.0, - "y": 8.0, - "z": 3250.0 + "height": 88.00, + "width": 176.00, + "x": 792.00, + "y": 8.00, + "z": 3250.00 }, { "config": "{\"name\":\"a540a27fc3b8b3400aad\",\"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\":\"d1026817a389ac9f3ffa\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "config": "{\"name\":\"ae1ca2a46adb454d4f60\",\"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\":\"d1026817a389ac9f3ffa\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"b5c7451da0db7bc0be46\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"73e8d862cebd28d3c41c\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"c945182336fec751ab00\",\"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\":\"d1026817a389ac9f3ffa\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "config": "{\"name\":\"ca20244926144e70d285\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":2000,\"width\":1048,\"height\":320,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.CommitmentDiscountName\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.ResourceId\"},{\"queryRef\":\"Costs.x_CommitmentDiscountUtilization\"},{\"queryRef\":\"Sum(Costs.ListCost)\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.x_CommitmentDiscountSavings)\"},{\"queryRef\":\"Costs.x_EffectiveSavingsRate\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"Costs.CommitmentDiscountName\",\"NativeReferenceName\":\"Commitment\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"List cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"Type\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"Contracted cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"Costs.ResourceId\",\"NativeReferenceName\":\"Count of ResourceId\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"Commitment savings\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountUtilization\"},\"Name\":\"Costs.x_CommitmentDiscountUtilization\",\"NativeReferenceName\":\"Utilization\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveSavingsRate\"},\"Name\":\"Costs.x_EffectiveSavingsRate\",\"NativeReferenceName\":\"ESR\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Costs.CommitmentDiscountName\":{\"displayName\":\"Commitment\"},\"Sum(Costs.ListCost)\":{\"displayName\":\"List cost\"},\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"Costs.ServiceName\":{\"displayName\":\"Service\"},\"Costs.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"Sum(Costs.ContractedCost)\":{\"displayName\":\"Contracted cost\"},\"Costs.ResourceId\":{\"displayName\":\"Resources\"},\"Sum(Costs.x_CommitmentDiscountSavings)\":{\"displayName\":\"Commitment savings\"},\"Costs.x_CommitmentDiscountUtilization\":{\"displayName\":\"Utilization\"},\"Costs.x_EffectiveSavingsRate\":{\"displayName\":\"ESR\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"290.362416825183D\"}}}},\"selector\":{\"metadata\":\"Costs.CommitmentDiscountName\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"71.45161290322581D\"}}}},\"selector\":{\"metadata\":\"Costs.x_EffectiveSavingsRate\"}}]},\"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.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 }, { "config": "{\"name\":\"cb482e04df885e9840b7\",\"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\":\"d1026817a389ac9f3ffa\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "config": "{\"name\":\"cce9de5078ef86f4baaa\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":5000}}],\"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\":\"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\":\"'Commitment savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[]", - "height": 88.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 4000.00 }, { "config": "{\"name\":\"d0dc0269cc5ca1ad0e4d\",\"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\":\"d1026817a389ac9f3ffa\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"d1026817a389ac9f3ffa\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.39572239294395,\"y\":8.005493854933814,\"z\":0,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, + "height": 704.00, "width": 1048.09, - "x": 215.4, + "x": 215.40, "y": 8.01, - "z": 0.0 + "z": 0.00 }, { "config": "{\"name\":\"d7a56b2148b48a32413b\",\"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\":\"d1026817a389ac9f3ffa\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "config": "{\"name\":\"ded7e1e21e22c5fb9938\",\"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\":\"b5c7451da0db7bc0be46\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "config": "{\"name\":\"e3aa91d0ebf9323d8270\",\"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\":\"d1026817a389ac9f3ffa\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"ebc1efab3c1d6a7b6682\",\"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\":\"d1026817a389ac9f3ffa\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "config": "{\"name\":\"edd6325fff9848203168\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":2000}}],\"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\":\"b5c7451da0db7bc0be46\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "config": "{\"name\":\"f07b15a2a16fc3d808e9\",\"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\":\"d1026817a389ac9f3ffa\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"f084cba7f7b704f81905\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":192,\"x\":0,\"y\":0,\"z\":5000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Commitment discounts\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Summarize reservation and savings plan cost, utilization, and 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\":\"73e8d862cebd28d3c41c\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"f6f528ad09afb1b525af\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":3000,\"width\":1048,\"height\":280,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.x_ReportingDate\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}],\"Series\":[{\"queryRef\":\"Costs.CommitmentDiscountStatus\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"},\"Name\":\"Costs.x_ReportingDate\",\"NativeReferenceName\":\"x_ReportingDate\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"},\"Name\":\"Costs.CommitmentDiscountStatus\",\"NativeReferenceName\":\"Status\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"}}}]},\"columnProperties\":{\"Costs.CommitmentDiscountStatus\":{\"displayName\":\"Status\"},\"Sum(Costs.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'\"}}}}}],\"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.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { "config": "{\"name\":\"fa7894b02f0e4be88199\",\"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\":\"73e8d862cebd28d3c41c\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 } ], - "width": 1280.0 + "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.0, + "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 (for example, 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.0, - "width": 320.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 176.00, + "width": 320.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 } ], - "width": 320.0 + "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.0, + "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 (for example, 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.0, - "width": 320.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 256.00, + "width": 320.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 } ], - "width": 320.0 + "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.0, + "height": 172.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 (for example, ACD, MACC, EDP) but \",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\"without\",\"textStyle\":{\"fontStyle\":\"italic\",\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\" commitment discounts (for example, 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\"}}}}}]}}}", + "config": "{\"name\":\"125596a7857940ceeea3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":-4,\"z\":5000,\"width\":320,\"height\":176,\"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 (for example, ACD, MACC, EDP) but \",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\"without\",\"textStyle\":{\"fontStyle\":\"italic\",\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\" commitment discounts (for example, 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.0, - "width": 320.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 176.00, + "width": 320.00, + "x": 0.00, + "y": -4.00, + "z": 5000.00 } ], - "width": 320.0 + "width": 320.00 } ], "theme": "Microsoft_FinOps_light_theme23216430052051784.json" -} +} \ No newline at end of file diff --git a/src/power-bi/kql/Shared.Dataset/definition/cultures/en-US.tmdl b/src/power-bi/kql/Shared.Dataset/definition/cultures/en-US.tmdl index 4ecbaecca..315281a36 100644 --- a/src/power-bi/kql/Shared.Dataset/definition/cultures/en-US.tmdl +++ b/src/power-bi/kql/Shared.Dataset/definition/cultures/en-US.tmdl @@ -133,7 +133,7 @@ cultureInfo en-US } }, { - "SKU": { + "Size": { "State": "Suggested", "Source": { "Type": "External", @@ -15579,302 +15579,257 @@ cultureInfo en-US } ] }, - "management_group.display_name": { + "management_group.tag": { "Definition": { "Binding": { "ConceptualEntity": "ManagementGroups", - "ConceptualProperty": "displayName" + "ConceptualProperty": "tags" } }, "State": "Generated", "Terms": [ { - "display name": { + "tag": { "State": "Generated" } }, { - "displayName": { + "device": { "Type": "Noun", - "State": "Generated", - "Weight": 0.99 + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.491 } }, { - "display nickname": { + "ticket": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.476 } }, { - "display title": { + "tab": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.476 } }, { - "display label": { + "docket": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.476 } }, { - "display tag": { + "chip": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.476 } - } - ] - }, - "management_group.managementGroupAncestorsChain_displayName": { - "Definition": { - "Binding": { - "ConceptualEntity": "ManagementGroups", - "ConceptualProperty": "managementGroupAncestorsChain.displayName" - } - }, - "State": "Generated", - "Terms": [ + }, { - "managementGroupAncestorsChain.displayName": { - "State": "Generated" + "mark": { + "Type": "Noun", + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.476 } } ] }, - "management_group.management_group_ancestors_chain_name": { + "management_group.identity": { "Definition": { "Binding": { "ConceptualEntity": "ManagementGroups", - "ConceptualProperty": "managementGroupAncestorsChain.name" + "ConceptualProperty": "identity" } }, "State": "Generated", "Terms": [ { - "management group ancestors chain name": { + "identity": { "State": "Generated" } }, { - "management group ancestor chain name": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.78 - } - }, - { - "managementGroupAncestorsChain.name": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.99 - } - }, - { - "chain": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "ancestors chain": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "ancestor chain": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.7566 - } - }, - { - "group ancestors chain": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "group ancestor chain": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.7566 - } - }, - { - "chain name": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "ancestors chain name": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "ancestor chain name": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.7566 - } - }, - { - "group ancestors chain name": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "group ancestor chain name": { + "individuality": { "Type": "Noun", - "State": "Generated", - "Weight": 0.7566 + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.491 } }, { - "management group ancestor chain nickname": { + "uniqueness": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.757 + "Weight": 0.491 } }, { - "management group ancestor chain title": { + "distinctiveness": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.757 + "Weight": 0.491 } }, { - "management group ancestor chain label": { + "personality": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.757 + "Weight": 0.491 } }, { - "management group ancestor chain tag": { + "self": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.757 + "Weight": 0.476 } }, { - "group ancestor chain nickname": { + "character": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.748 + "Weight": 0.476 + } + } + ] + }, + "management_group.zone": { + "Definition": { + "Binding": { + "ConceptualEntity": "ManagementGroups", + "ConceptualProperty": "zones" + } + }, + "State": "Generated", + "Terms": [ + { + "zone": { + "State": "Generated" } }, { - "group ancestor chain title": { + "precinct": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.748 + "Weight": 0.491 } }, { - "group ancestor chain label": { + "district": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.748 + "Weight": 0.476 } }, { - "group ancestor chain tag": { + "sector": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.748 + "Weight": 0.476 } }, { - "ancestor chain nickname": { + "neighborhood": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.739 + "Weight": 0.476 } }, { - "ancestor chain title": { + "area": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.739 + "Weight": 0.476 } } ] }, - "management_group.updated_time": { + "management_group.extended_location": { "Definition": { "Binding": { "ConceptualEntity": "ManagementGroups", - "ConceptualProperty": "updatedTime" + "ConceptualProperty": "extendedLocation" } }, "State": "Generated", "Terms": [ { - "updated time": { + "extended location": { "State": "Generated" } }, { - "updatedTime": { + "extendedLocation": { "Type": "Noun", "State": "Generated", "Weight": 0.99 } }, { - "updated duration": { + "extended locality": { + "Type": "Noun", + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.75 + } + }, + { + "extended placement": { "Type": "Noun", "State": "Suggested", "Source": { @@ -15884,7 +15839,7 @@ cultureInfo en-US } }, { - "updated interval": { + "extended scene": { "Type": "Noun", "State": "Suggested", "Source": { @@ -15894,7 +15849,7 @@ cultureInfo en-US } }, { - "updated moment": { + "extended venue": { "Type": "Noun", "State": "Suggested", "Source": { @@ -15904,7 +15859,7 @@ cultureInfo en-US } }, { - "updated period": { + "extended address": { "Type": "Noun", "State": "Suggested", "Source": { @@ -15914,7 +15869,7 @@ cultureInfo en-US } }, { - "updated timetable": { + "extended place": { "Type": "Noun", "State": "Suggested", "Source": { @@ -15922,48 +15877,64 @@ cultureInfo en-US }, "Weight": 0.727 } - } - ] - }, - "management_group.updated_by": { - "Definition": { - "Binding": { - "ConceptualEntity": "ManagementGroups", - "ConceptualProperty": "updatedBy" - } - }, - "State": "Generated", - "Terms": [ + }, { - "updated by": { - "State": "Generated" + "extended position": { + "Type": "Noun", + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.727 } }, { - "updatedBy": { + "extended setting": { "Type": "Noun", - "State": "Generated", - "Weight": 0.99 + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.727 + } + }, + { + "extended site": { + "Type": "Noun", + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.727 + } + }, + { + "extended spot": { + "Type": "Noun", + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.727 } } ] }, - "management_group.version": { + "subscription": { "Definition": { "Binding": { - "ConceptualEntity": "ManagementGroups", - "ConceptualProperty": "version" + "ConceptualEntity": "Subscriptions" } }, "State": "Generated", "Terms": [ { - "version": { + "subscription": { "State": "Generated" } }, { - "variety": { + "payment": { "Type": "Noun", "State": "Suggested", "Source": { @@ -15973,191 +15944,216 @@ cultureInfo en-US } }, { - "form": { + "donation": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.491 } }, { - "style": { + "contribution": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.491 } - }, + } + ] + }, + "subscription.id": { + "Definition": { + "Binding": { + "ConceptualEntity": "Subscriptions", + "ConceptualProperty": "id" + } + }, + "State": "Generated", + "Terms": [ { - "report": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.452 + "id": { + "State": "Generated" } }, { - "story": { + "identification": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.452 + "Weight": 0.736 } }, { - "side": { + "credential": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.452 + "Weight": 0.714 } } - ] + ], + "NameType": "Identifier" }, - "management_group.parent_displayName": { + "subscription.name": { "Definition": { "Binding": { - "ConceptualEntity": "ManagementGroups", - "ConceptualProperty": "parent.displayName" + "ConceptualEntity": "Subscriptions", + "ConceptualProperty": "name" } }, "State": "Generated", "Terms": [ { - "parent.displayName": { + "name": { "State": "Generated" } + }, + { + "title": { + "Type": "Noun", + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.714 + } + }, + { + "Subscription": { + "State": "Suggested", + "Source": { + "Type": "External", + "Agent": "PowerBI.VisualColumnRename" + }, + "Weight": 0.9 + } } - ] + ], + "NameType": "Name" }, - "management_group.parent_name": { + "subscription.type": { "Definition": { "Binding": { - "ConceptualEntity": "ManagementGroups", - "ConceptualProperty": "parent.name" + "ConceptualEntity": "Subscriptions", + "ConceptualProperty": "type" } }, "State": "Generated", "Terms": [ { - "parent name": { + "type": { "State": "Generated" } }, { - "parent.name": { + "genre": { "Type": "Noun", - "State": "Generated", - "Weight": 0.99 - } - }, - { - "parent": { - "State": "Generated", - "Weight": 0.97 + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.736 } }, { - "parent nickname": { + "manner": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.736 } }, { - "parent title": { + "variety": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.736 } }, { - "parent label": { + "brand": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.714 } }, { - "parent tag": { + "style": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.714 } }, { - "father": { + "form": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.452 + "Weight": 0.714 } }, { - "mother": { + "grouping": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.452 + "Weight": 0.714 } } ] }, - "management_group.parent_id": { + "subscription.tenant_id": { "Definition": { "Binding": { - "ConceptualEntity": "ManagementGroups", - "ConceptualProperty": "parent.id" + "ConceptualEntity": "Subscriptions", + "ConceptualProperty": "tenantId" } }, "State": "Generated", "Terms": [ { - "parent id": { + "tenant id": { "State": "Generated" } }, { - "parent.id": { + "tenantId": { "Type": "Noun", "State": "Generated", "Weight": 0.99 } }, { - "parent": { + "tenant": { "State": "Generated", "Weight": 0.97 } }, { - "parent identification": { + "tenant identification": { "Type": "Noun", "State": "Suggested", "Source": { @@ -16167,7 +16163,7 @@ cultureInfo en-US } }, { - "parent identity": { + "tenant identity": { "Type": "Noun", "State": "Suggested", "Source": { @@ -16177,7 +16173,7 @@ cultureInfo en-US } }, { - "parent identifier": { + "tenant identifier": { "Type": "Noun", "State": "Suggested", "Source": { @@ -16187,7 +16183,7 @@ cultureInfo en-US } }, { - "parent credential": { + "tenant credential": { "Type": "Noun", "State": "Suggested", "Source": { @@ -16197,43 +16193,7 @@ cultureInfo en-US } }, { - "father": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.452 - } - }, - { - "mother": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.452 - } - } - ] - }, - "management_group.tag": { - "Definition": { - "Binding": { - "ConceptualEntity": "ManagementGroups", - "ConceptualProperty": "tags" - } - }, - "State": "Generated", - "Terms": [ - { - "tag": { - "State": "Generated" - } - }, - { - "device": { + "occupant": { "Type": "Noun", "State": "Suggested", "Source": { @@ -16243,682 +16203,603 @@ cultureInfo en-US } }, { - "ticket": { + "renter": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.491 } }, { - "tab": { + "lodger": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.491 } }, { - "docket": { + "boarder": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.491 } }, { - "chip": { + "leaseholder": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.491 } }, { - "mark": { + "lessee": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.491 } } ] }, - "management_group.identity": { + "subscription.kind": { "Definition": { "Binding": { - "ConceptualEntity": "ManagementGroups", - "ConceptualProperty": "identity" + "ConceptualEntity": "Subscriptions", + "ConceptualProperty": "kind" } }, "State": "Generated", "Terms": [ { - "identity": { + "kind": { "State": "Generated" } }, { - "individuality": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.491 - } - }, - { - "uniqueness": { + "caring": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.476 } }, { - "distinctiveness": { + "gentle": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.476 } }, { - "personality": { + "humanitarian": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.476 } }, { - "self": { + "variety": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.466 } }, { - "character": { + "manner": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 - } - } - ] - }, - "management_group.zone": { - "Definition": { - "Binding": { - "ConceptualEntity": "ManagementGroups", - "ConceptualProperty": "zones" - } - }, - "State": "Generated", - "Terms": [ - { - "zone": { - "State": "Generated" + "Weight": 0.466 } }, { - "precinct": { + "nature": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.466 } }, { - "district": { + "hue": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.466 } }, { - "sector": { + "caste": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.466 } }, { - "neighborhood": { + "genre": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.466 } }, { - "area": { + "brand": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.452 } } ] }, - "management_group.extended_location": { + "subscription.location": { "Definition": { "Binding": { - "ConceptualEntity": "ManagementGroups", - "ConceptualProperty": "extendedLocation" + "ConceptualEntity": "Subscriptions", + "ConceptualProperty": "location" } }, "State": "Generated", "Terms": [ { - "extended location": { + "location": { "State": "Generated" } }, { - "extendedLocation": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.99 - } - }, - { - "extended locality": { + "locality": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.736 } }, { - "extended placement": { + "placement": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.736 } }, { - "extended scene": { + "scene": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.736 } }, { - "extended venue": { + "venue": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.736 } }, { - "extended address": { + "place": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 - } - }, - { - "extended place": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 - } - }, - { - "extended position": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 + "Weight": 0.714 } }, { - "extended setting": { + "position": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.714 } }, { - "extended site": { + "site": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.714 } }, { - "extended spot": { + "spot": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.714 } } ] }, - "subscription": { + "subscription.resource_group": { "Definition": { "Binding": { - "ConceptualEntity": "Subscriptions" + "ConceptualEntity": "Subscriptions", + "ConceptualProperty": "resourceGroup" } }, "State": "Generated", "Terms": [ { - "subscription": { + "resource group": { "State": "Generated" } }, { - "payment": { + "resourceGroup": { "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.491 + "State": "Generated", + "Weight": 0.99 } }, { - "donation": { + "resource category": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.75 } }, { - "contribution": { + "resource organization": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 - } - } - ] - }, - "subscription.id": { - "Definition": { - "Binding": { - "ConceptualEntity": "Subscriptions", - "ConceptualProperty": "id" - } - }, - "State": "Generated", - "Terms": [ - { - "id": { - "State": "Generated" + "Weight": 0.75 } }, { - "identification": { + "resource bracket": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.727 } }, { - "credential": { + "resource class": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 - } - } - ], - "NameType": "Identifier" - }, - "subscription.name": { - "Definition": { - "Binding": { - "ConceptualEntity": "Subscriptions", - "ConceptualProperty": "name" - } - }, - "State": "Generated", - "Terms": [ - { - "name": { - "State": "Generated" + "Weight": 0.727 } }, { - "title": { + "resource crew": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 + "Weight": 0.727 } }, { - "Subscription": { + "resource team": { + "Type": "Noun", "State": "Suggested", "Source": { - "Type": "External", - "Agent": "PowerBI.VisualColumnRename" + "Agent": "Thesaurus" }, - "Weight": 0.9 + "Weight": 0.727 } } - ], - "NameType": "Name" + ] }, - "subscription.type": { + "subscription.subscription_id": { "Definition": { "Binding": { "ConceptualEntity": "Subscriptions", - "ConceptualProperty": "type" + "ConceptualProperty": "subscriptionId" } }, "State": "Generated", "Terms": [ { - "type": { + "subscription id": { "State": "Generated" } }, { - "genre": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.736 - } - }, - { - "manner": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.736 + "id": { + "State": "Generated", + "Weight": 0.97 } }, { - "variety": { + "subscriptionId": { "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.736 + "State": "Generated", + "Weight": 0.99 } }, { - "brand": { + "subscription identification": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 + "Weight": 0.75 } }, { - "style": { + "subscription identity": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 + "Weight": 0.75 } }, { - "form": { + "subscription identifier": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 + "Weight": 0.75 } }, { - "grouping": { + "subscription credential": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 + "Weight": 0.727 } } - ] + ], + "NameType": "Identifier" }, - "subscription.tenant_id": { + "subscription.managed_by": { "Definition": { "Binding": { "ConceptualEntity": "Subscriptions", - "ConceptualProperty": "tenantId" + "ConceptualProperty": "managedBy" } }, "State": "Generated", "Terms": [ { - "tenant id": { + "managed by": { "State": "Generated" } }, { - "tenantId": { + "managedBy": { "Type": "Noun", "State": "Generated", "Weight": 0.99 } - }, + } + ] + }, + "subscription.sku": { + "Definition": { + "Binding": { + "ConceptualEntity": "Subscriptions", + "ConceptualProperty": "sku" + } + }, + "State": "Generated", + "Terms": [ { - "tenant": { - "State": "Generated", - "Weight": 0.97 + "sku": { + "State": "Generated" + } + } + ] + }, + "subscription.plan": { + "Definition": { + "Binding": { + "ConceptualEntity": "Subscriptions", + "ConceptualProperty": "plan" + } + }, + "State": "Generated", + "Terms": [ + { + "plan": { + "State": "Generated" } }, { - "tenant identification": { + "proposal": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.736 } }, { - "tenant identity": { + "strategy": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.736 } }, { - "tenant identifier": { + "agenda": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.736 } }, { - "tenant credential": { + "arrangement": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.736 } }, { - "occupant": { + "idea": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.736 } }, { - "renter": { + "layout": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.736 } }, { - "lodger": { + "policy": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.736 } }, { - "boarder": { + "preparation": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.736 } }, { - "leaseholder": { + "blueprint": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.714 } }, { - "lessee": { + "initiative": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.714 } } ] }, - "subscription.kind": { + "subscription.tag": { "Definition": { "Binding": { "ConceptualEntity": "Subscriptions", - "ConceptualProperty": "kind" + "ConceptualProperty": "tags" } }, "State": "Generated", "Terms": [ { - "kind": { + "tag": { "State": "Generated" } }, { - "caring": { + "device": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.491 } }, { - "gentle": { + "ticket": { "Type": "Noun", "State": "Suggested", "Source": { @@ -16928,7 +16809,7 @@ cultureInfo en-US } }, { - "humanitarian": { + "tab": { "Type": "Noun", "State": "Suggested", "Source": { @@ -16938,196 +16819,202 @@ cultureInfo en-US } }, { - "variety": { + "docket": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.466 + "Weight": 0.476 } }, { - "manner": { + "chip": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.466 + "Weight": 0.476 } }, { - "nature": { + "mark": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.466 + "Weight": 0.476 } - }, + } + ] + }, + "subscription.identity": { + "Definition": { + "Binding": { + "ConceptualEntity": "Subscriptions", + "ConceptualProperty": "identity" + } + }, + "State": "Generated", + "Terms": [ { - "hue": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.466 + "identity": { + "State": "Generated" } }, { - "caste": { + "individuality": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.466 + "Weight": 0.491 } }, { - "genre": { + "uniqueness": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.466 + "Weight": 0.491 } }, { - "brand": { + "distinctiveness": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.452 - } - } - ] - }, - "subscription.location": { - "Definition": { - "Binding": { - "ConceptualEntity": "Subscriptions", - "ConceptualProperty": "location" - } - }, - "State": "Generated", - "Terms": [ - { - "location": { - "State": "Generated" + "Weight": 0.491 } }, { - "locality": { + "personality": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.491 } }, { - "placement": { + "self": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.476 } }, { - "scene": { + "character": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.476 + } + } + ] + }, + "subscription.zone": { + "Definition": { + "Binding": { + "ConceptualEntity": "Subscriptions", + "ConceptualProperty": "zones" + } + }, + "State": "Generated", + "Terms": [ + { + "zone": { + "State": "Generated" } }, { - "venue": { + "precinct": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.491 } }, { - "place": { + "district": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 + "Weight": 0.476 } }, { - "position": { + "sector": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 + "Weight": 0.476 } }, { - "site": { + "neighborhood": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 + "Weight": 0.476 } }, { - "spot": { + "area": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 + "Weight": 0.476 } } ] }, - "subscription.resource_group": { + "subscription.extended_location": { "Definition": { "Binding": { "ConceptualEntity": "Subscriptions", - "ConceptualProperty": "resourceGroup" + "ConceptualProperty": "extendedLocation" } }, "State": "Generated", "Terms": [ { - "resource group": { + "extended location": { "State": "Generated" } }, { - "resourceGroup": { + "extendedLocation": { "Type": "Noun", "State": "Generated", "Weight": 0.99 } }, { - "resource category": { + "extended locality": { "Type": "Noun", "State": "Suggested", "Source": { @@ -17137,7 +17024,7 @@ cultureInfo en-US } }, { - "resource organization": { + "extended placement": { "Type": "Noun", "State": "Suggested", "Source": { @@ -17147,27 +17034,27 @@ cultureInfo en-US } }, { - "resource bracket": { + "extended scene": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.75 } }, { - "resource class": { + "extended venue": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.75 } }, { - "resource crew": { + "extended address": { "Type": "Noun", "State": "Suggested", "Source": { @@ -17177,7 +17064,7 @@ cultureInfo en-US } }, { - "resource team": { + "extended place": { "Type": "Noun", "State": "Suggested", "Source": { @@ -17185,68 +17072,39 @@ cultureInfo en-US }, "Weight": 0.727 } - } - ] - }, - "subscription.subscription_id": { - "Definition": { - "Binding": { - "ConceptualEntity": "Subscriptions", - "ConceptualProperty": "subscriptionId" - } - }, - "State": "Generated", - "Terms": [ - { - "subscription id": { - "State": "Generated" - } - }, - { - "id": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "subscriptionId": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.99 - } }, { - "subscription identification": { + "extended position": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.727 } }, { - "subscription identity": { + "extended setting": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.727 } }, { - "subscription identifier": { + "extended site": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.727 } }, { - "subscription credential": { + "extended spot": { "Type": "Noun", "State": "Suggested", "Source": { @@ -17255,1761 +17113,1732 @@ cultureInfo en-US "Weight": 0.727 } } - ], - "NameType": "Identifier" + ] }, - "subscription.managed_by": { + "resource_type": { "Definition": { "Binding": { - "ConceptualEntity": "Subscriptions", - "ConceptualProperty": "managedBy" + "ConceptualEntity": "ResourceTypes" } }, "State": "Generated", "Terms": [ { - "managed by": { + "resource type": { "State": "Generated" } }, { - "managedBy": { + "ResourceTypes": { "Type": "Noun", "State": "Generated", "Weight": 0.99 } - } - ] - }, - "subscription.sku": { - "Definition": { - "Binding": { - "ConceptualEntity": "Subscriptions", - "ConceptualProperty": "sku" - } - }, - "State": "Generated", - "Terms": [ - { - "sku": { - "State": "Generated" - } - } - ] - }, - "subscription.plan": { - "Definition": { - "Binding": { - "ConceptualEntity": "Subscriptions", - "ConceptualProperty": "plan" - } - }, - "State": "Generated", - "Terms": [ - { - "plan": { - "State": "Generated" - } }, { - "proposal": { + "resource category": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.75 } }, { - "strategy": { + "resource genre": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.75 } }, { - "agenda": { + "resource manner": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.75 } }, { - "arrangement": { + "resource variety": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.75 } }, { - "idea": { + "resource brand": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.727 } }, { - "layout": { + "resource class": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.727 } }, { - "policy": { + "resource kind": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.727 } }, { - "preparation": { + "resource style": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.727 } }, { - "blueprint": { + "resource form": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 + "Weight": 0.727 } }, { - "initiative": { + "resource grouping": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 + "Weight": 0.727 } } ] }, - "subscription.management_group_ancestors_chain": { + "resource_type.resource_type": { "Definition": { "Binding": { - "ConceptualEntity": "Subscriptions", - "ConceptualProperty": "managementGroupAncestorsChain" + "ConceptualEntity": "ResourceTypes", + "ConceptualProperty": "ResourceType" } }, "State": "Generated", "Terms": [ { - "management group ancestors chain": { + "resource type": { "State": "Generated" } }, { - "management group ancestor chain": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.78 + "resource type name": { + "State": "Generated" } }, { - "managementGroupAncestorsChain": { + "ResourceType": { "Type": "Noun", "State": "Generated", "Weight": 0.99 } }, { - "chain": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "ancestors chain": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "ancestor chain": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.7566 - } - }, - { - "group ancestors chain": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "group ancestor chain": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.7566 - } - }, - { - "management category ancestor chain": { + "resource category": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.617 + "Weight": 0.75 } }, { - "management organization ancestor chain": { + "resource genre": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.617 + "Weight": 0.75 } }, { - "category ancestor chain": { + "resource manner": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.609 + "Weight": 0.75 } }, { - "organization ancestor chain": { + "resource variety": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.609 + "Weight": 0.75 } }, { - "management bracket ancestor chain": { + "resource brand": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.599 + "Weight": 0.727 } }, { - "management class ancestor chain": { + "resource class": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.599 + "Weight": 0.727 } }, { - "management crew ancestor chain": { + "resource kind": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.599 + "Weight": 0.727 } }, { - "management team ancestor chain": { + "resource style": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.599 + "Weight": 0.727 } }, { - "bracket ancestor chain": { + "resource form": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.591 + "Weight": 0.727 } }, { - "class ancestor chain": { + "resource grouping": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.591 + "Weight": 0.727 } } - ] + ], + "NameType": "Name" }, - "subscription.state": { + "resource_type.singular_display_name": { "Definition": { "Binding": { - "ConceptualEntity": "Subscriptions", - "ConceptualProperty": "state" + "ConceptualEntity": "ResourceTypes", + "ConceptualProperty": "SingularDisplayName" } }, "State": "Generated", "Terms": [ { - "": {} + "singular display name": { + "State": "Generated" + } }, { - "province": { + "SingularDisplayName": { "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.736 + "State": "Generated", + "Weight": 0.99 + } + }, + { + "singular display": { + "State": "Generated", + "Weight": 0.97 } }, { - "territory": { + "singular display nickname": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.739 } }, { - "nation": { + "singular display title": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.739 } }, { - "condition": { + "singular display label": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 + "Weight": 0.739 } }, { - "country": { + "singular display tag": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 - } - } - ] - }, - "subscription.tag": { - "Definition": { - "Binding": { - "ConceptualEntity": "Subscriptions", - "ConceptualProperty": "tags" - } - }, - "State": "Generated", - "Terms": [ - { - "tag": { - "State": "Generated" + "Weight": 0.739 } }, { - "device": { + "singular exhibition": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.5 } }, { - "ticket": { + "singular presentation": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.5 } }, { - "tab": { + "singular demonstration": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.5 } }, { - "docket": { + "singular spectacle": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.5 } }, { - "chip": { + "singular ceremony": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.5 } }, { - "mark": { + "singular pageant": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.5 } } ] }, - "subscription.identity": { + "resource_type.plural_display_name": { "Definition": { "Binding": { - "ConceptualEntity": "Subscriptions", - "ConceptualProperty": "identity" + "ConceptualEntity": "ResourceTypes", + "ConceptualProperty": "PluralDisplayName" } }, "State": "Generated", "Terms": [ { - "identity": { + "plural display name": { "State": "Generated" } }, { - "individuality": { + "PluralDisplayName": { "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.491 + "State": "Generated", + "Weight": 0.99 } }, { - "uniqueness": { + "plural display": { + "State": "Generated", + "Weight": 0.97 + } + }, + { + "plural display nickname": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.739 } }, { - "distinctiveness": { + "plural display title": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.739 } }, { - "personality": { + "plural display label": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.739 } }, { - "self": { + "plural display tag": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.739 } }, { - "character": { + "plural exhibition": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 - } - } - ] - }, - "subscription.zone": { - "Definition": { - "Binding": { - "ConceptualEntity": "Subscriptions", - "ConceptualProperty": "zones" - } - }, - "State": "Generated", - "Terms": [ - { - "zone": { - "State": "Generated" + "Weight": 0.5 } }, { - "precinct": { + "plural presentation": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.5 } }, { - "district": { + "plural demonstration": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.5 } }, { - "sector": { + "plural spectacle": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.5 } }, { - "neighborhood": { + "plural ceremony": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.5 } }, { - "area": { + "plural pageant": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.5 } } ] }, - "subscription.extended_location": { + "resource_type.lower_singular_display_name": { "Definition": { "Binding": { - "ConceptualEntity": "Subscriptions", - "ConceptualProperty": "extendedLocation" + "ConceptualEntity": "ResourceTypes", + "ConceptualProperty": "LowerSingularDisplayName" } }, "State": "Generated", "Terms": [ { - "extended location": { + "lower singular display name": { "State": "Generated" } }, { - "extendedLocation": { + "LowerSingularDisplayName": { "Type": "Noun", "State": "Generated", "Weight": 0.99 } }, { - "extended locality": { + "singular display": { + "State": "Generated", + "Weight": 0.97 + } + }, + { + "lower singular display": { + "State": "Generated", + "Weight": 0.97 + } + }, + { + "lower singular display nickname": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.748 } }, { - "extended placement": { + "lower singular display title": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.748 } }, { - "extended scene": { + "lower singular display label": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.748 } }, { - "extended venue": { + "lower singular display tag": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.748 } }, { - "extended address": { + "lower singular exhibition": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.508 } }, { - "extended place": { + "lower singular presentation": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.508 } }, { - "extended position": { + "lower singular demonstration": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.508 } }, { - "extended setting": { + "lower singular spectacle": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.508 } }, { - "extended site": { + "lower singular ceremony": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.508 } }, { - "extended spot": { + "lower singular pageant": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.508 } } ] }, - "resource_type": { + "resource_type.lower_plural_display_name": { "Definition": { "Binding": { - "ConceptualEntity": "ResourceTypes" + "ConceptualEntity": "ResourceTypes", + "ConceptualProperty": "LowerPluralDisplayName" } }, "State": "Generated", "Terms": [ { - "resource type": { + "lower plural display name": { "State": "Generated" } }, { - "ResourceTypes": { + "LowerPluralDisplayName": { "Type": "Noun", "State": "Generated", "Weight": 0.99 } }, { - "resource category": { + "plural display": { + "State": "Generated", + "Weight": 0.97 + } + }, + { + "lower plural display": { + "State": "Generated", + "Weight": 0.97 + } + }, + { + "lower plural display nickname": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.748 } }, { - "resource genre": { + "lower plural display title": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.748 } }, { - "resource manner": { + "lower plural display label": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.748 } }, { - "resource variety": { + "lower plural display tag": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.748 } }, { - "resource brand": { + "lower plural exhibition": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.508 } }, { - "resource class": { + "lower plural presentation": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.508 } }, { - "resource kind": { + "lower plural demonstration": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.508 } }, { - "resource style": { + "lower plural spectacle": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.508 } }, { - "resource form": { + "lower plural ceremony": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.508 } }, { - "resource grouping": { + "lower plural pageant": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.508 } } ] }, - "resource_type.resource_type": { + "resource_type.is_preview": { "Definition": { "Binding": { "ConceptualEntity": "ResourceTypes", - "ConceptualProperty": "ResourceType" + "ConceptualProperty": "IsPreview" } }, "State": "Generated", "Terms": [ { - "resource type": { + "is preview": { "State": "Generated" } }, { - "resource type name": { - "State": "Generated" + "IsPreview": { + "Type": "Noun", + "State": "Generated", + "Weight": 0.99 } }, { - "ResourceType": { - "Type": "Noun", + "preview": { "State": "Generated", - "Weight": 0.99 + "Weight": 0.97 } }, { - "resource category": { + "is performance": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.5 } }, { - "resource genre": { + "is promo": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.5 } }, { - "resource manner": { + "performance": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.491 } }, { - "resource variety": { + "promo": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.491 } }, { - "resource brand": { + "is showing": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.485 } }, { - "resource class": { + "is broadcast": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.485 } }, { - "resource kind": { + "is screening": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.485 } }, { - "resource style": { + "is opening": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.485 } }, { - "resource form": { + "showing": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.476 } }, { - "resource grouping": { + "broadcast": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.476 } } - ], - "NameType": "Name" + ] }, - "resource_type.singular_display_name": { + "resource_type.description": { "Definition": { "Binding": { "ConceptualEntity": "ResourceTypes", - "ConceptualProperty": "SingularDisplayName" + "ConceptualProperty": "Description" } }, "State": "Generated", "Terms": [ { - "singular display name": { + "description": { "State": "Generated" } }, { - "SingularDisplayName": { + "appearance": { "Type": "Noun", - "State": "Generated", - "Weight": 0.99 + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.736 } }, { - "singular display": { - "State": "Generated", - "Weight": 0.97 + "descriptor": { + "Type": "Noun", + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.736 } }, { - "singular display nickname": { + "explanation": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.739 + "Weight": 0.736 } }, { - "singular display title": { + "specification": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.739 + "Weight": 0.736 } }, { - "singular display label": { + "overview": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.739 + "Weight": 0.714 } }, { - "singular display tag": { + "report": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.739 + "Weight": 0.714 + } + } + ] + }, + "resource_type.icon": { + "Definition": { + "Binding": { + "ConceptualEntity": "ResourceTypes", + "ConceptualProperty": "Icon" + } + }, + "State": "Generated", + "Terms": [ + { + "icon": { + "State": "Generated" } }, { - "singular exhibition": { + "likeness": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.5 + "Weight": 0.491 } }, { - "singular presentation": { + "representation": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.5 + "Weight": 0.491 } }, { - "singular demonstration": { + "portrait": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.5 + "Weight": 0.491 } }, { - "singular spectacle": { + "emblem": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.5 + "Weight": 0.491 } }, { - "singular ceremony": { + "logo": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.5 + "Weight": 0.491 } }, { - "singular pageant": { + "image": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.5 - } - } - ] - }, - "resource_type.plural_display_name": { - "Definition": { - "Binding": { - "ConceptualEntity": "ResourceTypes", - "ConceptualProperty": "PluralDisplayName" - } - }, - "State": "Generated", - "Terms": [ - { - "plural display name": { - "State": "Generated" + "Weight": 0.476 } }, { - "PluralDisplayName": { + "sign": { "Type": "Noun", - "State": "Generated", - "Weight": 0.99 + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.476 } }, { - "plural display": { - "State": "Generated", - "Weight": 0.97 + "photograph": { + "Type": "Noun", + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.476 } }, { - "plural display nickname": { + "drawing": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.739 + "Weight": 0.476 } }, { - "plural display title": { + "picture": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.739 + "Weight": 0.476 + } + } + ] + }, + "resource_type.link": { + "Definition": { + "Binding": { + "ConceptualEntity": "ResourceTypes", + "ConceptualProperty": "Links" + } + }, + "State": "Generated", + "Terms": [ + { + "link": { + "State": "Generated" } }, { - "plural display label": { + "relation": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.739 + "Weight": 0.491 } }, { - "plural display tag": { + "association": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.739 + "Weight": 0.491 } }, { - "plural exhibition": { + "relationship": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.5 + "Weight": 0.491 } }, { - "plural presentation": { + "linkage": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.5 + "Weight": 0.491 } }, { - "plural demonstration": { + "nexus": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.5 + "Weight": 0.491 } }, { - "plural spectacle": { + "tie": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.5 + "Weight": 0.476 } }, { - "plural ceremony": { + "bond": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.5 + "Weight": 0.476 } }, { - "plural pageant": { + "yoke": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.5 + "Weight": 0.476 } } ] }, - "resource_type.lower_singular_display_name": { + "region": { "Definition": { "Binding": { - "ConceptualEntity": "ResourceTypes", - "ConceptualProperty": "LowerSingularDisplayName" + "ConceptualEntity": "Regions" } }, "State": "Generated", "Terms": [ { - "lower singular display name": { + "region": { "State": "Generated" } }, { - "LowerSingularDisplayName": { + "province": { "Type": "Noun", - "State": "Generated", - "Weight": 0.99 + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.736 } }, { - "singular display": { + "area": { + "Type": "Noun", + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.714 + } + }, + { + "district": { + "Type": "Noun", + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.714 + } + }, + { + "continent": { + "Type": "Noun", + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.714 + } + } + ] + }, + "region.original_value": { + "Definition": { + "Binding": { + "ConceptualEntity": "Regions", + "ConceptualProperty": "OriginalValue" + } + }, + "State": "Generated", + "Terms": [ + { + "original value": { + "State": "Generated" + } + }, + { + "OriginalValue": { + "Type": "Noun", "State": "Generated", - "Weight": 0.97 + "Weight": 0.99 } }, { - "lower singular display": { + "value": { "State": "Generated", "Weight": 0.97 } }, { - "lower singular display nickname": { + "original assessment": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.748 + "Weight": 0.5 } }, { - "lower singular display title": { + "assessment": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.748 + "Weight": 0.491 } }, { - "lower singular display label": { + "original worth": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.748 + "Weight": 0.485 } }, { - "lower singular display tag": { + "original price": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.748 + "Weight": 0.485 } }, { - "lower singular exhibition": { + "original cost": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.508 + "Weight": 0.485 } }, { - "lower singular presentation": { + "original charge": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.508 + "Weight": 0.485 } }, { - "lower singular demonstration": { + "original rate": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.508 + "Weight": 0.485 } }, { - "lower singular spectacle": { + "worth": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.508 + "Weight": 0.476 } }, { - "lower singular ceremony": { + "charge": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.508 + "Weight": 0.476 } }, { - "lower singular pageant": { + "original importance": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.508 + "Weight": 0.475 } } ] }, - "resource_type.lower_plural_display_name": { + "region.region_id": { "Definition": { "Binding": { - "ConceptualEntity": "ResourceTypes", - "ConceptualProperty": "LowerPluralDisplayName" + "ConceptualEntity": "Regions", + "ConceptualProperty": "RegionId" } }, "State": "Generated", "Terms": [ { - "lower plural display name": { + "region id": { "State": "Generated" } }, { - "LowerPluralDisplayName": { + "RegionId": { "Type": "Noun", "State": "Generated", "Weight": 0.99 } }, { - "plural display": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "lower plural display": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "lower plural display nickname": { + "region identification": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.748 + "Weight": 0.75 } }, { - "lower plural display title": { + "region identity": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.748 + "Weight": 0.75 } }, { - "lower plural display label": { + "region identifier": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.748 + "Weight": 0.75 } }, { - "lower plural display tag": { + "region credential": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.748 + "Weight": 0.727 } }, { - "lower plural exhibition": { + "location id": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.508 + "Weight": 0.667 } }, { - "lower plural presentation": { + "province id": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.508 + "Weight": 0.6 } }, { - "lower plural demonstration": { + "area id": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.508 + "Weight": 0.582 } }, { - "lower plural spectacle": { + "district id": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.508 + "Weight": 0.582 } }, { - "lower plural ceremony": { + "zone id": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.508 + "Weight": 0.582 } }, { - "lower plural pageant": { + "continent id": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.508 + "Weight": 0.582 } } ] }, - "resource_type.is_preview": { + "region.region_name": { "Definition": { "Binding": { - "ConceptualEntity": "ResourceTypes", - "ConceptualProperty": "IsPreview" + "ConceptualEntity": "Regions", + "ConceptualProperty": "RegionName" } }, "State": "Generated", "Terms": [ { - "is preview": { + "region name": { "State": "Generated" } }, { - "IsPreview": { + "RegionName": { "Type": "Noun", "State": "Generated", "Weight": 0.99 } }, { - "preview": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "is performance": { + "region nickname": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.5 + "Weight": 0.727 } }, { - "is promo": { + "region title": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.5 + "Weight": 0.727 } }, { - "performance": { + "region label": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.727 } }, { - "promo": { + "region tag": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.727 } }, { - "is showing": { + "location name": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.485 + "Weight": 0.667 } }, { - "is broadcast": { + "province name": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.485 + "Weight": 0.6 } }, { - "is screening": { + "area name": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.485 + "Weight": 0.582 } }, { - "is opening": { + "district name": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.485 + "Weight": 0.582 } }, { - "showing": { + "zone name": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.582 } }, { - "broadcast": { + "continent name": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.582 } } ] }, - "resource_type.description": { + "virtual_machine": { "Definition": { "Binding": { - "ConceptualEntity": "ResourceTypes", - "ConceptualProperty": "Description" + "ConceptualEntity": "VirtualMachines" } }, "State": "Generated", "Terms": [ { - "description": { + "virtual machine": { "State": "Generated" } }, { - "appearance": { + "VirtualMachines": { "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.736 + "State": "Generated", + "Weight": 0.99 } }, { - "descriptor": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.736 + "machine": { + "State": "Generated", + "Weight": 0.97 } }, { - "explanation": { + "virtual mechanism": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.5 } }, { - "specification": { + "virtual engine": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.5 } }, { - "overview": { + "virtual appliance": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 + "Weight": 0.5 } }, { - "report": { + "virtual apparatus": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 - } - } - ] - }, - "resource_type.icon": { - "Definition": { - "Binding": { - "ConceptualEntity": "ResourceTypes", - "ConceptualProperty": "Icon" - } - }, - "State": "Generated", - "Terms": [ - { - "icon": { - "State": "Generated" + "Weight": 0.5 } }, { - "likeness": { + "virtual contraption": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.5 } }, { - "representation": { + "virtual device": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.5 } }, { - "portrait": { + "virtual contrivance": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.5 } }, { - "emblem": { + "mechanism": { "Type": "Noun", "State": "Suggested", "Source": { @@ -19019,7 +18848,7 @@ cultureInfo en-US } }, { - "logo": { + "engine": { "Type": "Noun", "State": "Suggested", "Source": { @@ -19029,247 +18858,238 @@ cultureInfo en-US } }, { - "image": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.476 - } - }, - { - "sign": { + "appliance": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.491 } - }, + } + ] + }, + "virtual_machine.id": { + "Definition": { + "Binding": { + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "id" + } + }, + "State": "Generated", + "Visibility": { + "Value": "Hidden" + }, + "Terms": [ { - "photograph": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.476 + "id": { + "State": "Generated" } }, { - "drawing": { + "identification": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.736 } }, { - "picture": { + "credential": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.714 } } ] }, - "resource_type.link": { + "virtual_machine.name": { "Definition": { "Binding": { - "ConceptualEntity": "ResourceTypes", - "ConceptualProperty": "Links" + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "name" } }, "State": "Generated", "Terms": [ { - "link": { + "name": { "State": "Generated" } }, { - "relation": { + "title": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.714 + } + } + ], + "NameType": "Name" + }, + "virtual_machine.type": { + "Definition": { + "Binding": { + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "type" + } + }, + "State": "Generated", + "Terms": [ + { + "type": { + "State": "Generated" } }, { - "association": { + "genre": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.736 } }, { - "relationship": { + "manner": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.736 } }, { - "linkage": { + "variety": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.736 } }, { - "nexus": { + "brand": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.714 } }, { - "tie": { + "style": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.714 } }, { - "bond": { + "form": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.714 } }, { - "yoke": { + "grouping": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.714 } } ] }, - "region": { + "virtual_machine.tenant_id": { "Definition": { "Binding": { - "ConceptualEntity": "Regions" + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "tenantId" } }, "State": "Generated", "Terms": [ { - "region": { + "tenant id": { "State": "Generated" } }, { - "province": { + "tenantId": { + "Type": "Noun", + "State": "Generated", + "Weight": 0.99 + } + }, + { + "tenant": { + "State": "Generated", + "Weight": 0.97 + } + }, + { + "tenant identification": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.75 } }, { - "area": { + "tenant identity": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 + "Weight": 0.75 } }, { - "district": { + "tenant identifier": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 + "Weight": 0.75 } }, { - "continent": { + "tenant credential": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 - } - } - ] - }, - "region.original_value": { - "Definition": { - "Binding": { - "ConceptualEntity": "Regions", - "ConceptualProperty": "OriginalValue" - } - }, - "State": "Generated", - "Terms": [ - { - "original value": { - "State": "Generated" - } - }, - { - "OriginalValue": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.99 - } - }, - { - "value": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "original assessment": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.5 + "Weight": 0.727 } }, { - "assessment": { + "occupant": { "Type": "Noun", "State": "Suggested", "Source": { @@ -19279,543 +19099,470 @@ cultureInfo en-US } }, { - "original worth": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.485 - } - }, - { - "original price": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.485 - } - }, - { - "original cost": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.485 - } - }, - { - "original charge": { + "renter": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.485 + "Weight": 0.491 } }, { - "original rate": { + "lodger": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.485 + "Weight": 0.491 } }, { - "worth": { + "boarder": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.491 } }, { - "charge": { + "leaseholder": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.491 } }, { - "original importance": { + "lessee": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.475 + "Weight": 0.491 } } ] }, - "region.region_id": { + "virtual_machine.kind": { "Definition": { "Binding": { - "ConceptualEntity": "Regions", - "ConceptualProperty": "RegionId" + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "kind" } }, "State": "Generated", "Terms": [ { - "region id": { + "kind": { "State": "Generated" } }, { - "RegionId": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.99 - } - }, - { - "region identification": { + "caring": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.476 } }, { - "region identity": { + "gentle": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.476 } }, { - "region identifier": { + "humanitarian": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.476 } }, { - "region credential": { + "variety": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.466 } }, { - "location id": { + "manner": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.667 + "Weight": 0.466 } }, { - "province id": { + "nature": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.6 + "Weight": 0.466 } }, { - "area id": { + "hue": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.582 + "Weight": 0.466 } }, { - "district id": { + "caste": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.582 + "Weight": 0.466 } }, { - "zone id": { + "genre": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.582 + "Weight": 0.466 } }, { - "continent id": { + "brand": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.582 + "Weight": 0.452 } } ] }, - "region.region_name": { + "virtual_machine.location": { "Definition": { "Binding": { - "ConceptualEntity": "Regions", - "ConceptualProperty": "RegionName" + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "location" } }, "State": "Generated", "Terms": [ { - "region name": { + "location": { "State": "Generated" } }, { - "RegionName": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.99 - } - }, - { - "region nickname": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 - } - }, - { - "region title": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 - } - }, - { - "region label": { + "locality": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.736 } }, { - "region tag": { + "placement": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.736 } }, { - "location name": { + "scene": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.667 + "Weight": 0.736 } }, { - "province name": { + "venue": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.6 + "Weight": 0.736 } }, { - "area name": { + "place": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.582 + "Weight": 0.714 } }, { - "district name": { + "position": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.582 + "Weight": 0.714 } }, { - "zone name": { + "site": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.582 + "Weight": 0.714 } }, { - "continent name": { + "spot": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.582 + "Weight": 0.714 } } ] }, - "virtual_machine": { + "virtual_machine.resource_group": { "Definition": { "Binding": { - "ConceptualEntity": "VirtualMachines" + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "resourceGroup" } }, "State": "Generated", "Terms": [ { - "virtual machine": { + "resource group": { "State": "Generated" } }, { - "VirtualMachines": { + "resourceGroup": { "Type": "Noun", "State": "Generated", "Weight": 0.99 } }, { - "machine": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "virtual mechanism": { + "resource category": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.5 + "Weight": 0.75 } }, { - "virtual engine": { + "resource organization": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.5 + "Weight": 0.75 } }, { - "virtual appliance": { + "resource bracket": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.5 + "Weight": 0.727 } }, { - "virtual apparatus": { + "resource class": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.5 + "Weight": 0.727 } }, { - "virtual contraption": { + "resource crew": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.5 + "Weight": 0.727 } }, { - "virtual device": { + "resource team": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.5 + "Weight": 0.727 + } + } + ] + }, + "virtual_machine.subscription_id": { + "Definition": { + "Binding": { + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "subscriptionId" + } + }, + "State": "Generated", + "Terms": [ + { + "subscription id": { + "State": "Generated" } }, { - "virtual contrivance": { + "subscriptionId": { + "Type": "Noun", + "State": "Generated", + "Weight": 0.99 + } + }, + { + "subscription identification": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.5 + "Weight": 0.75 } }, { - "mechanism": { + "subscription identity": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.75 } }, { - "engine": { + "subscription identifier": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.75 } }, { - "appliance": { + "subscription credential": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.727 } } ] }, - "virtual_machine.id": { + "virtual_machine.managed_by": { "Definition": { "Binding": { "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "id" + "ConceptualProperty": "managedBy" } }, "State": "Generated", - "Visibility": { - "Value": "Hidden" - }, "Terms": [ { - "id": { + "managed by": { "State": "Generated" } }, { - "identification": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.736 - } - }, - { - "credential": { + "managedBy": { "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.714 + "State": "Generated", + "Weight": 0.99 } } ] }, - "virtual_machine.name": { + "virtual_machine.sku": { "Definition": { "Binding": { "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "name" + "ConceptualProperty": "sku" } }, "State": "Generated", "Terms": [ { - "name": { + "sku": { "State": "Generated" } - }, - { - "title": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.714 - } } - ], - "NameType": "Name" + ] }, - "virtual_machine.type": { + "virtual_machine.plan": { "Definition": { "Binding": { "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "type" + "ConceptualProperty": "plan" } }, "State": "Generated", "Terms": [ { - "type": { + "plan": { "State": "Generated" } }, { - "genre": { + "proposal": { "Type": "Noun", "State": "Suggested", "Source": { @@ -19825,7 +19572,7 @@ cultureInfo en-US } }, { - "manner": { + "strategy": { "Type": "Noun", "State": "Suggested", "Source": { @@ -19835,7 +19582,7 @@ cultureInfo en-US } }, { - "variety": { + "agenda": { "Type": "Noun", "State": "Suggested", "Source": { @@ -19845,997 +19592,1083 @@ cultureInfo en-US } }, { - "brand": { + "arrangement": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 + "Weight": 0.736 } }, { - "style": { + "idea": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 + "Weight": 0.736 } }, { - "form": { + "layout": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 + "Weight": 0.736 } }, { - "grouping": { + "policy": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 - } - } - ] - }, - "virtual_machine.tenant_id": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "tenantId" - } - }, - "State": "Generated", - "Terms": [ - { - "tenant id": { - "State": "Generated" - } - }, - { - "tenantId": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.99 - } - }, - { - "tenant": { - "State": "Generated", - "Weight": 0.97 + "Weight": 0.736 } }, { - "tenant identification": { + "preparation": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.736 } }, { - "tenant identity": { + "blueprint": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.714 } }, { - "tenant identifier": { + "initiative": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.714 + } + } + ] + }, + "virtual_machine.provisioning_state": { + "Definition": { + "Binding": { + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "provisioningState" + } + }, + "State": "Generated", + "Terms": [ + { + "provisioning state": { + "State": "Generated" } }, { - "tenant credential": { + "provisioningState": { "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 + "State": "Generated", + "Weight": 0.99 } }, { - "occupant": { + "provisioning location": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.75 } }, { - "renter": { + "provisioning province": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.75 } }, { - "lodger": { + "provisioning territory": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.75 } }, { - "boarder": { + "provisioning nation": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.75 } }, { - "leaseholder": { + "provisioning condition": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.727 } }, { - "lessee": { + "provisioning country": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.727 } } ] }, - "virtual_machine.kind": { + "virtual_machine.time_created": { "Definition": { "Binding": { "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "kind" + "ConceptualProperty": "timeCreated" } }, "State": "Generated", "Terms": [ { - "kind": { + "time created": { "State": "Generated" } }, { - "caring": { + "timeCreated": { "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.476 + "State": "Generated", + "Weight": 0.99 } }, { - "gentle": { + "duration created": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.75 } }, { - "humanitarian": { + "interval created": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.75 } }, { - "variety": { + "moment created": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.466 + "Weight": 0.75 } }, { - "manner": { + "period created": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.466 + "Weight": 0.727 } }, { - "nature": { + "timetable created": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.466 + "Weight": 0.727 + } + } + ] + }, + "virtual_machine.networkInterfaces_properties_deleteOption": { + "Definition": { + "Binding": { + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "networkInterfaces.properties.deleteOption" + } + }, + "State": "Generated", + "Terms": [ + { + "networkInterfaces.properties.deleteOption": { + "State": "Generated" } }, { - "hue": { + "networkInterface.property.deleteOption": { "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.466 + "State": "Generated", + "Weight": 0.78 + } + } + ] + }, + "virtual_machine.network_interfaces_id": { + "Definition": { + "Binding": { + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "networkInterfaces.id" + } + }, + "State": "Generated", + "Terms": [ + { + "network interfaces id": { + "State": "Generated" } }, { - "caste": { + "network interface id": { "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.466 + "State": "Generated", + "Weight": 0.78 } }, { - "genre": { + "networkInterfaces.id": { "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.466 + "State": "Generated", + "Weight": 0.99 } }, { - "brand": { + "interfaces": { + "State": "Generated", + "Weight": 0.97 + } + }, + { + "interface": { "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.452 + "State": "Generated", + "Weight": 0.7566 } - } - ] - }, - "virtual_machine.location": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "location" - } - }, - "State": "Generated", - "Terms": [ + }, { - "location": { - "State": "Generated" + "network interfaces": { + "State": "Generated", + "Weight": 0.97 } }, { - "locality": { + "network interface": { + "Type": "Noun", + "State": "Generated", + "Weight": 0.7566 + } + }, + { + "interfaces id": { + "State": "Generated", + "Weight": 0.97 + } + }, + { + "interface id": { + "Type": "Noun", + "State": "Generated", + "Weight": 0.7566 + } + }, + { + "network interface identification": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.762 } }, { - "placement": { + "network interface identity": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.762 } }, { - "scene": { + "network interface identifier": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.762 } }, { - "venue": { + "interface identification": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.75 } }, { - "place": { + "interface identity": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 + "Weight": 0.75 } }, { - "position": { + "interface identifier": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 + "Weight": 0.75 } }, { - "site": { + "network interface credential": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 + "Weight": 0.739 } }, { - "spot": { + "interface credential": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 + "Weight": 0.727 } } ] }, - "virtual_machine.resource_group": { + "virtual_machine.osProfile_computerName": { "Definition": { "Binding": { "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "resourceGroup" + "ConceptualProperty": "osProfile.computerName" } }, "State": "Generated", "Terms": [ { - "resource group": { + "osProfile.computerName": { "State": "Generated" } - }, + } + ] + }, + "virtual_machine.osProfile_requireGuestProvisionSignal": { + "Definition": { + "Binding": { + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "osProfile.requireGuestProvisionSignal" + } + }, + "State": "Generated", + "Terms": [ { - "resourceGroup": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.99 + "osProfile.requireGuestProvisionSignal": { + "State": "Generated" } - }, + } + ] + }, + "virtual_machine.osProfile_allowExtensionOperation": { + "Definition": { + "Binding": { + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "osProfile.allowExtensionOperations" + } + }, + "State": "Generated", + "Terms": [ { - "resource category": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.75 + "osProfile.allowExtensionOperation": { + "State": "Generated" } - }, + } + ] + }, + "virtual_machine.osProfile_adminUsername": { + "Definition": { + "Binding": { + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "osProfile.adminUsername" + } + }, + "State": "Generated", + "Terms": [ { - "resource organization": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.75 + "osProfile.adminUsername": { + "State": "Generated" } - }, + } + ] + }, + "virtual_machine.osProfile_secret": { + "Definition": { + "Binding": { + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "osProfile.secrets" + } + }, + "State": "Generated", + "Terms": [ { - "resource bracket": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 + "osProfile.secret": { + "State": "Generated" } }, { - "resource class": { + "osprofile. enigma": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.458 } - }, + } + ] + }, + "virtual_machine.osProfile_linuxConfiguration": { + "Definition": { + "Binding": { + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "osProfile.linuxConfiguration" + } + }, + "State": "Generated", + "Terms": [ { - "resource crew": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 + "osProfile.linuxConfiguration": { + "State": "Generated" } - }, + } + ] + }, + "virtual_machine.osProfile_windowsConfiguration": { + "Definition": { + "Binding": { + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "osProfile.windowsConfiguration" + } + }, + "State": "Generated", + "Terms": [ { - "resource team": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 + "osProfile.windowsConfiguration": { + "State": "Generated" } } ] }, - "virtual_machine.subscription_id": { + "virtual_machine.storageProfile_imageReference_publisher": { "Definition": { "Binding": { "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "subscriptionId" + "ConceptualProperty": "storageProfile.imageReference.publisher" } }, "State": "Generated", "Terms": [ { - "subscription id": { + "storageProfile.imageReference.publisher": { "State": "Generated" } }, { - "subscriptionId": { + "storageprofile.imagereference. producer": { "Type": "Noun", - "State": "Generated", - "Weight": 0.99 + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.52 } }, { - "subscription identification": { + "storageprofile.imagereference. originator": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.52 } }, { - "subscription identity": { + "storageprofile.imagereference. commissioner": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.52 } }, { - "subscription identifier": { + "storageprofile.imagereference. editor": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.52 } }, { - "subscription credential": { + "storageprofile.imagereference. issuer": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.52 } } ] }, - "virtual_machine.managed_by": { + "virtual_machine.storage_profile_image_reference_sku": { "Definition": { "Binding": { "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "managedBy" + "ConceptualProperty": "storageProfile.imageReference.sku" } }, "State": "Generated", "Terms": [ { - "managed by": { + "storage profile image reference sku": { "State": "Generated" } }, { - "managedBy": { + "storageProfile.imageReference.sku": { "Type": "Noun", "State": "Generated", "Weight": 0.99 } - } - ] - }, - "virtual_machine.sku": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "sku" - } - }, - "State": "Generated", - "Terms": [ + }, { - "sku": { - "State": "Generated" + "reference sku": { + "State": "Generated", + "Weight": 0.97 + } + }, + { + "image reference sku": { + "State": "Generated", + "Weight": 0.97 + } + }, + { + "profile image reference sku": { + "State": "Generated", + "Weight": 0.97 } } ] }, - "virtual_machine.plan": { + "virtual_machine.storageProfile_imageReference_version": { "Definition": { "Binding": { "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "plan" + "ConceptualProperty": "storageProfile.imageReference.version" } }, "State": "Generated", "Terms": [ { - "plan": { + "storageProfile.imageReference.version": { "State": "Generated" } }, { - "proposal": { + "storageprofile.imagereference. variety": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.52 } }, { - "strategy": { + "storageprofile.imagereference. form": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.504 } }, { - "agenda": { + "storageprofile.imagereference. type": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.504 } }, { - "arrangement": { + "storageprofile.imagereference. kind": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.504 } }, { - "idea": { + "storageprofile.imagereference. sort": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.504 } }, { - "layout": { + "storageprofile.imagereference. style": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.504 } }, { - "policy": { + "storageprofile.imagereference. description": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.494 } }, { - "preparation": { + "storageprofile.imagereference. account": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.479 } }, { - "blueprint": { + "storageprofile.imagereference. report": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 + "Weight": 0.479 } }, { - "initiative": { + "storageprofile.imagereference. story": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 + "Weight": 0.479 } } ] }, - "virtual_machine.provisioning_state": { + "virtual_machine.storageProfile_imageReference_exactVersion": { "Definition": { "Binding": { "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "provisioningState" + "ConceptualProperty": "storageProfile.imageReference.exactVersion" } }, "State": "Generated", "Terms": [ { - "provisioning state": { + "storageProfile.imageReference.exactVersion": { "State": "Generated" } - }, - { - "provisioningState": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.99 - } - }, + } + ] + }, + "virtual_machine.storageProfile_imageReference_offer": { + "Definition": { + "Binding": { + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "storageProfile.imageReference.offer" + } + }, + "State": "Generated", + "Terms": [ { - "provisioning location": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.75 + "storageProfile.imageReference.offer": { + "State": "Generated" } }, { - "provisioning province": { + "storageprofile.imagereference. proposal": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.52 } }, { - "provisioning territory": { + "storageprofile.imagereference. suggestion": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.52 } }, { - "provisioning nation": { + "storageprofile.imagereference. agreement": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.52 } }, { - "provisioning condition": { + "storageprofile.imagereference. submission": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.52 } }, { - "provisioning country": { + "storageprofile.imagereference. bid": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 - } - } - ] - }, - "virtual_machine.time_created": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "timeCreated" - } - }, - "State": "Generated", - "Terms": [ - { - "time created": { - "State": "Generated" - } - }, - { - "timeCreated": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.99 + "Weight": 0.504 } }, { - "duration created": { + "storageprofile.imagereference. proposition": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.504 } }, { - "interval created": { + "storageprofile.imagereference. bargain": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.504 } }, { - "moment created": { + "storageprofile.imagereference. compromise": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.504 } }, { - "period created": { + "storageprofile.imagereference. deal": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.504 } }, { - "timetable created": { + "storageprofile.imagereference. motion": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 - } - } - ] - }, - "virtual_machine.networkInterfaces_properties_deleteOption": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "networkInterfaces.properties.deleteOption" - } - }, - "State": "Generated", - "Terms": [ - { - "networkInterfaces.properties.deleteOption": { - "State": "Generated" - } - }, - { - "networkInterface.property.deleteOption": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.78 + "Weight": 0.504 } } ] }, - "virtual_machine.network_interfaces_id": { + "virtual_machine.storage_profile_data_disks_name": { "Definition": { "Binding": { "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "networkInterfaces.id" + "ConceptualProperty": "storageProfile.dataDisks.name" } }, "State": "Generated", "Terms": [ { - "network interfaces id": { + "storage profile data disks name": { "State": "Generated" } }, { - "network interface id": { + "storage profile data disk name": { "Type": "Noun", "State": "Generated", "Weight": 0.78 } }, { - "networkInterfaces.id": { + "storageProfile.dataDisks.name": { "Type": "Noun", "State": "Generated", "Weight": 0.99 } }, { - "interfaces": { + "disks": { "State": "Generated", "Weight": 0.97 } }, { - "interface": { + "disk": { "Type": "Noun", "State": "Generated", "Weight": 0.7566 } }, { - "network interfaces": { + "data disks": { "State": "Generated", "Weight": 0.97 } }, { - "network interface": { + "data disk": { "Type": "Noun", "State": "Generated", "Weight": 0.7566 } }, { - "interfaces id": { + "profile data disks": { "State": "Generated", "Weight": 0.97 } }, { - "interface id": { + "profile data disk": { "Type": "Noun", "State": "Generated", "Weight": 0.7566 } }, { - "network interface identification": { + "storage profile data disks": { + "State": "Generated", + "Weight": 0.97 + } + }, + { + "storage profile data disk": { + "Type": "Noun", + "State": "Generated", + "Weight": 0.7566 + } + }, + { + "disks name": { + "State": "Generated", + "Weight": 0.97 + } + }, + { + "disk name": { + "Type": "Noun", + "State": "Generated", + "Weight": 0.7566 + } + }, + { + "data disks name": { + "State": "Generated", + "Weight": 0.97 + } + }, + { + "data disk name": { + "Type": "Noun", + "State": "Generated", + "Weight": 0.7566 + } + }, + { + "profile data disks name": { + "State": "Generated", + "Weight": 0.97 + } + }, + { + "profile data disk name": { + "Type": "Noun", + "State": "Generated", + "Weight": 0.7566 + } + }, + { + "storage profile data disk nickname": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.762 + "Weight": 0.757 } }, { - "network interface identity": { + "storage profile data disk title": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.762 + "Weight": 0.757 } }, { - "network interface identifier": { + "storage profile data disk label": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.762 + "Weight": 0.757 } }, { - "interface identification": { + "storage profile data disk tag": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.757 } }, { - "interface identity": { + "profile data disk nickname": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.748 } }, { - "interface identifier": { + "profile data disk title": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.748 } }, { - "network interface credential": { + "profile data disk label": { + "Type": "Noun", + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.748 + } + }, + { + "profile data disk tag": { + "Type": "Noun", + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.748 + } + }, + { + "data disk nickname": { "Type": "Noun", "State": "Suggested", "Source": { @@ -20845,3569 +20678,1355 @@ cultureInfo en-US } }, { - "interface credential": { + "data disk title": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.739 } } ] }, - "virtual_machine.osProfile_computerName": { + "virtual_machine.storageProfile_dataDisks_createOption": { "Definition": { "Binding": { "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "osProfile.computerName" + "ConceptualProperty": "storageProfile.dataDisks.createOption" } }, "State": "Generated", "Terms": [ { - "osProfile.computerName": { + "storageProfile.dataDisks.createOption": { "State": "Generated" } - } - ] - }, - "virtual_machine.osProfile_requireGuestProvisionSignal": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "osProfile.requireGuestProvisionSignal" - } - }, - "State": "Generated", - "Terms": [ + }, { - "osProfile.requireGuestProvisionSignal": { - "State": "Generated" + "storageProfile.dataDisk.createOption": { + "Type": "Noun", + "State": "Generated", + "Weight": 0.78 } } ] }, - "virtual_machine.osProfile_allowExtensionOperation": { + "virtual_machine.storageProfile_dataDisks_deleteOption": { "Definition": { "Binding": { "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "osProfile.allowExtensionOperations" + "ConceptualProperty": "storageProfile.dataDisks.deleteOption" } }, "State": "Generated", "Terms": [ { - "osProfile.allowExtensionOperation": { + "storageProfile.dataDisks.deleteOption": { "State": "Generated" } + }, + { + "storageProfile.dataDisk.deleteOption": { + "Type": "Noun", + "State": "Generated", + "Weight": 0.78 + } } ] }, - "virtual_machine.osProfile_adminUsername": { + "virtual_machine.storage_profile_data_disks_managed_disk_id": { "Definition": { "Binding": { "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "osProfile.adminUsername" + "ConceptualProperty": "storageProfile.dataDisks.managedDisk.id" } }, "State": "Generated", "Terms": [ { - "osProfile.adminUsername": { + "storage profile data disks managed disk id": { "State": "Generated" } + }, + { + "storage profile data disk managed disk id": { + "Type": "Noun", + "State": "Generated", + "Weight": 0.78 + } + }, + { + "storageProfile.dataDisks.managedDisk.id": { + "Type": "Noun", + "State": "Generated", + "Weight": 0.99 + } } ] }, - "virtual_machine.osProfile_secret": { + "virtual_machine.storageProfile_dataDisks_caching": { "Definition": { "Binding": { "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "osProfile.secrets" + "ConceptualProperty": "storageProfile.dataDisks.caching" } }, "State": "Generated", "Terms": [ { - "osProfile.secret": { + "storageProfile.dataDisks.caching": { "State": "Generated" } }, { - "osprofile. enigma": { + "storageProfile.dataDisk.caching": { "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.458 + "State": "Generated", + "Weight": 0.78 } } ] }, - "virtual_machine.osProfile_linuxConfiguration": { + "virtual_machine.storageProfile_dataDisks_toBeDetached": { "Definition": { "Binding": { "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "osProfile.linuxConfiguration" + "ConceptualProperty": "storageProfile.dataDisks.toBeDetached" } }, "State": "Generated", "Terms": [ { - "osProfile.linuxConfiguration": { + "storageProfile.dataDisks.toBeDetached": { "State": "Generated" } + }, + { + "storageProfile.dataDisk.toBeDetached": { + "Type": "Noun", + "State": "Generated", + "Weight": 0.78 + } } ] }, - "virtual_machine.osProfile_windowsConfiguration": { + "virtual_machine.storageProfile_dataDisks_writeAcceleratorEnabled": { "Definition": { "Binding": { "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "osProfile.windowsConfiguration" + "ConceptualProperty": "storageProfile.dataDisks.writeAcceleratorEnabled" } }, "State": "Generated", "Terms": [ { - "osProfile.windowsConfiguration": { + "storageProfile.dataDisks.writeAcceleratorEnabled": { "State": "Generated" } + }, + { + "storageProfile.dataDisk.writeAcceleratorEnabled": { + "Type": "Noun", + "State": "Generated", + "Weight": 0.78 + } } ] }, - "virtual_machine.storageProfile_imageReference_publisher": { + "virtual_machine.storage_profile_data_disks_lun": { "Definition": { "Binding": { "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "storageProfile.imageReference.publisher" + "ConceptualProperty": "storageProfile.dataDisks.lun" } }, "State": "Generated", "Terms": [ { - "storageProfile.imageReference.publisher": { + "storage profile data disks lun": { "State": "Generated" } }, { - "storageprofile.imagereference. producer": { + "storage profile data disk lun": { + "Type": "Noun", + "State": "Generated", + "Weight": 0.78 + } + }, + { + "storageProfile.dataDisks.lun": { + "Type": "Noun", + "State": "Generated", + "Weight": 0.99 + } + }, + { + "storage profile information disk lun": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.52 + "Weight": 0.624 } }, { - "storageprofile.imagereference. originator": { + "storage profile fact disk lun": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.52 + "Weight": 0.624 } }, { - "storageprofile.imagereference. commissioner": { + "storage profile info disk lun": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.52 + "Weight": 0.624 } }, { - "storageprofile.imagereference. editor": { + "storage profile statistic disk lun": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.52 + "Weight": 0.624 } }, { - "storageprofile.imagereference. issuer": { + "storage profile document disk lun": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.52 + "Weight": 0.605 + } + }, + { + "storage profile figure disk lun": { + "Type": "Noun", + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.605 + } + }, + { + "storage profile record disk lun": { + "Type": "Noun", + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.605 } } ] }, - "virtual_machine.storage_profile_image_reference_sku": { + "virtual_machine.storage_profile_os_disk_name": { "Definition": { "Binding": { "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "storageProfile.imageReference.sku" + "ConceptualProperty": "storageProfile.osDisk.name" } }, "State": "Generated", "Terms": [ { - "storage profile image reference sku": { + "storage profile os disk name": { "State": "Generated" } }, { - "storageProfile.imageReference.sku": { + "storageProfile.osDisk.name": { "Type": "Noun", "State": "Generated", "Weight": 0.99 } }, { - "reference sku": { + "os disk": { "State": "Generated", "Weight": 0.97 } }, { - "image reference sku": { + "profile os disk": { "State": "Generated", "Weight": 0.97 } }, { - "profile image reference sku": { + "storage profile os disk": { "State": "Generated", "Weight": 0.97 } - } - ] - }, - "virtual_machine.storageProfile_imageReference_version": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "storageProfile.imageReference.version" - } - }, - "State": "Generated", - "Terms": [ + }, { - "storageProfile.imageReference.version": { - "State": "Generated" + "os disk name": { + "State": "Generated", + "Weight": 0.97 } }, { - "storageprofile.imagereference. variety": { + "profile os disk name": { + "State": "Generated", + "Weight": 0.97 + } + }, + { + "storage profile os disk nickname": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.52 + "Weight": 0.757 } }, { - "storageprofile.imagereference. form": { + "storage profile os disk title": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.504 + "Weight": 0.757 } }, { - "storageprofile.imagereference. type": { + "storage profile os disk label": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.504 + "Weight": 0.757 } }, { - "storageprofile.imagereference. kind": { + "storage profile os disk tag": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.504 + "Weight": 0.757 } }, { - "storageprofile.imagereference. sort": { + "profile os disk nickname": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.504 + "Weight": 0.748 } }, { - "storageprofile.imagereference. style": { + "profile os disk title": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.504 + "Weight": 0.748 } }, { - "storageprofile.imagereference. description": { + "profile os disk label": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.494 + "Weight": 0.748 } }, { - "storageprofile.imagereference. account": { + "profile os disk tag": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.479 + "Weight": 0.748 } }, { - "storageprofile.imagereference. report": { + "os disk nickname": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.479 + "Weight": 0.739 } }, { - "storageprofile.imagereference. story": { + "os disk title": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.479 + "Weight": 0.739 } } ] }, - "virtual_machine.storageProfile_imageReference_exactVersion": { + "virtual_machine.storageProfile_osDisk_createOption": { "Definition": { "Binding": { "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "storageProfile.imageReference.exactVersion" + "ConceptualProperty": "storageProfile.osDisk.createOption" } }, "State": "Generated", "Terms": [ { - "storageProfile.imageReference.exactVersion": { + "storageProfile.osDisk.createOption": { "State": "Generated" } } ] }, - "virtual_machine.storageProfile_imageReference_offer": { + "virtual_machine.storageProfile_osDisk_osType": { "Definition": { "Binding": { "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "storageProfile.imageReference.offer" + "ConceptualProperty": "storageProfile.osDisk.osType" } }, "State": "Generated", "Terms": [ { - "storageProfile.imageReference.offer": { + "storageProfile.osDisk.osType": { "State": "Generated" } - }, + } + ] + }, + "virtual_machine.storageProfile_osDisk_deleteOption": { + "Definition": { + "Binding": { + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "storageProfile.osDisk.deleteOption" + } + }, + "State": "Generated", + "Terms": [ { - "storageprofile.imagereference. proposal": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.52 + "storageProfile.osDisk.deleteOption": { + "State": "Generated" } - }, + } + ] + }, + "virtual_machine.storage_profile_os_disk_managed_disk_id": { + "Definition": { + "Binding": { + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "storageProfile.osDisk.managedDisk.id" + } + }, + "State": "Generated", + "Terms": [ { - "storageprofile.imagereference. suggestion": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.52 + "storage profile os disk managed disk id": { + "State": "Generated" } }, { - "storageprofile.imagereference. agreement": { + "storageProfile.osDisk.managedDisk.id": { "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.52 + "State": "Generated", + "Weight": 0.99 } - }, + } + ] + }, + "virtual_machine.storageProfile_osDisk_caching": { + "Definition": { + "Binding": { + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "storageProfile.osDisk.caching" + } + }, + "State": "Generated", + "Terms": [ { - "storageprofile.imagereference. submission": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.52 + "storageProfile.osDisk.caching": { + "State": "Generated" } - }, + } + ] + }, + "virtual_machine.hardwareProfile_vmSize": { + "Definition": { + "Binding": { + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "hardwareProfile.vmSize" + } + }, + "State": "Generated", + "Terms": [ { - "storageprofile.imagereference. bid": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.504 + "hardwareProfile.vmSize": { + "State": "Generated" + } + } + ] + }, + "virtual_machine.vm_id": { + "Definition": { + "Binding": { + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "vmId" + } + }, + "State": "Generated", + "Terms": [ + { + "vm id": { + "State": "Generated" } }, { - "storageprofile.imagereference. proposition": { + "vmId": { "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.504 + "State": "Generated", + "Weight": 0.99 } }, { - "storageprofile.imagereference. bargain": { + "vm identification": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.504 + "Weight": 0.75 } }, { - "storageprofile.imagereference. compromise": { + "vm identity": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.504 + "Weight": 0.75 } }, { - "storageprofile.imagereference. deal": { + "vm identifier": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.504 + "Weight": 0.75 } }, { - "storageprofile.imagereference. motion": { + "vm credential": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.504 + "Weight": 0.727 } } ] }, - "virtual_machine.storage_profile_data_disks_name": { + "virtual_machine.diagnosticsProfile_bootDiagnostics_enabled": { "Definition": { "Binding": { "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "storageProfile.dataDisks.name" + "ConceptualProperty": "diagnosticsProfile.bootDiagnostics.enabled" } }, "State": "Generated", "Terms": [ { - "storage profile data disks name": { + "diagnosticsProfile.bootDiagnostics.enabled": { "State": "Generated" } }, { - "storage profile data disk name": { + "diagnosticsProfile.bootDiagnostic.enabled": { "Type": "Noun", "State": "Generated", "Weight": 0.78 } - }, - { - "storageProfile.dataDisks.name": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.99 - } - }, - { - "disks": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "disk": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.7566 - } - }, - { - "data disks": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "data disk": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.7566 - } - }, - { - "profile data disks": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "profile data disk": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.7566 - } - }, - { - "storage profile data disks": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "storage profile data disk": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.7566 - } - }, - { - "disks name": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "disk name": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.7566 - } - }, - { - "data disks name": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "data disk name": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.7566 - } - }, - { - "profile data disks name": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "profile data disk name": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.7566 - } - }, - { - "storage profile data disk nickname": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.757 - } - }, - { - "storage profile data disk title": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.757 - } - }, - { - "storage profile data disk label": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.757 - } - }, - { - "storage profile data disk tag": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.757 - } - }, - { - "profile data disk nickname": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.748 - } - }, - { - "profile data disk title": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.748 - } - }, - { - "profile data disk label": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.748 - } - }, - { - "profile data disk tag": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.748 - } - }, - { - "data disk nickname": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.739 - } - }, - { - "data disk title": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.739 - } - } - ] - }, - "virtual_machine.storageProfile_dataDisks_createOption": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "storageProfile.dataDisks.createOption" - } - }, - "State": "Generated", - "Terms": [ - { - "storageProfile.dataDisks.createOption": { - "State": "Generated" - } - }, - { - "storageProfile.dataDisk.createOption": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.78 - } - } - ] - }, - "virtual_machine.storageProfile_dataDisks_deleteOption": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "storageProfile.dataDisks.deleteOption" - } - }, - "State": "Generated", - "Terms": [ - { - "storageProfile.dataDisks.deleteOption": { - "State": "Generated" - } - }, - { - "storageProfile.dataDisk.deleteOption": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.78 - } - } - ] - }, - "virtual_machine.storage_profile_data_disks_managed_disk_id": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "storageProfile.dataDisks.managedDisk.id" - } - }, - "State": "Generated", - "Terms": [ - { - "storage profile data disks managed disk id": { - "State": "Generated" - } - }, - { - "storage profile data disk managed disk id": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.78 - } - }, - { - "storageProfile.dataDisks.managedDisk.id": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.99 - } - } - ] - }, - "virtual_machine.storageProfile_dataDisks_caching": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "storageProfile.dataDisks.caching" - } - }, - "State": "Generated", - "Terms": [ - { - "storageProfile.dataDisks.caching": { - "State": "Generated" - } - }, - { - "storageProfile.dataDisk.caching": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.78 - } - } - ] - }, - "virtual_machine.storageProfile_dataDisks_toBeDetached": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "storageProfile.dataDisks.toBeDetached" - } - }, - "State": "Generated", - "Terms": [ - { - "storageProfile.dataDisks.toBeDetached": { - "State": "Generated" - } - }, - { - "storageProfile.dataDisk.toBeDetached": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.78 - } - } - ] - }, - "virtual_machine.storageProfile_dataDisks_writeAcceleratorEnabled": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "storageProfile.dataDisks.writeAcceleratorEnabled" - } - }, - "State": "Generated", - "Terms": [ - { - "storageProfile.dataDisks.writeAcceleratorEnabled": { - "State": "Generated" - } - }, - { - "storageProfile.dataDisk.writeAcceleratorEnabled": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.78 - } - } - ] - }, - "virtual_machine.storage_profile_data_disks_lun": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "storageProfile.dataDisks.lun" - } - }, - "State": "Generated", - "Terms": [ - { - "storage profile data disks lun": { - "State": "Generated" - } - }, - { - "storage profile data disk lun": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.78 - } - }, - { - "storageProfile.dataDisks.lun": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.99 - } - }, - { - "storage profile information disk lun": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.624 - } - }, - { - "storage profile fact disk lun": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.624 - } - }, - { - "storage profile info disk lun": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.624 - } - }, - { - "storage profile statistic disk lun": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.624 - } - }, - { - "storage profile document disk lun": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.605 - } - }, - { - "storage profile figure disk lun": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.605 - } - }, - { - "storage profile record disk lun": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.605 - } - } - ] - }, - "virtual_machine.storage_profile_os_disk_name": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "storageProfile.osDisk.name" - } - }, - "State": "Generated", - "Terms": [ - { - "storage profile os disk name": { - "State": "Generated" - } - }, - { - "storageProfile.osDisk.name": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.99 - } - }, - { - "os disk": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "profile os disk": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "storage profile os disk": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "os disk name": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "profile os disk name": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "storage profile os disk nickname": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.757 - } - }, - { - "storage profile os disk title": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.757 - } - }, - { - "storage profile os disk label": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.757 - } - }, - { - "storage profile os disk tag": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.757 - } - }, - { - "profile os disk nickname": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.748 - } - }, - { - "profile os disk title": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.748 - } - }, - { - "profile os disk label": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.748 - } - }, - { - "profile os disk tag": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.748 - } - }, - { - "os disk nickname": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.739 - } - }, - { - "os disk title": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.739 - } - } - ] - }, - "virtual_machine.storageProfile_osDisk_createOption": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "storageProfile.osDisk.createOption" - } - }, - "State": "Generated", - "Terms": [ - { - "storageProfile.osDisk.createOption": { - "State": "Generated" - } - } - ] - }, - "virtual_machine.storageProfile_osDisk_osType": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "storageProfile.osDisk.osType" - } - }, - "State": "Generated", - "Terms": [ - { - "storageProfile.osDisk.osType": { - "State": "Generated" - } - } - ] - }, - "virtual_machine.storageProfile_osDisk_deleteOption": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "storageProfile.osDisk.deleteOption" - } - }, - "State": "Generated", - "Terms": [ - { - "storageProfile.osDisk.deleteOption": { - "State": "Generated" - } - } - ] - }, - "virtual_machine.storage_profile_os_disk_managed_disk_id": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "storageProfile.osDisk.managedDisk.id" - } - }, - "State": "Generated", - "Terms": [ - { - "storage profile os disk managed disk id": { - "State": "Generated" - } - }, - { - "storageProfile.osDisk.managedDisk.id": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.99 - } - } - ] - }, - "virtual_machine.storageProfile_osDisk_caching": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "storageProfile.osDisk.caching" - } - }, - "State": "Generated", - "Terms": [ - { - "storageProfile.osDisk.caching": { - "State": "Generated" - } - } - ] - }, - "virtual_machine.hardwareProfile_vmSize": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "hardwareProfile.vmSize" - } - }, - "State": "Generated", - "Terms": [ - { - "hardwareProfile.vmSize": { - "State": "Generated" - } - } - ] - }, - "virtual_machine.vm_id": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "vmId" - } - }, - "State": "Generated", - "Terms": [ - { - "vm id": { - "State": "Generated" - } - }, - { - "vmId": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.99 - } - }, - { - "vm identification": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.75 - } - }, - { - "vm identity": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.75 - } - }, - { - "vm identifier": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.75 - } - }, - { - "vm credential": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 - } - } - ] - }, - "virtual_machine.diagnosticsProfile_bootDiagnostics_enabled": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "diagnosticsProfile.bootDiagnostics.enabled" - } - }, - "State": "Generated", - "Terms": [ - { - "diagnosticsProfile.bootDiagnostics.enabled": { - "State": "Generated" - } - }, - { - "diagnosticsProfile.bootDiagnostic.enabled": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.78 - } - } - ] - }, - "virtual_machine.diagnosticsProfile_bootDiagnostics_storageUri": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "diagnosticsProfile.bootDiagnostics.storageUri" - } - }, - "State": "Generated", - "Terms": [ - { - "diagnosticsProfile.bootDiagnostics.storageUri": { - "State": "Generated" - } - }, - { - "diagnosticsProfile.bootDiagnostic.storageUri": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.78 - } - } - ] - }, - "virtual_machine.powerState_displayStatus": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "powerState.displayStatus" - } - }, - "State": "Generated", - "Terms": [ - { - "powerState.displayStatus": { - "State": "Generated" - } - } - ] - }, - "virtual_machine.license_type": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "licenseType" - } - }, - "State": "Generated", - "Terms": [ - { - "license type": { - "State": "Generated" - } - }, - { - "licenseType": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.99 - } - }, - { - "license category": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.75 - } - }, - { - "license genre": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.75 - } - }, - { - "license manner": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.75 - } - }, - { - "license variety": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.75 - } - }, - { - "license brand": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 - } - }, - { - "license class": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 - } - }, - { - "license kind": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 - } - }, - { - "license style": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 - } - }, - { - "license form": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 - } - }, - { - "license grouping": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 - } - } - ] - }, - "virtual_machine.tag": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "tags" - } - }, - "State": "Generated", - "Terms": [ - { - "tag": { - "State": "Generated" - } - }, - { - "device": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.491 - } - }, - { - "ticket": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.476 - } - }, - { - "tab": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.476 - } - }, - { - "docket": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.476 - } - }, - { - "chip": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.476 - } - }, - { - "mark": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.476 - } - } - ] - }, - "virtual_machine.identity": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "identity" - } - }, - "State": "Generated", - "Terms": [ - { - "identity": { - "State": "Generated" - } - }, - { - "individuality": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.491 - } - }, - { - "uniqueness": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.491 - } - }, - { - "distinctiveness": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.491 - } - }, - { - "personality": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.491 - } - }, - { - "self": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.476 - } - }, - { - "character": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.476 - } - } - ] - }, - "virtual_machine.zone": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "zones" - } - }, - "State": "Generated", - "Terms": [ - { - "zone": { - "State": "Generated" - } - }, - { - "precinct": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.491 - } - }, - { - "district": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.476 - } - }, - { - "sector": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.476 - } - }, - { - "neighborhood": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.476 - } - }, - { - "area": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.476 - } - } - ] - }, - "virtual_machine.extended_location": { - "Definition": { - "Binding": { - "ConceptualEntity": "VirtualMachines", - "ConceptualProperty": "extendedLocation" - } - }, - "State": "Generated", - "Terms": [ - { - "extended location": { - "State": "Generated" - } - }, - { - "extendedLocation": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.99 - } - }, - { - "extended locality": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.75 - } - }, - { - "extended placement": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.75 - } - }, - { - "extended scene": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.75 - } - }, - { - "extended venue": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.75 - } - }, - { - "extended address": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 - } - }, - { - "extended place": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 - } - }, - { - "extended position": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 - } - }, - { - "extended setting": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 - } - }, - { - "extended site": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 - } - }, - { - "extended spot": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 - } - } - ] - }, - "disk": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks" - } - }, - "State": "Generated", - "Terms": [ - { - "disk": { - "State": "Generated" - } - }, - { - "diskette": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.491 - } - }, - { - "CD": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.491 - } - }, - { - "CD-ROM": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.491 - } - }, - { - "CD/ROM": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.491 - } - }, - { - "floppy": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.476 - } - }, - { - "album": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.466 - } - }, - { - "discus": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.466 - } - }, - { - "recording": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.452 - } - }, - { - "round": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.452 - } - }, - { - "circle": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.452 - } - } - ] - }, - "disk.id": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "id" - } - }, - "State": "Generated", - "Terms": [ - { - "id": { - "State": "Generated" - } - }, - { - "identification": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.736 - } - }, - { - "credential": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.714 - } - } - ], - "NameType": "Identifier" - }, - "disk.name": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "name" - } - }, - "State": "Generated", - "Terms": [ - { - "name": { - "State": "Generated" - } - }, - { - "title": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.714 - } - } - ], - "NameType": "Name" - }, - "disk.type": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "type" - } - }, - "State": "Generated", - "Terms": [ - { - "type": { - "State": "Generated" - } - }, - { - "genre": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.736 - } - }, - { - "manner": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.736 - } - }, - { - "variety": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.736 - } - }, - { - "brand": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.714 - } - }, - { - "style": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.714 - } - }, - { - "form": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.714 - } - }, - { - "grouping": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.714 - } - } - ] - }, - "disk.tenant_id": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "tenantId" - } - }, - "State": "Generated", - "Terms": [ - { - "tenant id": { - "State": "Generated" - } - }, - { - "tenantId": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.99 - } - }, - { - "tenant": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "tenant identification": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.75 - } - }, - { - "tenant identity": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.75 - } - }, - { - "tenant identifier": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.75 - } - }, - { - "tenant credential": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 - } - }, - { - "occupant": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.491 - } - }, - { - "renter": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.491 - } - }, - { - "lodger": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.491 - } - }, - { - "boarder": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.491 - } - }, - { - "leaseholder": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.491 - } - }, - { - "lessee": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.491 - } - } - ] - }, - "disk.kind": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "kind" - } - }, - "State": "Generated", - "Terms": [ - { - "kind": { - "State": "Generated" - } - }, - { - "caring": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.476 - } - }, - { - "gentle": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.476 - } - }, - { - "humanitarian": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.476 - } - }, - { - "variety": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.466 - } - }, - { - "manner": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.466 - } - }, - { - "nature": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.466 - } - }, - { - "hue": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.466 - } - }, - { - "caste": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.466 - } - }, - { - "genre": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.466 - } - }, - { - "brand": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.452 - } - } - ] - }, - "disk.location": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "location" - } - }, - "State": "Generated", - "Terms": [ - { - "location": { - "State": "Generated" - } - }, - { - "locality": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.736 - } - }, - { - "placement": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.736 - } - }, - { - "scene": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.736 - } - }, - { - "venue": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.736 - } - }, - { - "place": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.714 - } - }, - { - "position": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.714 - } - }, - { - "site": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.714 - } - }, - { - "spot": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.714 - } - } - ] - }, - "disk.resource_group": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "resourceGroup" - } - }, - "State": "Generated", - "Terms": [ - { - "resource group": { - "State": "Generated" - } - }, - { - "resourceGroup": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.99 - } - }, - { - "resource category": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.75 - } - }, - { - "resource organization": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.75 - } - }, - { - "resource bracket": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 - } - }, - { - "resource class": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 - } - }, - { - "resource crew": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 - } - }, - { - "resource team": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 - } - } - ] - }, - "disk.subscription_id": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "subscriptionId" - } - }, - "State": "Generated", - "Terms": [ - { - "subscription id": { - "State": "Generated" - } - }, - { - "subscriptionId": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.99 - } - }, - { - "subscription identification": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.75 - } - }, - { - "subscription identity": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.75 - } - }, - { - "subscription identifier": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.75 - } - }, - { - "subscription credential": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 - } } ] }, - "disk.managed_by": { + "virtual_machine.diagnosticsProfile_bootDiagnostics_storageUri": { "Definition": { "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "managedBy" + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "diagnosticsProfile.bootDiagnostics.storageUri" } }, "State": "Generated", - "Visibility": { - "Value": "Hidden" - }, "Terms": [ { - "managed by": { + "diagnosticsProfile.bootDiagnostics.storageUri": { "State": "Generated" } }, { - "managedBy": { + "diagnosticsProfile.bootDiagnostic.storageUri": { "Type": "Noun", "State": "Generated", - "Weight": 0.99 + "Weight": 0.78 } } ] }, - "disk.sku_name": { + "virtual_machine.powerState_displayStatus": { "Definition": { "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "sku.name" + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "powerState.displayStatus" } }, "State": "Generated", "Terms": [ { - "sku name": { + "powerState.displayStatus": { "State": "Generated" } - }, + } + ] + }, + "virtual_machine.license_type": { + "Definition": { + "Binding": { + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "licenseType" + } + }, + "State": "Generated", + "Terms": [ { - "sku.name": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.99 + "license type": { + "State": "Generated" } }, { - "sku nickname": { + "licenseType": { "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.727 + "State": "Generated", + "Weight": 0.99 } }, { - "sku title": { + "license category": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.75 } }, { - "sku label": { + "license genre": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.75 } }, { - "sku tag": { + "license manner": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 - } - } - ] - }, - "disk.sku_tier": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "sku.tier" - } - }, - "State": "Generated", - "Terms": [ - { - "sku.tier": { - "State": "Generated" + "Weight": 0.75 } }, { - "sku. row": { + "license variety": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.492 + "Weight": 0.75 } }, { - "sku. level": { + "license brand": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.492 + "Weight": 0.727 } }, { - "sku. layer": { + "license class": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.492 + "Weight": 0.727 } }, { - "sku. stage": { + "license kind": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.492 + "Weight": 0.727 } }, { - "sku. rank": { + "license style": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.492 + "Weight": 0.727 } }, { - "sku. step": { + "license form": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.492 + "Weight": 0.727 } }, { - "sku. story": { + "license grouping": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.492 + "Weight": 0.727 } } ] }, - "disk.plan": { + "virtual_machine.tag": { "Definition": { "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "plan" + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "tags" } }, "State": "Generated", "Terms": [ { - "plan": { + "tag": { "State": "Generated" } }, { - "proposal": { + "device": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.491 } }, { - "strategy": { + "ticket": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.476 } }, { - "agenda": { + "tab": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.476 } }, { - "arrangement": { + "docket": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.476 } }, { - "idea": { + "chip": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.476 } }, { - "layout": { + "mark": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.476 + } + } + ] + }, + "virtual_machine.identity": { + "Definition": { + "Binding": { + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "identity" + } + }, + "State": "Generated", + "Terms": [ + { + "identity": { + "State": "Generated" } }, { - "policy": { + "individuality": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.491 } }, { - "preparation": { + "uniqueness": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.736 + "Weight": 0.491 } }, { - "blueprint": { + "distinctiveness": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 + "Weight": 0.491 } }, { - "initiative": { + "personality": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.714 - } - } - ] - }, - "disk.properties_provisioningState": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "properties.provisioningState" - } - }, - "State": "Generated", - "Terms": [ - { - "properties.provisioningState": { - "State": "Generated" - } - }, - { - "property.provisioningState": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.78 - } - } - ] - }, - "disk.properties_publicNetworkAccess": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "properties.publicNetworkAccess" - } - }, - "State": "Generated", - "Terms": [ - { - "properties.publicNetworkAccess": { - "State": "Generated" - } - }, - { - "property.publicNetworkAccess": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.78 - } - } - ] - }, - "disk.properties_encryption": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "properties.encryption" - } - }, - "State": "Generated", - "Terms": [ - { - "properties.encryption": { - "State": "Generated" + "Weight": 0.491 } }, { - "property.encryption": { + "self": { "Type": "Noun", - "State": "Generated", - "Weight": 0.78 - } - } - ] - }, - "disk.properties_networkAccessPolicy": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "properties.networkAccessPolicy" - } - }, - "State": "Generated", - "Terms": [ - { - "properties.networkAccessPolicy": { - "State": "Generated" + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.476 } }, { - "property.networkAccessPolicy": { + "character": { "Type": "Noun", - "State": "Generated", - "Weight": 0.78 + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.476 } } ] }, - "disk.properties_timeCreated": { + "virtual_machine.zone": { "Definition": { "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "properties.timeCreated" + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "zones" } }, "State": "Generated", "Terms": [ { - "properties.timeCreated": { + "zone": { "State": "Generated" } }, { - "property.timeCreated": { + "precinct": { "Type": "Noun", - "State": "Generated", - "Weight": 0.78 - } - } - ] - }, - "disk.properties_diskSizeGB": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "properties.diskSizeGB" - } - }, - "State": "Generated", - "Terms": [ - { - "properties.diskSizeGB": { - "State": "Generated" + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.491 } }, { - "property.diskSizeGB": { + "district": { "Type": "Noun", - "State": "Generated", - "Weight": 0.78 - } - } - ] - }, - "disk.properties_hyperVGeneration": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "properties.hyperVGeneration" - } - }, - "State": "Generated", - "Terms": [ - { - "properties.hyperVGeneration": { - "State": "Generated" + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.476 } }, { - "property.hyperVGeneration": { + "sector": { "Type": "Noun", - "State": "Generated", - "Weight": 0.78 - } - } - ] - }, - "disk.properties_diskSizeByte": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "properties.diskSizeBytes" - } - }, - "State": "Generated", - "Terms": [ - { - "properties.diskSizeByte": { - "State": "Generated" + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.476 } }, { - "property.diskSizeByte": { + "neighborhood": { "Type": "Noun", - "State": "Generated", - "Weight": 0.78 - } - } - ] - }, - "disk.properties_creationData_createOption": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "properties.creationData.createOption" - } - }, - "State": "Generated", - "Terms": [ - { - "properties.creationData.createOption": { - "State": "Generated" + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.476 } }, { - "property.creationData.createOption": { + "area": { "Type": "Noun", - "State": "Generated", - "Weight": 0.78 + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.476 } } ] }, - "disk.properties_creation_data_image_reference_id": { + "virtual_machine.extended_location": { "Definition": { "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "properties.creationData.imageReference.id" + "ConceptualEntity": "VirtualMachines", + "ConceptualProperty": "extendedLocation" } }, "State": "Generated", "Terms": [ { - "properties creation data image reference id": { + "extended location": { "State": "Generated" } }, { - "property creation data image reference id": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.78 - } - }, - { - "properties.creationData.imageReference.id": { + "extendedLocation": { "Type": "Noun", "State": "Generated", "Weight": 0.99 } }, { - "reference": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "image reference": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "data image reference": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "creation data image reference": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "properties creation data image reference": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "property creation data image reference": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.7566 - } - }, - { - "reference id": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "image reference id": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "data image reference id": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "creation data image reference id": { - "State": "Generated", - "Weight": 0.97 - } - }, - { - "creation data image reference identification": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.78 - } - }, - { - "creation data image reference identity": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.78 - } - }, - { - "creation data image reference identifier": { - "Type": "Noun", - "State": "Suggested", - "Source": { - "Agent": "Thesaurus" - }, - "Weight": 0.78 - } - }, - { - "data image reference identification": { + "extended locality": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.771 + "Weight": 0.75 } }, { - "data image reference identity": { + "extended placement": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.771 + "Weight": 0.75 } }, { - "data image reference identifier": { + "extended scene": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.771 + "Weight": 0.75 } }, { - "image reference identification": { + "extended venue": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.762 + "Weight": 0.75 } }, { - "image reference identity": { + "extended address": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.762 + "Weight": 0.727 } }, { - "image reference identifier": { + "extended place": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.762 + "Weight": 0.727 } }, { - "creation data image reference credential": { + "extended position": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.757 - } - } - ] - }, - "disk.properties_osType": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "properties.osType" - } - }, - "State": "Generated", - "Terms": [ - { - "properties.osType": { - "State": "Generated" - } - }, - { - "property.osType": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.78 - } - } - ] - }, - "disk.properties_LastOwnershipUpdateTime": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "properties.LastOwnershipUpdateTime" - } - }, - "State": "Generated", - "Terms": [ - { - "properties.LastOwnershipUpdateTime": { - "State": "Generated" - } - }, - { - "property.LastOwnershipUpdateTime": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.78 - } - } - ] - }, - "disk.properties_diskState": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "properties.diskState" - } - }, - "State": "Generated", - "Terms": [ - { - "properties.diskState": { - "State": "Generated" + "Weight": 0.727 } }, { - "property.diskState": { + "extended setting": { "Type": "Noun", - "State": "Generated", - "Weight": 0.78 - } - } - ] - }, - "disk.properties_uniqueId": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "properties.uniqueId" - } - }, - "State": "Generated", - "Terms": [ - { - "properties.uniqueId": { - "State": "Generated" + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.727 } }, { - "property.uniqueId": { + "extended site": { "Type": "Noun", - "State": "Generated", - "Weight": 0.78 - } - } - ] - }, - "disk.properties_diskMBpsReadWrite": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "properties.diskMBpsReadWrite" - } - }, - "State": "Generated", - "Terms": [ - { - "properties.diskMBpsReadWrite": { - "State": "Generated" + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.727 } }, { - "property.diskMBpsReadWrite": { + "extended spot": { "Type": "Noun", - "State": "Generated", - "Weight": 0.78 + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.727 } } ] }, - "disk.properties_diskIOPSReadWrite": { + "disk": { "Definition": { "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "properties.diskIOPSReadWrite" + "ConceptualEntity": "Disks" } }, "State": "Generated", "Terms": [ { - "properties.diskIOPSReadWrite": { + "disk": { "State": "Generated" } }, { - "property.diskIOPSReadWrite": { + "diskette": { "Type": "Noun", - "State": "Generated", - "Weight": 0.78 + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.491 } - } - ] - }, - "disk.properties_tier": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "properties.tier" - } - }, - "State": "Generated", - "Terms": [ + }, { - "properties.tier": { - "State": "Generated" + "CD": { + "Type": "Noun", + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.491 } }, { - "property.tier": { + "CD-ROM": { "Type": "Noun", - "State": "Generated", - "Weight": 0.78 + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.491 } }, { - "property. row": { + "CD/ROM": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.492 + "Weight": 0.491 } }, { - "property. level": { + "floppy": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.492 + "Weight": 0.476 } }, { - "property. layer": { + "album": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.492 + "Weight": 0.466 } }, { - "property. stage": { + "discus": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.492 + "Weight": 0.466 } }, { - "property. rank": { + "recording": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.492 + "Weight": 0.452 } }, { - "property. step": { + "round": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.492 + "Weight": 0.452 } }, { - "property. story": { + "circle": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.492 + "Weight": 0.452 } } ] }, - "disk.tag": { + "disk.id": { "Definition": { "Binding": { "ConceptualEntity": "Disks", - "ConceptualProperty": "tags" + "ConceptualProperty": "id" } }, "State": "Generated", "Terms": [ { - "tag": { + "id": { "State": "Generated" } }, { - "device": { + "identification": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.736 } }, { - "ticket": { + "credential": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.714 + } + } + ], + "NameType": "Identifier" + }, + "disk.name": { + "Definition": { + "Binding": { + "ConceptualEntity": "Disks", + "ConceptualProperty": "name" + } + }, + "State": "Generated", + "Terms": [ + { + "name": { + "State": "Generated" } }, { - "tab": { + "title": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.714 + } + } + ], + "NameType": "Name" + }, + "disk.tenant_id": { + "Definition": { + "Binding": { + "ConceptualEntity": "Disks", + "ConceptualProperty": "tenantId" + } + }, + "State": "Generated", + "Terms": [ + { + "tenant id": { + "State": "Generated" } }, { - "docket": { + "tenantId": { + "Type": "Noun", + "State": "Generated", + "Weight": 0.99 + } + }, + { + "tenant": { + "State": "Generated", + "Weight": 0.97 + } + }, + { + "tenant identification": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.75 } }, { - "chip": { + "tenant identity": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.75 } }, { - "mark": { + "tenant identifier": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.75 } - } - ] - }, - "disk.identity": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "identity" - } - }, - "State": "Generated", - "Terms": [ + }, { - "identity": { - "State": "Generated" + "tenant credential": { + "Type": "Noun", + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.727 } }, { - "individuality": { + "occupant": { "Type": "Noun", "State": "Suggested", "Source": { @@ -24417,7 +22036,7 @@ cultureInfo en-US } }, { - "uniqueness": { + "renter": { "Type": "Noun", "State": "Suggested", "Source": { @@ -24427,7 +22046,7 @@ cultureInfo en-US } }, { - "distinctiveness": { + "lodger": { "Type": "Noun", "State": "Suggested", "Source": { @@ -24437,7 +22056,7 @@ cultureInfo en-US } }, { - "personality": { + "boarder": { "Type": "Noun", "State": "Suggested", "Source": { @@ -24447,116 +22066,146 @@ cultureInfo en-US } }, { - "self": { + "leaseholder": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.491 } }, { - "character": { + "lessee": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.491 } } ] }, - "disk.zone": { + "disk.location": { "Definition": { "Binding": { "ConceptualEntity": "Disks", - "ConceptualProperty": "zones" + "ConceptualProperty": "location" } }, "State": "Generated", "Terms": [ { - "zone": { + "location": { "State": "Generated" } }, { - "precinct": { + "locality": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.491 + "Weight": 0.736 } }, { - "district": { + "placement": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.736 } }, { - "sector": { + "scene": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.736 } }, { - "neighborhood": { + "venue": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.736 } }, { - "area": { + "place": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.476 + "Weight": 0.714 + } + }, + { + "position": { + "Type": "Noun", + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.714 + } + }, + { + "site": { + "Type": "Noun", + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.714 + } + }, + { + "spot": { + "Type": "Noun", + "State": "Suggested", + "Source": { + "Agent": "Thesaurus" + }, + "Weight": 0.714 } } ] }, - "disk.extended_location": { + "disk.resource_group": { "Definition": { "Binding": { "ConceptualEntity": "Disks", - "ConceptualProperty": "extendedLocation" + "ConceptualProperty": "resourceGroup" } }, "State": "Generated", "Terms": [ { - "extended location": { + "resource group": { "State": "Generated" } }, { - "extendedLocation": { + "resourceGroup": { "Type": "Noun", "State": "Generated", "Weight": 0.99 } }, { - "extended locality": { + "resource category": { "Type": "Noun", "State": "Suggested", "Source": { @@ -24566,7 +22215,7 @@ cultureInfo en-US } }, { - "extended placement": { + "resource organization": { "Type": "Noun", "State": "Suggested", "Source": { @@ -24576,27 +22225,27 @@ cultureInfo en-US } }, { - "extended scene": { + "resource bracket": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.727 } }, { - "extended venue": { + "resource class": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.75 + "Weight": 0.727 } }, { - "extended address": { + "resource crew": { "Type": "Noun", "State": "Suggested", "Source": { @@ -24606,7 +22255,7 @@ cultureInfo en-US } }, { - "extended place": { + "resource team": { "Type": "Noun", "State": "Suggested", "Source": { @@ -24614,39 +22263,62 @@ cultureInfo en-US }, "Weight": 0.727 } + } + ] + }, + "disk.subscription_id": { + "Definition": { + "Binding": { + "ConceptualEntity": "Disks", + "ConceptualProperty": "subscriptionId" + } + }, + "State": "Generated", + "Terms": [ + { + "subscription id": { + "State": "Generated" + } }, { - "extended position": { + "subscriptionId": { + "Type": "Noun", + "State": "Generated", + "Weight": 0.99 + } + }, + { + "subscription identification": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.75 } }, { - "extended setting": { + "subscription identity": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.75 } }, { - "extended site": { + "subscription identifier": { "Type": "Noun", "State": "Suggested", "Source": { "Agent": "Thesaurus" }, - "Weight": 0.727 + "Weight": 0.75 } }, { - "extended spot": { + "subscription credential": { "Type": "Noun", "State": "Suggested", "Source": { @@ -24657,6 +22329,32 @@ cultureInfo en-US } ] }, + "disk.managed_by": { + "Definition": { + "Binding": { + "ConceptualEntity": "Disks", + "ConceptualProperty": "managedBy" + } + }, + "State": "Generated", + "Visibility": { + "Value": "Hidden" + }, + "Terms": [ + { + "managed by": { + "State": "Generated" + } + }, + { + "managedBy": { + "Type": "Noun", + "State": "Generated", + "Weight": 0.99 + } + } + ] + }, "disk.disk_type": { "Definition": { "Binding": { @@ -24780,35 +22478,6 @@ cultureInfo en-US } ] }, - "disk.parent_VM": { - "Definition": { - "Binding": { - "ConceptualEntity": "Disks", - "ConceptualProperty": "parentVM" - } - }, - "State": "Generated", - "Terms": [ - { - "parent VM": { - "State": "Generated" - } - }, - { - "parentVM": { - "Type": "Noun", - "State": "Generated", - "Weight": 0.99 - } - }, - { - "VM": { - "State": "Generated", - "Weight": 0.97 - } - } - ] - }, "network_interface": { "Definition": { "Binding": { @@ -45793,7 +43462,7 @@ cultureInfo en-US "State": "Generated", "Terms": [ { - "Flexibility group": { + "Normalized group": { "State": "Suggested", "Source": { "Type": "External", @@ -45928,7 +43597,7 @@ cultureInfo en-US "State": "Generated", "Terms": [ { - "Effective Savings Rate (ESR)": { + "Effective Savings Rate": { "State": "Suggested", "Source": { "Type": "External", @@ -45938,7 +43607,7 @@ cultureInfo en-US } }, { - "Effective Savings Rate": { + "Effective Savings Rate (ESR)": { "State": "Suggested", "Source": { "Type": "External", @@ -46021,6 +43690,142 @@ cultureInfo en-US } } ] + }, + "costs.x_skulicensequantitymeasure": { + "Definition": { + "Binding": { + "ConceptualEntity": "Costs", + "ConceptualProperty": "x_SkuLicenseQuantityMeasure" + } + }, + "State": "Generated", + "Terms": [ + { + "Hybrid Benefit CPUs": { + "State": "Suggested", + "Source": { + "Type": "External", + "Agent": "PowerBI.VisualColumnRename" + }, + "Weight": 0.9 + } + }, + { + "AHB CPUs": { + "State": "Suggested", + "Source": { + "Type": "External", + "Agent": "PowerBI.VisualColumnRename" + }, + "Weight": 0.9 + } + } + ] + }, + "costs.x_skulicensequantity": { + "Definition": { + "Binding": { + "ConceptualEntity": "Costs", + "ConceptualProperty": "x_SkuLicenseQuantity" + } + }, + "State": "Generated" + }, + "costs.x_skucorecountmeasure": { + "Definition": { + "Binding": { + "ConceptualEntity": "Costs", + "ConceptualProperty": "x_SkuCoreCountMeasure" + } + }, + "State": "Generated", + "Terms": [ + { + "vCPUs": { + "State": "Suggested", + "Source": { + "Type": "External", + "Agent": "PowerBI.VisualColumnRename" + }, + "Weight": 0.9 + } + } + ] + }, + "disks.sku_name": { + "Definition": { + "Binding": { + "ConceptualEntity": "Disks", + "ConceptualProperty": "sku.name" + } + }, + "State": "Generated" + }, + "disks.properties_disksizegb": { + "Definition": { + "Binding": { + "ConceptualEntity": "Disks", + "ConceptualProperty": "properties.diskSizeGB" + } + }, + "State": "Generated" + }, + "disks.properties_diskstate": { + "Definition": { + "Binding": { + "ConceptualEntity": "Disks", + "ConceptualProperty": "properties.diskState" + } + }, + "State": "Generated" + }, + "disks.skuname": { + "Definition": { + "Binding": { + "ConceptualEntity": "Disks", + "ConceptualProperty": "skuName" + } + }, + "State": "Generated" + }, + "disks.diskstate": { + "Definition": { + "Binding": { + "ConceptualEntity": "Disks", + "ConceptualProperty": "diskState" + } + }, + "State": "Generated" + }, + "disks.skutier": { + "Definition": { + "Binding": { + "ConceptualEntity": "Disks", + "ConceptualProperty": "skuTier" + } + }, + "State": "Generated" + }, + "reservationrecommendations.x_breakevendate": { + "Definition": { + "Binding": { + "ConceptualEntity": "ReservationRecommendations", + "ConceptualProperty": "x_BreakEvenDate" + } + }, + "State": "Generated", + "Terms": [ + { + "Target": { + "State": "Suggested", + "Source": { + "Type": "External", + "Agent": "PowerBI.VisualColumnRename" + }, + "Weight": 0.9 + } + } + ] } }, "Relationships": { diff --git a/src/power-bi/kql/Shared.Dataset/definition/expressions.tmdl b/src/power-bi/kql/Shared.Dataset/definition/expressions.tmdl index 622736108..f538609ac 100644 --- a/src/power-bi/kql/Shared.Dataset/definition/expressions.tmdl +++ b/src/power-bi/kql/Shared.Dataset/definition/expressions.tmdl @@ -18,34 +18,6 @@ expression '▶️ START HERE' = ``` else if (ClusterUrlSegmentCount = 1 or ClusterUrlSegmentCount = 3) then {"✔️ Specified", "Will use cluster: " & ClusterUrl & "."} else {"✖️ Invalid", "Unable to validate to the specified cluster: " & ClusterUrl & "."}, - // Storage - StorageUrl = #"Storage URL", - StorageUrlSegments = if StorageUrl <> null then Text.Split(StorageUrl, "/") else {}, - StorageUrlSegmentCount = List.Count(StorageUrlSegments), - StorageCheck = - if StorageUrl = "" or StorageUrl = null then {"✖ Invalid", "Storage URL not specified."} - else if Text.StartsWith(StorageUrl, "https://") = false then {"✖ Invalid", "Storage URL must be a valid HTTPS path."} - else if (StorageUrlSegmentCount = 4 and Text.Lower(StorageUrlSegments{3}) = "ingestion") or (StorageUrlSegmentCount = 7 and Text.Lower(StorageUrlSegments{5}) = "Files" and Text.Lower(StorageUrlSegments{6}) = "ingestion") then ( - {"✔️ Specified", "Will use FinOps hub storage: " & Text.Split(StorageUrl, "."){0} & "."} - // TODO: Consider validating the hub version - // let - // // Looks like hubs; try to get hub version - // Settings = try Json.Document(AzureStorage.DataLake(StorageUrl & (if StorageUrlSegmentCount = 3 then "/config" else "/../config")){[Name="settings.json"]}[Content], 1252) otherwise null, - // HubVersion = if Settings <> null then try Settings[version] otherwise null else null, - // Output = - // if HubVersion = null then ( - // if StorageUrlSegmentCount = 4 and Text.Lower(StorageUrlSegments{3}) = "ingestion" then {"❓️ Unconfirmed", "Unable to confirm FinOps hub version from storage: " & Text.Split(StorageUrl, "."){0} & "."} - // else if StorageUrlSegmentCount = 7 and Text.Lower(StorageUrlSegments{5}) = "Files" and Text.Lower(StorageUrlSegments{6}) = "ingestion" then {"❓️ Unconfirmed", "Unable to confirm FinOps hub version from OneLake: " & Text.Split(StorageUrl, "."){0} & "."} - // else {"✖️ Invalid", "Configured storage account does not have FinOps hubs deployed."} - // ) - // else {"✔️ Specified", "Will use FinOps hub v" & HubVersion & " storage: " & Text.Split(StorageUrl, "."){0} & "."} - // in - // Output - ) - else if (try AzureStorage.DataLake(StorageUrl) otherwise null) <> null then {"✔️ Specified", "Will use exports in storage account: " & Text.Split(StorageUrl, "."){0} & "."} - // TODO: Read export manifests from the storage account to validate data is available - else {"✖️ Invalid", "Unable to validate the specified storage account: " & Text.Split(StorageUrl, "."){0} & "."}, - // Incremental refresh DateEnd = null, DateStart = null, @@ -77,19 +49,7 @@ expression '▶️ START HERE' = ``` [ Instructions = " ➖ Open Deployments > `hub` > Outputs", Value = "", Status = "", Message = "" ], [ Instructions = " ➖ Copy the 'clusterUri' value", Value = "", Status = "", Message = "" ], [ Instructions = " ", Value = "", Status = "", Message = "" ], - [ Instructions = "② Set the storage URL on the left", Value = StorageUrl, Status = StorageCheck{0}, Message = StorageCheck{1} ], - [ Instructions = " If using FinOps hubs:", Value = "", Status = "", Message = "" ], - [ Instructions = " ➖ Go to your hub resource group", Value = "", Status = "", Message = "" ], - [ Instructions = " ➖ Open Deployments > `hub` > Outputs", Value = "", Status = "", Message = "" ], - [ Instructions = " ➖ Copy the 'HubUrlForPowerBI' value", Value = "", Status = "", Message = "" ], - [ Instructions = " ", Value = "", Status = "", Message = "" ], - [ Instructions = " If using exports:", Value = "", Status = "", Message = "" ], - [ Instructions = " ➖ Go to your storage account", Value = "", Status = "", Message = "" ], - [ Instructions = " ➖ Open Endpoints", Value = "", Status = "", Message = "" ], - [ Instructions = " ➖ Copy the 'Data Lake Storage' value", Value = "", Status = "", Message = "" ], - [ Instructions = " ➖ Optionally add a container or file path", Value = "", Status = "", Message = "" ], - [ Instructions = " ", Value = "", Status = "", Message = "" ], - [ Instructions = "③ Optional: Set the desired date range", Value = DateValue, Status = DateCheck{0}, Message = DateCheck{1} ], + [ Instructions = "② Optional: Set the desired date range", Value = DateValue, Status = DateCheck{0}, Message = DateCheck{1} ], [ Instructions = " ", Value = "", Status = "", Message = "" ] }) in @@ -113,15 +73,15 @@ expression 'Number of Months' = 13 meta [IsParameterQuery=true, Type="Number", I /// Generates a KQL filter to be used in Resource Graph queries to filter out test data. expression ftk_DemoFilter = - () => - if List.Contains( - { - "demohubupzaljui2bxfm", - "hubdssjcx4ai7tjs", - "kustohubbngtbihvy5t4a" - }, Text.SplitAny(#"Storage URL", "/."){2}) - then "| where subscriptionId in ('51f73f67-1f29-4120-863e-dd315f743fc1', '586f1d47-9dd9-43d5-b196-6e28f8405ff8', '64e355d7-997c-491d-b0c1-8414dccfcf42', '736af2bf-9fcb-4145-a19b-5b30b2b8949d', '73c0021f-a37d-433f-8baa-7450cb54eea6', '9ec51cfd-5ca7-4d76-8101-dd0a4abc5674', 'ed570627-0265-4620-bb42-bae06bcfa914')" - else "" + () => + if List.Contains( + { + "demohubupzaljui2bxfm", + "hubdssjcx4ai7tjs", + "kustohubbngtbihvy5t4a" + }, Text.SplitAny(#"Storage URL", "/."){2}) + then "| where subscriptionId in ('51f73f67-1f29-4120-863e-dd315f743fc1', '586f1d47-9dd9-43d5-b196-6e28f8405ff8', '64e355d7-997c-491d-b0c1-8414dccfcf42', '736af2bf-9fcb-4145-a19b-5b30b2b8949d', '73c0021f-a37d-433f-8baa-7450cb54eea6', '9ec51cfd-5ca7-4d76-8101-dd0a4abc5674', 'ed570627-0265-4620-bb42-bae06bcfa914')" + else "" lineageTag: 4d4c22f9-d4dc-4c2e-9730-dbc47fa53b05 queryGroup: Functions diff --git a/src/power-bi/kql/Shared.Dataset/definition/model.tmdl b/src/power-bi/kql/Shared.Dataset/definition/model.tmdl index 56d0c4878..2d51a2cfd 100644 --- a/src/power-bi/kql/Shared.Dataset/definition/model.tmdl +++ b/src/power-bi/kql/Shared.Dataset/definition/model.tmdl @@ -32,7 +32,7 @@ queryGroup 'Data Explorer' annotation __PBI_TimeIntelligenceEnabled = 0 -annotation PBIDesktopVersion = 2.140.679.0 (25.02)+e2f7796f7ddf473b3f87e4d9e2bee0b29f9956bf +annotation PBIDesktopVersion = 2.141.1177.0 (25.03)+c500dc5720dc9271c2dcfef1230911a0da742ee3 annotation PBI_QueryOrder = ["▶️ START HERE","Cluster URL","Storage URL","Number of Months","Default Granularity","ftk_DemoFilter","Costs","HubScopes","HubSettings","InstanceSizeFlexibility","PricingUnits","Regions","ResourceTypes","StorageData","StorageErrors","AdvisorRecommendations","AdvisorReservationRecommendations","Disks","ManagementGroups","NetworkInterfaces","NetworkSecurityGroups","PolicyAssignments","PolicyDefinitions","PolicyStates","PublicIPAddresses","Resources","SqlDatabases","Subscriptions","VirtualMachines","ReservationRecommendations"] diff --git a/src/power-bi/kql/Shared.Dataset/definition/tables/AdvisorReservationRecommendations.tmdl b/src/power-bi/kql/Shared.Dataset/definition/tables/AdvisorReservationRecommendations.tmdl index c3763a840..8cf7b26ef 100644 --- a/src/power-bi/kql/Shared.Dataset/definition/tables/AdvisorReservationRecommendations.tmdl +++ b/src/power-bi/kql/Shared.Dataset/definition/tables/AdvisorReservationRecommendations.tmdl @@ -133,9 +133,10 @@ table AdvisorReservationRecommendations annotation SummarizationSetBy = Automatic column 'properties.extendedProperties.lookbackPeriod' - dataType: string + dataType: int64 + formatString: 0 lineageTag: 82a3a6d5-01c1-4db7-be17-572b62ceb699 - summarizeBy: none + summarizeBy: sum sourceColumn: properties.extendedProperties.lookbackPeriod annotation SummarizationSetBy = Automatic @@ -385,32 +386,91 @@ table AdvisorReservationRecommendations annotation SummarizationSetBy = Automatic + column properties + dataType: string + lineageTag: 0d32e76f-c900-4a15-b9ed-03b50dc581a8 + summarizeBy: none + sourceColumn: properties + + annotation SummarizationSetBy = Automatic + + column 'properties.shortDescription' + dataType: string + lineageTag: 5ed5ac30-eac0-4e94-8539-9092867e2a8e + summarizeBy: none + sourceColumn: properties.shortDescription + + annotation SummarizationSetBy = Automatic + + column 'properties.resourceMetadata' + dataType: string + lineageTag: 42f6c299-bcec-47a5-ad78-cb16c57a372f + summarizeBy: none + sourceColumn: properties.resourceMetadata + + annotation SummarizationSetBy = Automatic + partition AdvisorReservationRecommendations = m mode: import queryGroup: 'Resource Graph' source = let - Source = AzureResourceGraph.Query(" + query = " advisorresources | where type == 'microsoft.advisor/recommendations' | where properties['category'] == 'Cost' | where properties['shortDescription']['solution'] == 'Consider virtual machine reserved instance to save over your on-demand costs' - " & ftk_DemoFilter(), "Tenant", null, null, [resultTruncated = true]), - #"Expanded properties 1" = Table.ExpandRecordColumn(Source, "properties", {"recommendationTypeId", "extendedProperties", "resourceMetadata", "shortDescription", "suppressionIds", "impactedField", "impactedValue", "lastUpdated", "metadata", "category", "impact"}, {"properties.recommendationTypeId", "properties.extendedProperties", "properties.resourceMetadata", "properties.shortDescription", "properties.suppressionIds", "properties.impactedField", "properties.impactedValue", "properties.lastUpdated", "properties.metadata", "properties.category", "properties.impact"}), - #"Expanded properties.shortDescription 1" = Table.ExpandRecordColumn(#"Expanded properties 1", "properties.shortDescription", {"solution", "problem"}, {"properties.shortDescription.solution", "properties.shortDescription.problem"}), - #"Expanded properties.extendedProperties" = Table.ExpandRecordColumn(#"Expanded properties.shortDescription 1", "properties.extendedProperties", {"reservedResourceType", "annualSavingsAmount", "targetResourceCount", "savingsCurrency", "lookbackPeriod", "savingsAmount", "displaySKU", "displayQty", "location", "region", "vmSize", "subId", "scope", "term", "sku", "qty"}, {"properties.extendedProperties.reservedResourceType", "properties.extendedProperties.annualSavingsAmount", "properties.extendedProperties.targetResourceCount", "properties.extendedProperties.savingsCurrency", "properties.extendedProperties.lookbackPeriod", "properties.extendedProperties.savingsAmount", "properties.extendedProperties.displaySKU", "properties.extendedProperties.displayQty", "properties.extendedProperties.location", "properties.extendedProperties.region", "properties.extendedProperties.vmSize", "properties.extendedProperties.subId", "properties.extendedProperties.scope", "properties.extendedProperties.term", "properties.extendedProperties.sku", "properties.extendedProperties.qty"}), - #"Expanded properties.resourceMetadata" = Table.ExpandRecordColumn(#"Expanded properties.extendedProperties", "properties.resourceMetadata", {"resourceId", "singular", "plural", "action", "source"}, {"properties.resourceMetadata.resourceId", "properties.resourceMetadata.singular", "properties.resourceMetadata.plural", "properties.resourceMetadata.action", "properties.resourceMetadata.source"}), - #"Changed column type 2" = Table.TransformColumnTypes(#"Expanded properties.resourceMetadata", {{"properties.extendedProperties.annualSavingsAmount", type number}}, "en-US"), - #"Replaced errors" = Table.ReplaceErrorValues(#"Changed column type 2", {{"properties.extendedProperties.annualSavingsAmount", null}}), - #"Changed column type 1" = Table.TransformColumnTypes(#"Replaced errors", {{"properties.extendedProperties.savingsAmount", type number}}, "en-US"), - #"Replaced errors 1" = Table.ReplaceErrorValues(#"Changed column type 1", {{"properties.extendedProperties.savingsAmount", null}}), - #"Replaced value" = Table.ReplaceValue(#"Replaced errors 1", null, 0, Replacer.ReplaceValue, {"properties.extendedProperties.savingsAmount"}), - #"Replaced value 1" = Table.ReplaceValue(#"Replaced value", null, 0, Replacer.ReplaceValue, {"properties.extendedProperties.annualSavingsAmount"}), - #"Changed column type" = Table.TransformColumnTypes(#"Replaced value 1", {{"properties.lastUpdated", type datetimezone}}), - #"Added custom" = Table.TransformColumnTypes(Table.AddColumn(#"Changed column type", "recommendedActions", each [properties.extendedProperties.displaySKU] & " virtual machines in " & [properties.extendedProperties.location]), {{"recommendedActions", type text}}), - #"Changed column type 3" = Table.TransformColumnTypes(#"Added custom", {{"properties.extendedProperties.targetResourceCount", Int64.Type}, {"properties.extendedProperties.displayQty", Int64.Type}, {"properties.extendedProperties.qty", Int64.Type}}) + | extend + ['properties.recommendationTypeId'] = properties.recommendationTypeId, + ['properties.shortDescription'] = properties.shortDescription, + ['properties.resourceMetadata'] = properties.resourceMetadata, + ['properties.suppressionIds'] = properties.suppressionIds, + ['properties.impactedField'] = properties.impactedField, + ['properties.impactedValue'] = properties.impactedValue, + ['properties.lastUpdated'] = todatetime(properties.lastUpdated), + ['properties.category'] = properties.category, + ['properties.metadata'] = properties.metadata, + ['properties.impact'] = properties.impact, + ['properties.shortDescription.problem'] = properties.shortDescription.problem, + ['properties.shortDescription.solution'] = properties.shortDescription.solution, + ['properties.extendedProperties.reservedResourceType'] = properties.extendedProperties.reservedResourceType, + ['properties.extendedProperties.annualSavingsAmount'] = properties.extendedProperties.annualSavingsAmount, + ['properties.extendedProperties.targetResourceCount'] = toint(properties.extendedProperties.targetResourceCount), + ['properties.extendedProperties.savingsCurrency'] = properties.extendedProperties.savingsCurrency, + ['properties.extendedProperties.lookbackPeriod'] = properties.extendedProperties.lookbackPeriod, + ['properties.extendedProperties.savingsAmount'] = properties.extendedProperties.savingsAmount, + ['properties.extendedProperties.displaySKU'] = properties.extendedProperties.displaySKU, + ['properties.extendedProperties.displayQty'] = toint(properties.extendedProperties.displayQty), + ['properties.extendedProperties.location'] = properties.extendedProperties.location, + ['properties.extendedProperties.region'] = properties.extendedProperties.region, + ['properties.extendedProperties.vmSize'] = properties.extendedProperties.vmSize, + ['properties.extendedProperties.subId'] = properties.extendedProperties.subId, + ['properties.extendedProperties.scope'] = properties.extendedProperties.scope, + ['properties.extendedProperties.term'] = properties.extendedProperties.term, + ['properties.extendedProperties.sku'] = properties.extendedProperties.sku, + ['properties.extendedProperties.qty'] = toint(properties.extendedProperties.qty), + ['properties.resourceMetadata.resourceId'] = tolower(properties.resourceMetadata.resourceId), + ['properties.resourceMetadata.singular'] = properties.resourceMetadata.singular, + ['properties.resourceMetadata.plural'] = properties.resourceMetadata.plural, + ['properties.resourceMetadata.action'] = properties.resourceMetadata.action, + ['properties.resourceMetadata.source'] = properties.resourceMetadata.source, + recommendedActions = strcat(properties.extendedProperties.displaySKU, ' virtual machines in ', properties.extendedProperties.location), + SortOrder = case(properties.impact == 'High', 1, properties.impact == 'Medium', 2, properties.impact == 'Low', 3, 9) + | order by SortOrder asc + | project-away SortOrder + " & ftk_DemoFilter(), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]), + Types = Table.TransformColumnTypes(Source, { + {"properties.extendedProperties.annualSavingsAmount", type number}, + {"properties.extendedProperties.savingsAmount", type number}, + {"properties.extendedProperties.qty", Int64.Type}, + {"properties.extendedProperties.displayQty", Int64.Type}, + {"properties.extendedProperties.lookbackPeriod", Int64.Type}, + {"properties.extendedProperties.targetResourceCount", Int64.Type}, + {"properties.lastUpdated", type datetimezone} + }) in - #"Changed column type 3" + Types annotation PBI_NavigationStepName = Navigation diff --git a/src/power-bi/kql/Shared.Dataset/definition/tables/Costs.tmdl b/src/power-bi/kql/Shared.Dataset/definition/tables/Costs.tmdl index 2023710a5..a0b24d02b 100644 --- a/src/power-bi/kql/Shared.Dataset/definition/tables/Costs.tmdl +++ b/src/power-bi/kql/Shared.Dataset/definition/tables/Costs.tmdl @@ -109,6 +109,34 @@ table Costs RETURN IF(ComputeCondition, "Compute", ConcatenatedValues) lineageTag: ac79fd49-6124-47a6-8538-0d4cc28df316 + measure x_SkuCoreCountMeasure = ``` + + SUMX( + SUMMARIZE( + Costs, + Costs[ResourceId], + "DistinctCoreCount", MAX(Costs[x_SkuCoreCount]) + ), + [DistinctCoreCount] + ) + ``` + formatString: 0 + lineageTag: b59442f6-aae1-4ae1-ae4a-96cf06f4390a + + measure x_SkuLicenseQuantityMeasure = ``` + + SUMX( + SUMMARIZE( + Costs, + Costs[ResourceId], + "DistinctCoreCount", MAX(Costs[x_SkuLicenseQuantity]) + ), + [DistinctCoreCount] + ) + ``` + formatString: 0 + lineageTag: 0bcd47b4-9910-4f43-8efe-a6fb9a3b940d + column AvailabilityZone dataType: string sourceProviderType: nvarchar(max) @@ -1701,8 +1729,8 @@ table Costs | extend tmp_IsVMUsage = x_SkuMeterCategory in ('Virtual Machines', 'Virtual Machine Licenses') and ChargeCategory == 'Usage' | extend x_ConsumedCoreHours = iff(tmp_IsVMUsage and isnotempty(x_SkuCoreCount), x_SkuCoreCount * ConsumedQuantity, todecimal('')) | extend x_SkuLicenseStatus = case( - (isnotempty(x_SkuMeterSubcategory) and x_SkuMeterSubcategory contains 'Windows') or not(tmp_IsSQLAHB), 'Not enabled', (isnotempty(x_SkuDetails.ImageType) and x_SkuDetails.ImageType contains 'Windows Server BYOL') or tmp_IsSQLAHB or (isnotempty(x_SkuMeterSubcategory) and x_SkuMeterSubcategory contains 'Azure Hybrid Benefit'), 'Enabled', + (isnotempty(x_SkuMeterSubcategory) and x_SkuMeterSubcategory contains 'Windows') or not(tmp_IsSQLAHB), 'Not enabled', '' ) | extend x_SkuLicenseType = case( @@ -1713,9 +1741,7 @@ table Costs | extend x_SkuLicenseQuantity = case( isempty(x_SkuCoreCount), toint(''), x_SkuCoreCount <= 8, 8, - x_SkuCoreCount <= 16, 16, - x_SkuCoreCount == 20, 24, - x_SkuCoreCount > 20, x_SkuCoreCount, + x_SkuCoreCount > 8, x_SkuCoreCount, toint('') ) | extend x_SkuLicenseUnit = iff(isnotempty(x_SkuLicenseQuantity), 'Cores', '') @@ -1741,12 +1767,12 @@ table Costs isnotempty(CommitmentDiscountCategory), 'Amortized Charge', '' ) - | extend x_CommitmentDiscountSavings = iff(ContractedCost == 0, decimal(0), ContractedCost - EffectiveCost) - | extend x_NegotiatedDiscountSavings = iff(ListCost == 0, decimal(0), ListCost - ContractedCost) - | extend x_TotalSavings = iff(ListCost == 0, decimal(0), ListCost - EffectiveCost) - | extend x_CommitmentDiscountPercent = iff(ContractedUnitPrice == 0, decimal(0), (ContractedUnitPrice - x_EffectiveUnitPrice) / ContractedUnitPrice) - | extend x_NegotiatedDiscountPercent = iff(ListUnitPrice == 0, decimal(0), (ListUnitPrice - ContractedUnitPrice) / ListUnitPrice) - | extend x_TotalDiscountPercent = iff(ListUnitPrice == 0, decimal(0), (ListUnitPrice - x_EffectiveUnitPrice) / ListUnitPrice) + | extend x_CommitmentDiscountSavings = iff(ContractedCost < EffectiveCost, decimal(0), ContractedCost - EffectiveCost) + | extend x_NegotiatedDiscountSavings = iff(ListCost < ContractedCost, decimal(0), ListCost - ContractedCost) + | extend x_TotalSavings = iff(ListCost < EffectiveCost, decimal(0), ListCost - EffectiveCost) + | extend x_CommitmentDiscountPercent = iff(ContractedUnitPrice == 0, decimal(0), (ContractedUnitPrice - x_EffectiveUnitPrice) / ContractedUnitPrice) + | extend x_NegotiatedDiscountPercent = iff(ListUnitPrice == 0, decimal(0), (ListUnitPrice - ContractedUnitPrice) / ListUnitPrice) + | extend x_TotalDiscountPercent = iff(ListUnitPrice == 0, decimal(0), (ListUnitPrice - x_EffectiveUnitPrice) / ListUnitPrice) // // Toolkit | extend x_ToolkitTool = tostring(Tags['ftk-tool']) @@ -1787,10 +1813,10 @@ table Costs else if Trim_spaces_from_tags then "parse_json(replace_string(keys, ' ', ''))" else "keys" ) & " - | extend " & Text.Combine(List.Transform(PromotedTags, each "tag_" & _ & " = iff(array_index_of(cleankeys, tolower('" & _ & "')) < 0, '', tostring(Tags[tostring(keys[toint(array_index_of(cleankeys, tolower('" & _ & "')))])]))"), ", ") & " + | extend " & Text.Combine(List.Transform(PromotedTags, each "tag_" & Text.Replace(_, " ", "") & " = iff(array_index_of(cleankeys, tolower('" & _ & "')) < 0, '', tostring(Tags[tostring(keys[toint(array_index_of(cleankeys, tolower('" & _ & "')))])]))"), ", ") & " | project-away keys, cleankeys" ) else (" - | extend " & Text.Combine(List.Transform(PromotedTags, each "tag_" & _ & " = tostring(Tags['" & _ & "'])"), ", ") + | extend " & Text.Combine(List.Transform(PromotedTags, each "tag_" & Text.Replace(_, " ", "") & " = tostring(Tags['" & _ & "'])"), ", ") ) ) else "") & " // diff --git a/src/power-bi/kql/Shared.Dataset/definition/tables/Disks.tmdl b/src/power-bi/kql/Shared.Dataset/definition/tables/Disks.tmdl index 925d3347b..1ed3baf53 100644 --- a/src/power-bi/kql/Shared.Dataset/definition/tables/Disks.tmdl +++ b/src/power-bi/kql/Shared.Dataset/definition/tables/Disks.tmdl @@ -17,14 +17,6 @@ table Disks annotation SummarizationSetBy = Automatic - column type - dataType: string - lineageTag: a311742d-a3f5-4432-b707-8dcd17c7d279 - summarizeBy: none - sourceColumn: type - - annotation SummarizationSetBy = Automatic - column tenantId dataType: string lineageTag: 956716b4-925c-4fd7-966e-a3e3d8a8a4ce @@ -33,14 +25,6 @@ table Disks annotation SummarizationSetBy = Automatic - column kind - dataType: string - lineageTag: 4c524547-d15c-4cfd-a1b6-eed57b7f75a1 - summarizeBy: none - sourceColumn: kind - - annotation SummarizationSetBy = Automatic - column location dataType: string lineageTag: e2c9aac1-398d-407d-b62f-43596f401420 @@ -73,265 +57,157 @@ table Disks annotation SummarizationSetBy = Automatic - column 'sku.name' - dataType: string - lineageTag: f1132ac0-604d-47d1-9b06-74db3b2d443c - summarizeBy: none - sourceColumn: sku.name - - annotation SummarizationSetBy = Automatic - - column 'sku.tier' - dataType: string - lineageTag: e9b4cfc4-81eb-4d94-bc14-ff38f90cbd8b - summarizeBy: none - sourceColumn: sku.tier - - annotation SummarizationSetBy = Automatic - - column plan - dataType: string - lineageTag: a48ec8c3-8134-47be-83e4-42c24554add2 - summarizeBy: none - sourceColumn: plan - - annotation SummarizationSetBy = Automatic - - column 'properties.provisioningState' - dataType: string - lineageTag: e0422dd9-490b-46ea-bba7-58623656ad8d - summarizeBy: none - sourceColumn: properties.provisioningState - - annotation SummarizationSetBy = Automatic - - column 'properties.publicNetworkAccess' + column diskType dataType: string - lineageTag: e66bb3fa-7deb-49fc-9be6-130494ad2e20 + lineageTag: efab8b0e-646d-4b4a-93c6-8196f1379fec summarizeBy: none - sourceColumn: properties.publicNetworkAccess + sourceColumn: diskType annotation SummarizationSetBy = Automatic - column 'properties.encryption' + column osType dataType: string - lineageTag: 4b8960fb-6583-473c-bd60-9575871b4e94 + lineageTag: dc48738a-1a9b-4047-847e-88280f01b887 summarizeBy: none - sourceColumn: properties.encryption + sourceColumn: osType annotation SummarizationSetBy = Automatic - column 'properties.networkAccessPolicy' + column skuName dataType: string - lineageTag: 5c055ec0-604c-49f1-99fa-d87cff2131d4 + lineageTag: 1d86f4bd-c814-4695-a0fd-e39f041c66db summarizeBy: none - sourceColumn: properties.networkAccessPolicy + sourceColumn: skuName annotation SummarizationSetBy = Automatic - column 'properties.timeCreated' + column skuTier dataType: string - lineageTag: cf636967-ce8c-4922-a10a-a8ce6349380c + lineageTag: 9fb89960-0a93-4909-b914-769f7bbd092c summarizeBy: none - sourceColumn: properties.timeCreated + sourceColumn: skuTier annotation SummarizationSetBy = Automatic - column 'properties.diskSizeGB' + column diskSizeGB dataType: double - lineageTag: 12ec3d0b-32dc-41a7-9b06-8adc11f4ead9 + formatString: 0 + lineageTag: a24d4618-df23-48d2-9ebb-6cf5dd5451a9 summarizeBy: sum - sourceColumn: properties.diskSizeGB + sourceColumn: diskSizeGB annotation SummarizationSetBy = Automatic - annotation PBI_FormatHint = {"isGeneralNumber":true} - - column 'properties.hyperVGeneration' - dataType: string - lineageTag: 846d8ace-16fa-4fc8-83b0-d77ff75b9e60 - summarizeBy: none - sourceColumn: properties.hyperVGeneration - - annotation SummarizationSetBy = Automatic + annotation PBI_FormatHint = {"isDecimal":true} - column 'properties.diskSizeBytes' + column diskMBpsReadWrite dataType: double - lineageTag: 69588c16-e1f7-4423-a050-147e83823716 + lineageTag: 7ae71c89-85ff-490d-9c3b-28649909da03 summarizeBy: sum - sourceColumn: properties.diskSizeBytes + sourceColumn: diskMBpsReadWrite annotation SummarizationSetBy = Automatic annotation PBI_FormatHint = {"isGeneralNumber":true} - column 'properties.creationData.createOption' - dataType: string - lineageTag: 967b33c4-a659-4e78-a76b-63edba801366 - summarizeBy: none - sourceColumn: properties.creationData.createOption - - annotation SummarizationSetBy = Automatic - - column 'properties.creationData.imageReference.id' - dataType: string - lineageTag: 819ebb4b-c380-49d6-9b18-59d807d2ea91 - summarizeBy: none - sourceColumn: properties.creationData.imageReference.id - - annotation SummarizationSetBy = Automatic - - column 'properties.osType' - dataType: string - lineageTag: 666c7b76-3df6-4cfb-b908-f81d7ffecdf8 - summarizeBy: none - sourceColumn: properties.osType - - annotation SummarizationSetBy = Automatic - - column 'properties.LastOwnershipUpdateTime' - dataType: string - lineageTag: fcef111b-7b03-4329-a762-37ed1fbdf4ff - summarizeBy: none - sourceColumn: properties.LastOwnershipUpdateTime - - annotation SummarizationSetBy = Automatic - - column 'properties.diskState' - dataType: string - lineageTag: 515cbaa6-df64-484c-aef0-0e3804620405 - summarizeBy: none - sourceColumn: properties.diskState - - annotation SummarizationSetBy = Automatic - - column 'properties.uniqueId' - dataType: string - lineageTag: 3ac2b374-3003-48ff-8fa4-f7d98991ac05 - summarizeBy: none - sourceColumn: properties.uniqueId - - annotation SummarizationSetBy = Automatic - - column 'properties.diskMBpsReadWrite' - dataType: double - lineageTag: 2f95f7e9-da97-4689-87e0-84b3903aff7d - summarizeBy: sum - sourceColumn: properties.diskMBpsReadWrite - - annotation SummarizationSetBy = Automatic - - annotation PBI_FormatHint = {"isGeneralNumber":true} - - column 'properties.diskIOPSReadWrite' + column diskIOPSReadWrite dataType: double - lineageTag: 490d018d-7a97-4546-ac90-157d803c424f + lineageTag: bf7b13bf-4dd3-484e-bebb-474b1de33c37 summarizeBy: sum - sourceColumn: properties.diskIOPSReadWrite + sourceColumn: diskIOPSReadWrite annotation SummarizationSetBy = Automatic annotation PBI_FormatHint = {"isGeneralNumber":true} - column 'properties.tier' + column diskState dataType: string - lineageTag: 9cdaeebc-4e7e-4795-9026-53f5cdc4a43e + lineageTag: 10cfeddf-8177-4e10-8338-08dc46798f33 summarizeBy: none - sourceColumn: properties.tier + sourceColumn: diskState annotation SummarizationSetBy = Automatic - column tags - dataType: string - lineageTag: 72b832d7-5eb6-4a58-9b2b-d135d659d231 + column timeCreated + dataType: dateTime + formatString: General Date + lineageTag: ad7f8081-08aa-4b0f-bb02-410a56035f86 summarizeBy: none - sourceColumn: tags + sourceColumn: timeCreated annotation SummarizationSetBy = Automatic - column identity - dataType: string - lineageTag: 032ff0cb-1cc0-48b6-a95d-d835578f742f - summarizeBy: none - sourceColumn: identity - - annotation SummarizationSetBy = Automatic - - column zones - dataType: string - lineageTag: 96b63e5f-b360-4135-b384-cf4a4f0c0e88 + column LastOwnershipUpdateTime + dataType: dateTime + formatString: General Date + lineageTag: f5ad6b01-68b4-44c6-9f36-c4fa24992c3e summarizeBy: none - sourceColumn: zones + sourceColumn: LastOwnershipUpdateTime annotation SummarizationSetBy = Automatic - column extendedLocation + column Redundancy dataType: string - lineageTag: dc3f509c-ea2b-4c19-9085-2c6167e21d62 + lineageTag: d2e0caae-a0b7-405f-924d-917dd6e8b558 summarizeBy: none - sourceColumn: extendedLocation - - annotation SummarizationSetBy = Automatic - - column diskType - dataType: string - lineageTag: efab8b0e-646d-4b4a-93c6-8196f1379fec - summarizeBy: none - sourceColumn: diskType + sourceColumn: Redundancy annotation SummarizationSetBy = Automatic column parentVM dataType: string - lineageTag: 8abc188f-2c52-4db8-967f-5447de969f33 + lineageTag: 6a722f3e-10bb-4cd5-ba1e-71636d6c4e60 summarizeBy: none sourceColumn: parentVM annotation SummarizationSetBy = Automatic - column apiVersion - dataType: string - lineageTag: 9119af66-9eac-4189-a9ef-4e638296163a - summarizeBy: none - sourceColumn: apiVersion - - annotation SummarizationSetBy = Automatic - - column systemData - dataType: string - lineageTag: 23170a02-4cd5-4a36-94e6-7def321f9cf4 - summarizeBy: none - sourceColumn: systemData - - annotation SummarizationSetBy = Automatic - partition Disks = m mode: import queryGroup: 'Resource Graph' - source = ``` + source = let - Source = AzureResourceGraph.Query(" - - + query = " resources | where type =~ 'microsoft.compute/disks' | extend id = tolower(id) - - - " & ftk_DemoFilter(), "Tenant", null, null, [resultTruncated = false]), - #"Expanded properties" = Table.ExpandRecordColumn(Source, "properties", {"provisioningState", "publicNetworkAccess", "encryption", "networkAccessPolicy", "timeCreated", "diskSizeGB", "hyperVGeneration", "diskSizeBytes", "creationData", "osType", "LastOwnershipUpdateTime", "diskState", "uniqueId", "diskMBpsReadWrite", "diskIOPSReadWrite", "tier"}, {"properties.provisioningState", "properties.publicNetworkAccess", "properties.encryption", "properties.networkAccessPolicy", "properties.timeCreated", "properties.diskSizeGB", "properties.hyperVGeneration", "properties.diskSizeBytes", "properties.creationData", "properties.osType", "properties.LastOwnershipUpdateTime", "properties.diskState", "properties.uniqueId", "properties.diskMBpsReadWrite", "properties.diskIOPSReadWrite", "properties.tier"}), - #"Expanded sku" = Table.ExpandRecordColumn(#"Expanded properties", "sku", {"name", "tier"}, {"sku.name", "sku.tier"}), - #"Expanded properties.creationData" = Table.ExpandRecordColumn(#"Expanded sku", "properties.creationData", {"createOption", "imageReference"}, {"properties.creationData.createOption", "properties.creationData.imageReference"}), - #"Expanded properties.creationData.imageReference" = Table.ExpandRecordColumn(#"Expanded properties.creationData", "properties.creationData.imageReference", {"id"}, {"properties.creationData.imageReference.id"}), - #"Expanded zones" = Table.ExpandListColumn(#"Expanded properties.creationData.imageReference", "zones"), - #"Inserted conditional column" = Table.AddColumn(#"Expanded zones", "diskType", each if [properties.osType] = null then "Data Disk" else "OS Disk"), - #"Changed column type" = Table.TransformColumnTypes(#"Inserted conditional column", {{"properties.diskSizeGB", type number}, {"properties.diskSizeBytes", type number}, {"properties.diskMBpsReadWrite", type number}, {"properties.diskIOPSReadWrite", type number}}), - #"Duplicated column" = Table.DuplicateColumn(#"Changed column type", "managedBy", "managedBy - Copy"), - #"Extracted text after delimiter" = Table.TransformColumns(#"Duplicated column", {{"managedBy - Copy", each Text.AfterDelimiter(Text.From(_), "/", {0, RelativePosition.FromEnd}), type text}}), - #"Renamed columns" = Table.RenameColumns(#"Extracted text after delimiter", {{"managedBy - Copy", "parentVM"}}) + | extend skuName = sku.name + | extend skuTier = sku.tier + | extend timeCreated = properties.timeCreated + | extend diskSizeGB = properties.diskSizeGB + | extend diskState = properties.diskState + | extend LastOwnershipUpdateTime = properties.LastOwnershipUpdateTime + | extend diskMBpsReadWrite = properties.diskMBpsReadWrite + | extend diskIOPSReadWrite = properties.diskIOPSReadWrite + | extend osType = properties.osType + | extend diskType = iff(isnull(osType), 'Data disk', 'OS disk') + | parse kind=regex skuName with '_' Redundancy + | parse kind=regex managedBy with 'virtualMachines/' parentVM + | project + subscriptionId, + resourceGroup, + id, + name, + tenantId, + location, + managedBy, + osType, + skuName, + skuTier, + diskSizeGB, + diskMBpsReadWrite, + diskIOPSReadWrite, + diskState, + timeCreated, + LastOwnershipUpdateTime, + Redundancy, + parentVM, + diskType + " & ftk_DemoFilter(), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]), + #"Changed Type" = Table.TransformColumnTypes(Source,{{"diskSizeGB", type number}, {"diskMBpsReadWrite", type number}, {"diskIOPSReadWrite", type number}, {"timeCreated", type datetimezone}, {"LastOwnershipUpdateTime", type datetimezone}}) in - #"Renamed columns" - ``` + #"Changed Type" annotation PBI_NavigationStepName = Navigation diff --git a/src/power-bi/kql/Shared.Dataset/definition/tables/ManagementGroups.tmdl b/src/power-bi/kql/Shared.Dataset/definition/tables/ManagementGroups.tmdl index 2f00168aa..04dee9962 100644 --- a/src/power-bi/kql/Shared.Dataset/definition/tables/ManagementGroups.tmdl +++ b/src/power-bi/kql/Shared.Dataset/definition/tables/ManagementGroups.tmdl @@ -89,107 +89,139 @@ table ManagementGroups annotation SummarizationSetBy = Automatic - column displayName + column tags dataType: string - lineageTag: c95adf9e-155b-4db2-a6e8-83d630a2892e + lineageTag: 9084e19a-6639-447c-b365-671cd2e81486 summarizeBy: none - sourceColumn: displayName + sourceColumn: tags annotation SummarizationSetBy = Automatic - column 'managementGroupAncestorsChain.displayName' + column identity dataType: string - lineageTag: 6c8a61d3-6351-4374-b38b-85f967964e05 + lineageTag: 5ffd94bb-922a-4e28-a475-b818e035a90f summarizeBy: none - sourceColumn: managementGroupAncestorsChain.displayName + sourceColumn: identity annotation SummarizationSetBy = Automatic - column 'managementGroupAncestorsChain.name' + column zones dataType: string - lineageTag: 34bc6713-be52-4615-b9d5-dd89193cda7d + lineageTag: 843d2718-8d1a-41a2-be04-8010408f4f84 summarizeBy: none - sourceColumn: managementGroupAncestorsChain.name + sourceColumn: zones annotation SummarizationSetBy = Automatic - column updatedTime + column extendedLocation dataType: string - lineageTag: 7df50bf9-576b-4d14-ac15-b2e380019699 + lineageTag: 1536d8ca-3e8b-492f-9ebd-1760fcda0656 summarizeBy: none - sourceColumn: updatedTime + sourceColumn: extendedLocation annotation SummarizationSetBy = Automatic - column updatedBy + column properties dataType: string - lineageTag: 0534e99a-a2a7-444c-88ea-26d6e6a060f5 + lineageTag: 78c55e74-c4b8-40c9-83fa-5cc7ffe7ba35 summarizeBy: none - sourceColumn: updatedBy + sourceColumn: properties annotation SummarizationSetBy = Automatic - column version + column 'properties.displayName' dataType: string - lineageTag: 775e305e-38e1-4c55-988b-4f2b8a3b57d6 + lineageTag: 77376fd0-0cbd-4aea-9e27-4c85b79fac0f summarizeBy: none - sourceColumn: version + sourceColumn: properties.displayName annotation SummarizationSetBy = Automatic - column 'parent.displayName' + column 'properties.details' dataType: string - lineageTag: d766d044-4796-4bef-9dbb-5abc1f8a9366 + lineageTag: b461edc9-5520-4c5a-bf67-5838f2e467b1 summarizeBy: none - sourceColumn: parent.displayName + sourceColumn: properties.details annotation SummarizationSetBy = Automatic - column 'parent.name' + column 'properties.details.managementGroupAncestorsChain' dataType: string - lineageTag: 363e53e3-8504-4dd9-bd88-8df6c587a964 + lineageTag: d2fbf058-de2f-43b1-8081-eb1093ae0a97 summarizeBy: none - sourceColumn: parent.name + sourceColumn: properties.details.managementGroupAncestorsChain annotation SummarizationSetBy = Automatic - column 'parent.id' + column 'properties.details.updatedTime' dataType: string - lineageTag: ded0c0a5-dc3f-42ff-8ee0-fbaca8fff87e + lineageTag: 6aff6f29-5cc8-4ddf-97ad-0f38672122ba summarizeBy: none - sourceColumn: parent.id + sourceColumn: properties.details.updatedTime annotation SummarizationSetBy = Automatic - column tags + column 'properties.details.updatedBy' dataType: string - lineageTag: 9084e19a-6639-447c-b365-671cd2e81486 + lineageTag: cbfd897b-08e8-4285-89cb-372113198db1 summarizeBy: none - sourceColumn: tags + sourceColumn: properties.details.updatedBy annotation SummarizationSetBy = Automatic - column identity + column 'properties.details.version' dataType: string - lineageTag: 5ffd94bb-922a-4e28-a475-b818e035a90f + lineageTag: cc5c1908-4ea7-4d0e-b1f7-ae30db8c3448 summarizeBy: none - sourceColumn: identity + sourceColumn: properties.details.version annotation SummarizationSetBy = Automatic - column zones + column 'properties.details.parent' dataType: string - lineageTag: 843d2718-8d1a-41a2-be04-8010408f4f84 + lineageTag: cdb333f1-7b73-4341-9144-c1b11091f4c9 summarizeBy: none - sourceColumn: zones + sourceColumn: properties.details.parent annotation SummarizationSetBy = Automatic - column extendedLocation + column 'properties.details.parent.displayName' dataType: string - lineageTag: 1536d8ca-3e8b-492f-9ebd-1760fcda0656 + lineageTag: 59269895-6d89-46b2-8b3c-b2f12cdb5128 summarizeBy: none - sourceColumn: extendedLocation + sourceColumn: properties.details.parent.displayName + + annotation SummarizationSetBy = Automatic + + column 'properties.details.parent.name' + dataType: string + lineageTag: 427c73d7-9a51-41c4-ac4d-6027908b59f5 + summarizeBy: none + sourceColumn: properties.details.parent.name + + annotation SummarizationSetBy = Automatic + + column 'properties.details.parent.id' + dataType: string + lineageTag: c684c947-b504-4f61-b713-0a9f5a763ed1 + summarizeBy: none + sourceColumn: properties.details.parent.id + + annotation SummarizationSetBy = Automatic + + column 'properties.details.managementGroupAncestorsChain.displayName' + dataType: string + lineageTag: e5da0404-bcf9-4993-b287-a25549381c42 + summarizeBy: none + sourceColumn: properties.details.managementGroupAncestorsChain.displayName + + annotation SummarizationSetBy = Automatic + + column 'properties.details.managementGroupAncestorsChain.name' + dataType: string + lineageTag: a832ce75-93eb-449c-a0f3-0d929a03bbc2 + summarizeBy: none + sourceColumn: properties.details.managementGroupAncestorsChain.name annotation SummarizationSetBy = Automatic @@ -198,17 +230,28 @@ table ManagementGroups queryGroup: 'Resource Graph' source = let - Source = AzureResourceGraph.Query(" + query = " resourcecontainers | where type == 'microsoft.management/managementgroups' - " & (if ftk_DemoFilter() = "" then "" else "| where name startswith 'Trey'"), "Tenant", null, null, [resultTruncated = false]), - #"Expanded properties" = Table.ExpandRecordColumn(Source, "properties", {"displayName", "details"}, {"displayName", "details"}), - #"Expanded details" = Table.ExpandRecordColumn(#"Expanded properties", "details", {"managementGroupAncestorsChain", "updatedTime", "updatedBy", "version", "parent"}, {"managementGroupAncestorsChain", "updatedTime", "updatedBy", "version", "parent"}), - #"Expanded parent" = Table.ExpandRecordColumn(#"Expanded details", "parent", {"displayName", "name", "id"}, {"parent.displayName", "parent.name", "parent.id"}), - #"Expanded managementGroupAncestorsChain" = Table.ExpandListColumn(#"Expanded parent", "managementGroupAncestorsChain"), - #"Expanded managementGroupAncestorsChain 1" = Table.ExpandRecordColumn(#"Expanded managementGroupAncestorsChain", "managementGroupAncestorsChain", {"displayName", "name"}, {"managementGroupAncestorsChain.displayName", "managementGroupAncestorsChain.name"}) + | extend + ['properties.displayName'] = properties.displayName, + ['properties.details'] = properties.details, + ['properties.details.managementGroupAncestorsChain'] = properties.details.managementGroupAncestorsChain, + ['properties.details.updatedTime'] = properties.details.updatedTime, + ['properties.details.updatedBy'] = properties.details.updatedBy, + ['properties.details.version'] = properties.details.version, + ['properties.details.parent'] = properties.details.parent, + ['properties.details.parent.displayName'] = properties.details.parent.displayName, + ['properties.details.parent.name'] = properties.details.parent.name, + ['properties.details.parent.id'] = properties.details.parent.id + | mv-expand ['properties.details.managementGroupAncestorsChain'] + | extend + ['properties.details.managementGroupAncestorsChain.displayName'] = properties.details.managementGroupAncestorsChain.displayName, + ['properties.details.managementGroupAncestorsChain.name'] = properties.details.managementGroupAncestorsChain.name + " & (if ftk_DemoFilter() = "" then "" else "| where name startswith 'Trey'"), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]) in - #"Expanded managementGroupAncestorsChain 1" + Source annotation PBI_NavigationStepName = Navigation diff --git a/src/power-bi/kql/Shared.Dataset/definition/tables/NetworkInterfaces.tmdl b/src/power-bi/kql/Shared.Dataset/definition/tables/NetworkInterfaces.tmdl index 4b2ca23a1..fb13701d5 100644 --- a/src/power-bi/kql/Shared.Dataset/definition/tables/NetworkInterfaces.tmdl +++ b/src/power-bi/kql/Shared.Dataset/definition/tables/NetworkInterfaces.tmdl @@ -345,24 +345,102 @@ table NetworkInterfaces annotation SummarizationSetBy = Automatic + column properties + dataType: string + lineageTag: 49dc4b9c-259a-456b-acf0-90105d789c00 + summarizeBy: none + sourceColumn: properties + + annotation SummarizationSetBy = Automatic + + column 'properties.networkSecurityGroup' + dataType: string + lineageTag: d8fdde05-77b3-458f-930f-7a70790d889d + summarizeBy: none + sourceColumn: properties.networkSecurityGroup + + annotation SummarizationSetBy = Automatic + + column 'properties.ipConfigurations' + dataType: string + lineageTag: 2802adc4-809b-4610-ab8b-538298983258 + summarizeBy: none + sourceColumn: properties.ipConfigurations + + annotation SummarizationSetBy = Automatic + + column 'properties.virtualMachine' + dataType: string + lineageTag: f49a5008-662e-4c89-bf6e-deff893045ec + summarizeBy: none + sourceColumn: properties.virtualMachine + + annotation SummarizationSetBy = Automatic + + column 'properties.ipConfigurations.properties' + dataType: string + lineageTag: f0c5d156-6fc2-4b32-a55d-2255a2b9945f + summarizeBy: none + sourceColumn: properties.ipConfigurations.properties + + annotation SummarizationSetBy = Automatic + + column 'properties.ipConfigurations.properties.publicIPAddress' + dataType: string + lineageTag: 773f8dc4-0e6f-42da-afba-bcfbdbee8d88 + summarizeBy: none + sourceColumn: properties.ipConfigurations.properties.publicIPAddress + + annotation SummarizationSetBy = Automatic + partition NetworkInterfaces = m mode: import queryGroup: 'Resource Graph' source = let - Source = AzureResourceGraph.Query(" + query = " Resources | where type =~ 'microsoft.network/networkinterfaces' - " & ftk_DemoFilter(), "Tenant", null, null, [resultTruncated = false]), - #"Expanded properties" = Table.ExpandRecordColumn(Source, "properties", {"provisioningState", "resourceGuid", "enableAcceleratedNetworking", "disableTcpStateTracking", "vnetEncryptionSupported", "networkSecurityGroup", "ipConfigurations", "enableIPForwarding", "tapConfigurations", "hostedWorkloads", "allowPort25Out", "auxiliaryMode", "dnsSettings", "auxiliarySku", "macAddress", "nicType", "primary", "virtualMachine"}, {"properties.provisioningState", "properties.resourceGuid", "properties.enableAcceleratedNetworking", "properties.disableTcpStateTracking", "properties.vnetEncryptionSupported", "properties.networkSecurityGroup", "properties.ipConfigurations", "properties.enableIPForwarding", "properties.tapConfigurations", "properties.hostedWorkloads", "properties.allowPort25Out", "properties.auxiliaryMode", "properties.dnsSettings", "properties.auxiliarySku", "properties.macAddress", "properties.nicType", "properties.primary", "properties.virtualMachine"}), - #"Expanded properties.virtualMachine" = Table.ExpandRecordColumn(#"Expanded properties", "properties.virtualMachine", {"id"}, {"properties.virtualMachine.id"}), - #"Expanded properties.ipConfigurations" = Table.ExpandListColumn(#"Expanded properties.virtualMachine", "properties.ipConfigurations"), - #"Expanded properties.ipConfigurations 1" = Table.ExpandRecordColumn(#"Expanded properties.ipConfigurations", "properties.ipConfigurations", {"type", "name", "properties", "id", "etag"}, {"properties.ipConfigurations.type", "properties.ipConfigurations.name", "properties.ipConfigurations.properties", "properties.ipConfigurations.id", "properties.ipConfigurations.etag"}), - #"Expanded properties.ipConfigurations.properties" = Table.ExpandRecordColumn(#"Expanded properties.ipConfigurations 1", "properties.ipConfigurations.properties", {"provisioningState", "privateIPAddressVersion", "privateIPAllocationMethod", "subnet", "privateIPAddress", "primary", "publicIPAddress"}, {"properties.ipConfigurations.properties.provisioningState", "properties.ipConfigurations.properties.privateIPAddressVersion", "properties.ipConfigurations.properties.privateIPAllocationMethod", "properties.ipConfigurations.properties.subnet", "properties.ipConfigurations.properties.privateIPAddress", "properties.ipConfigurations.properties.primary", "properties.ipConfigurations.properties.publicIPAddress"}), - #"Expanded properties.ipConfigurations.properties.publicIPAddress" = Table.ExpandRecordColumn(#"Expanded properties.ipConfigurations.properties", "properties.ipConfigurations.properties.publicIPAddress", {"id"}, {"properties.ipConfigurations.properties.publicIPAddress.id"}), - #"Expanded properties.networkSecurityGroup" = Table.ExpandRecordColumn(#"Expanded properties.ipConfigurations.properties.publicIPAddress", "properties.networkSecurityGroup", {"id"}, {"properties.networkSecurityGroup.id"}) + | extend + ['properties.provisioningState'] = properties.provisioningState, + ['properties.resourceGuid'] = properties.resourceGuid, + ['properties.enableAcceleratedNetworking'] = properties.enableAcceleratedNetworking, + ['properties.disableTcpStateTracking'] = properties.disableTcpStateTracking, + ['properties.vnetEncryptionSupported'] = properties.vnetEncryptionSupported, + ['properties.networkSecurityGroup'] = properties.networkSecurityGroup, + ['properties.ipConfigurations'] = properties.ipConfigurations, + ['properties.enableIPForwarding'] = properties.enableIPForwarding, + ['properties.tapConfigurations'] = properties.tapConfigurations, + ['properties.hostedWorkloads'] = properties.hostedWorkloads, + ['properties.allowPort25Out'] = properties.allowPort25Out, + ['properties.auxiliaryMode'] = properties.auxiliaryMode, + ['properties.dnsSettings'] = properties.dnsSettings, + ['properties.auxiliarySku'] = properties.auxiliarySku, + ['properties.macAddress'] = properties.macAddress, + ['properties.nicType'] = properties.nicType, + ['properties.primary'] = properties.primary, + ['properties.virtualMachine'] = properties.virtualMachine, + ['properties.virtualMachine.id'] = properties.virtualMachine.id + | mv-expand ['properties.ipConfigurations'] + | extend + ['properties.ipConfigurations.type'] = properties.ipConfigurations.type, + ['properties.ipConfigurations.name'] = properties.ipConfigurations.name, + ['properties.ipConfigurations.properties'] = properties.ipConfigurations.properties, + ['properties.ipConfigurations.id'] = properties.ipConfigurations.id, + ['properties.ipConfigurations.etag'] = properties.ipConfigurations.etag, + ['properties.ipConfigurations.properties.provisioningState'] = properties.ipConfigurations.properties.provisioningState, + ['properties.ipConfigurations.properties.privateIPAddressVersion'] = properties.ipConfigurations.properties.privateIPAddressVersion, + ['properties.ipConfigurations.properties.privateIPAllocationMethod'] = properties.ipConfigurations.properties.privateIPAllocationMethod, + ['properties.ipConfigurations.properties.subnet'] = properties.ipConfigurations.properties.subnet, + ['properties.ipConfigurations.properties.privateIPAddress'] = properties.ipConfigurations.properties.privateIPAddress, + ['properties.ipConfigurations.properties.primary'] = properties.ipConfigurations.properties.primary, + ['properties.ipConfigurations.properties.publicIPAddress'] = properties.ipConfigurations.properties.publicIPAddress, + ['properties.ipConfigurations.properties.publicIPAddress.id'] = properties.ipConfigurations.properties.publicIPAddress.id, + ['properties.networkSecurityGroup.id'] = properties.networkSecurityGroup.id + " & ftk_DemoFilter(), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]) in - #"Expanded properties.networkSecurityGroup" + Source annotation PBI_NavigationStepName = Navigation diff --git a/src/power-bi/kql/Shared.Dataset/definition/tables/NetworkSecurityGroups.tmdl b/src/power-bi/kql/Shared.Dataset/definition/tables/NetworkSecurityGroups.tmdl index 27b2a2bb6..d3be8830d 100644 --- a/src/power-bi/kql/Shared.Dataset/definition/tables/NetworkSecurityGroups.tmdl +++ b/src/power-bi/kql/Shared.Dataset/definition/tables/NetworkSecurityGroups.tmdl @@ -441,34 +441,124 @@ table NetworkSecurityGroups annotation SummarizationSetBy = Automatic + column properties + dataType: string + lineageTag: 3210063e-4d1f-4710-99a1-0bddda8feae2 + summarizeBy: none + sourceColumn: properties + + annotation SummarizationSetBy = Automatic + + column 'properties.networkInterfaces' + dataType: string + lineageTag: 36b6d40e-5d28-4470-9a26-4819672752a3 + summarizeBy: none + sourceColumn: properties.networkInterfaces + + annotation SummarizationSetBy = Automatic + + column 'properties.defaultSecurityRules' + dataType: string + lineageTag: c470ef8d-add2-4199-b732-522d56f56eca + summarizeBy: none + sourceColumn: properties.defaultSecurityRules + + annotation SummarizationSetBy = Automatic + + column 'properties.securityRules' + dataType: string + lineageTag: 43a82151-c0ed-4e50-9fb3-36ff0171e4fb + summarizeBy: none + sourceColumn: properties.securityRules + + annotation SummarizationSetBy = Automatic + + column 'properties.defaultSecurityRules.properties' + dataType: string + lineageTag: 3ae07f67-708a-4502-80d7-1469cad5ec4a + summarizeBy: none + sourceColumn: properties.defaultSecurityRules.properties + + annotation SummarizationSetBy = Automatic + + column 'properties.securityRules.properties' + dataType: string + lineageTag: fd4b41d8-d111-4ea9-a58f-fedec6ae5d8d + summarizeBy: none + sourceColumn: properties.securityRules.properties + + annotation SummarizationSetBy = Automatic + partition NetworkSecurityGroups = m mode: import queryGroup: 'Resource Graph' source = let - Source = AzureResourceGraph.Query(" + query = " Resources | where type =~ 'microsoft.network/networksecuritygroups' - " & ftk_DemoFilter(), "Tenant", null, null, [resultTruncated = false]), - #"Expanded properties" = Table.ExpandRecordColumn(Source, "properties", {"provisioningState", "networkInterfaces", "resourceGuid", "defaultSecurityRules", "securityRules"}, {"properties.provisioningState", "properties.networkInterfaces", "properties.resourceGuid", "properties.defaultSecurityRules", "properties.securityRules"}), - #"Expanded properties.networkInterfaces" = Table.ExpandListColumn(#"Expanded properties", "properties.networkInterfaces"), - #"Expanded properties.networkInterfaces 1" = Table.ExpandRecordColumn(#"Expanded properties.networkInterfaces", "properties.networkInterfaces", {"id"}, {"properties.networkInterfaces.id"}), - #"Expanded properties.defaultSecurityRules" = Table.ExpandListColumn(#"Expanded properties.networkInterfaces 1", "properties.defaultSecurityRules"), - #"Expanded properties.defaultSecurityRules 1" = Table.ExpandRecordColumn(#"Expanded properties.defaultSecurityRules", "properties.defaultSecurityRules", {"type", "properties", "name", "id", "etag"}, {"properties.defaultSecurityRules.type", "properties.defaultSecurityRules.properties", "properties.defaultSecurityRules.name", "properties.defaultSecurityRules.id", "properties.defaultSecurityRules.etag"}), - #"Expanded properties.defaultSecurityRules.properties" = Table.ExpandRecordColumn(#"Expanded properties.defaultSecurityRules 1", "properties.defaultSecurityRules.properties", {"provisioningState", "destinationAddressPrefixes", "destinationAddressPrefix", "destinationPortRanges", "sourceAddressPrefixes", "sourceAddressPrefix", "destinationPortRange", "sourcePortRanges", "sourcePortRange", "description", "protocol", "direction", "priority", "access"}, {"properties.defaultSecurityRules.properties.provisioningState", "properties.defaultSecurityRules.properties.destinationAddressPrefixes", "properties.defaultSecurityRules.properties.destinationAddressPrefix", "properties.defaultSecurityRules.properties.destinationPortRanges", "properties.defaultSecurityRules.properties.sourceAddressPrefixes", "properties.defaultSecurityRules.properties.sourceAddressPrefix", "properties.defaultSecurityRules.properties.destinationPortRange", "properties.defaultSecurityRules.properties.sourcePortRanges", "properties.defaultSecurityRules.properties.sourcePortRange", "properties.defaultSecurityRules.properties.description", "properties.defaultSecurityRules.properties.protocol", "properties.defaultSecurityRules.properties.direction", "properties.defaultSecurityRules.properties.priority", "properties.defaultSecurityRules.properties.access"}), - #"Expanded properties.defaultSecurityRules.properties.destinationAddressPrefixes" = Table.ExpandListColumn(#"Expanded properties.defaultSecurityRules.properties", "properties.defaultSecurityRules.properties.destinationAddressPrefixes"), - #"Expanded properties.defaultSecurityRules.properties.destinationPortRanges" = Table.ExpandListColumn(#"Expanded properties.defaultSecurityRules.properties.destinationAddressPrefixes", "properties.defaultSecurityRules.properties.destinationPortRanges"), - #"Expanded properties.defaultSecurityRules.properties.sourceAddressPrefixes" = Table.ExpandListColumn(#"Expanded properties.defaultSecurityRules.properties.destinationPortRanges", "properties.defaultSecurityRules.properties.sourceAddressPrefixes"), - #"Expanded properties.defaultSecurityRules.properties.sourcePortRanges" = Table.ExpandListColumn(#"Expanded properties.defaultSecurityRules.properties.sourceAddressPrefixes", "properties.defaultSecurityRules.properties.sourcePortRanges"), - #"Expanded properties.securityRules" = Table.ExpandListColumn(#"Expanded properties.defaultSecurityRules.properties.sourcePortRanges", "properties.securityRules"), - #"Expanded properties.securityRules 1" = Table.ExpandRecordColumn(#"Expanded properties.securityRules", "properties.securityRules", {"type", "properties", "name", "id", "etag"}, {"properties.securityRules.type", "properties.securityRules.properties", "properties.securityRules.name", "properties.securityRules.id", "properties.securityRules.etag"}), - #"Expanded properties.securityRules.properties" = Table.ExpandRecordColumn(#"Expanded properties.securityRules 1", "properties.securityRules.properties", {"provisioningState", "destinationAddressPrefixes", "destinationAddressPrefix", "destinationPortRanges", "sourceAddressPrefixes", "sourceAddressPrefix", "destinationPortRange", "sourcePortRanges", "sourcePortRange", "protocol", "direction", "priority", "access"}, {"properties.securityRules.properties.provisioningState", "properties.securityRules.properties.destinationAddressPrefixes", "properties.securityRules.properties.destinationAddressPrefix", "properties.securityRules.properties.destinationPortRanges", "properties.securityRules.properties.sourceAddressPrefixes", "properties.securityRules.properties.sourceAddressPrefix", "properties.securityRules.properties.destinationPortRange", "properties.securityRules.properties.sourcePortRanges", "properties.securityRules.properties.sourcePortRange", "properties.securityRules.properties.protocol", "properties.securityRules.properties.direction", "properties.securityRules.properties.priority", "properties.securityRules.properties.access"}), - #"Expanded properties.securityRules.properties.destinationAddressPrefixes" = Table.ExpandListColumn(#"Expanded properties.securityRules.properties", "properties.securityRules.properties.destinationAddressPrefixes"), - #"Expanded properties.securityRules.properties.destinationPortRanges" = Table.ExpandListColumn(#"Expanded properties.securityRules.properties.destinationAddressPrefixes", "properties.securityRules.properties.destinationPortRanges"), - #"Expanded properties.securityRules.properties.sourceAddressPrefixes" = Table.ExpandListColumn(#"Expanded properties.securityRules.properties.destinationPortRanges", "properties.securityRules.properties.sourceAddressPrefixes"), - #"Expanded properties.securityRules.properties.sourcePortRanges" = Table.ExpandListColumn(#"Expanded properties.securityRules.properties.sourceAddressPrefixes", "properties.securityRules.properties.sourcePortRanges") + | extend + ['properties.provisioningState'] = properties.provisioningState, + ['properties.networkInterfaces'] = properties.networkInterfaces, + ['properties.resourceGuid'] = properties.resourceGuid, + ['properties.defaultSecurityRules'] = properties.defaultSecurityRules, + ['properties.securityRules'] = properties.securityRules + | mv-expand ['properties.networkInterfaces'] + | extend + ['properties.networkInterfaces.id'] = properties.networkInterfaces.id + | mv-expand ['properties.defaultSecurityRules'] + | extend + ['properties.defaultSecurityRules.type'] = properties.defaultSecurityRules.type, + ['properties.defaultSecurityRules.properties'] = properties.defaultSecurityRules.properties, + ['properties.defaultSecurityRules.name'] = properties.defaultSecurityRules.name, + ['properties.defaultSecurityRules.id'] = properties.defaultSecurityRules.id, + ['properties.defaultSecurityRules.etag'] = properties.defaultSecurityRules.etag, + ['properties.defaultSecurityRules.properties.provisioningState'] = properties.defaultSecurityRules.properties.provisioningState, + ['properties.defaultSecurityRules.properties.destinationAddressPrefixes'] = properties.defaultSecurityRules.properties.destinationAddressPrefixes, + ['properties.defaultSecurityRules.properties.destinationAddressPrefix'] = properties.defaultSecurityRules.properties.destinationAddressPrefix, + ['properties.defaultSecurityRules.properties.destinationPortRanges'] = properties.defaultSecurityRules.properties.destinationPortRanges, + ['properties.defaultSecurityRules.properties.sourceAddressPrefixes'] = properties.defaultSecurityRules.properties.sourceAddressPrefixes, + ['properties.defaultSecurityRules.properties.sourceAddressPrefix'] = properties.defaultSecurityRules.properties.sourceAddressPrefix, + ['properties.defaultSecurityRules.properties.destinationPortRange'] = properties.defaultSecurityRules.properties.destinationPortRange, + ['properties.defaultSecurityRules.properties.sourcePortRanges'] = properties.defaultSecurityRules.properties.sourcePortRanges, + ['properties.defaultSecurityRules.properties.sourcePortRange'] = properties.defaultSecurityRules.properties.sourcePortRange, + ['properties.defaultSecurityRules.properties.description'] = properties.defaultSecurityRules.properties.description, + ['properties.defaultSecurityRules.properties.protocol'] = properties.defaultSecurityRules.properties.protocol, + ['properties.defaultSecurityRules.properties.direction'] = properties.defaultSecurityRules.properties.direction, + ['properties.defaultSecurityRules.properties.priority'] = properties.defaultSecurityRules.properties.priority, + ['properties.defaultSecurityRules.properties.access'] = properties.defaultSecurityRules.properties.access + | mv-expand ['properties.defaultSecurityRules.properties.destinationAddressPrefixes'] + | mv-expand ['properties.defaultSecurityRules.properties.destinationPortRanges'] + | mv-expand ['properties.defaultSecurityRules.properties.sourceAddressPrefixes'] + | mv-expand ['properties.defaultSecurityRules.properties.sourcePortRanges'] + | mv-expand ['properties.securityRules'] + | extend + ['properties.securityRules.type'] = properties.securityRules.type, + ['properties.securityRules.properties'] = properties.securityRules.properties, + ['properties.securityRules.name'] = properties.securityRules.name, + ['properties.securityRules.id'] = properties.securityRules.id, + ['properties.securityRules.etag'] = properties.securityRules.etag, + ['properties.securityRules.properties.provisioningState'] = properties.securityRules.properties.provisioningState, + ['properties.securityRules.properties.destinationAddressPrefixes'] = properties.securityRules.properties.destinationAddressPrefixes, + ['properties.securityRules.properties.destinationAddressPrefix'] = properties.securityRules.properties.destinationAddressPrefix, + ['properties.securityRules.properties.destinationPortRanges'] = properties.securityRules.properties.destinationPortRanges, + ['properties.securityRules.properties.sourceAddressPrefixes'] = properties.securityRules.properties.sourceAddressPrefixes, + ['properties.securityRules.properties.sourceAddressPrefix'] = properties.securityRules.properties.sourceAddressPrefix, + ['properties.securityRules.properties.destinationPortRange'] = properties.securityRules.properties.destinationPortRange, + ['properties.securityRules.properties.sourcePortRanges'] = properties.securityRules.properties.sourcePortRanges, + ['properties.securityRules.properties.sourcePortRange'] = properties.securityRules.properties.sourcePortRange, + ['properties.securityRules.properties.protocol'] = properties.securityRules.properties.protocol, + ['properties.securityRules.properties.direction'] = properties.securityRules.properties.direction, + ['properties.securityRules.properties.priority'] = properties.securityRules.properties.priority, + ['properties.securityRules.properties.access'] = properties.securityRules.properties.access + | mv-expand ['properties.securityRules.properties.destinationAddressPrefixes'] + | mv-expand ['properties.securityRules.properties.destinationPortRanges'] + | mv-expand ['properties.securityRules.properties.sourceAddressPrefixes'] + | mv-expand ['properties.securityRules.properties.sourcePortRanges'] + " & ftk_DemoFilter(), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]) in - #"Expanded properties.securityRules.properties.sourcePortRanges" + Source annotation PBI_NavigationStepName = Navigation diff --git a/src/power-bi/kql/Shared.Dataset/definition/tables/PolicyAssignments.tmdl b/src/power-bi/kql/Shared.Dataset/definition/tables/PolicyAssignments.tmdl index ec119591a..1b0078d20 100644 --- a/src/power-bi/kql/Shared.Dataset/definition/tables/PolicyAssignments.tmdl +++ b/src/power-bi/kql/Shared.Dataset/definition/tables/PolicyAssignments.tmdl @@ -337,21 +337,73 @@ table PolicyAssignments annotation SummarizationSetBy = Automatic + column properties + dataType: string + lineageTag: 49ce1144-59d6-4c26-90ab-e17dc2fa4b82 + summarizeBy: none + sourceColumn: properties + + annotation SummarizationSetBy = Automatic + + column identity + dataType: string + lineageTag: c197f4e1-41f0-4234-a747-841344c1f798 + summarizeBy: none + sourceColumn: identity + + annotation SummarizationSetBy = Automatic + + column 'properties.metadata' + dataType: string + lineageTag: c6b18c20-e706-4150-bf51-30f3366b6559 + summarizeBy: none + sourceColumn: properties.metadata + + annotation SummarizationSetBy = Automatic + partition PolicyAssignments = m mode: import queryGroup: 'Resource Graph' source = let - Source = AzureResourceGraph.Query( - "policyResources + query = " + policyResources | where type =~'Microsoft.Authorization/PolicyAssignments' - " & ftk_DemoFilter(), "Tenant", null, null, [resultTruncated = false]), - #"Expanded properties" = Table.ExpandRecordColumn(Source, "properties", {"policyDefinitionId", "effectiveDefinitionVersion", "latestDefinitionVersion", "nonComplianceMessages", "definitionVersion", "resourceSelectors", "enforcementMode", "assignmentType", "description", "displayName", "parameters", "notScopes", "overrides", "metadata", "scope"}, {"properties.policyDefinitionId", "properties.effectiveDefinitionVersion", "properties.latestDefinitionVersion", "properties.nonComplianceMessages", "properties.definitionVersion", "properties.resourceSelectors", "properties.enforcementMode", "properties.assignmentType", "properties.description", "properties.displayName", "properties.parameters", "properties.notScopes", "properties.overrides", "properties.metadata", "properties.scope"}), - #"Expanded properties.metadata" = Table.ExpandRecordColumn(#"Expanded properties", "properties.metadata", {"createdOn", "createdBy", "assignedBy", "parameterScopes", "updatedOn", "updatedBy", "category", "managedByResourceId", "securityCenter", "excludedOutOfTheBoxStandards"}, {"properties.metadata.createdOn", "properties.metadata.createdBy", "properties.metadata.assignedBy", "properties.metadata.parameterScopes", "properties.metadata.updatedOn", "properties.metadata.updatedBy", "properties.metadata.category", "properties.metadata.managedByResourceId", "properties.metadata.securityCenter", "properties.metadata.excludedOutOfTheBoxStandards"}), - #"Expanded identity" = Table.ExpandRecordColumn(#"Expanded properties.metadata", "identity", {"userAssignedIdentities", "principalId", "tenantId", "type"}, {"identity.userAssignedIdentities", "identity.principalId", "identity.tenantId", "identity.type"}), - #"Expanded properties.notScopes" = Table.ExpandListColumn(#"Expanded identity", "properties.notScopes") + | extend + ['properties.policyDefinitionId'] = properties.policyDefinitionId, + ['properties.effectiveDefinitionVersion'] = properties.effectiveDefinitionVersion, + ['properties.latestDefinitionVersion'] = properties.latestDefinitionVersion, + ['properties.nonComplianceMessages'] = properties.nonComplianceMessages, + ['properties.definitionVersion'] = properties.definitionVersion, + ['properties.resourceSelectors'] = properties.resourceSelectors, + ['properties.enforcementMode'] = properties.enforcementMode, + ['properties.assignmentType'] = properties.assignmentType, + ['properties.description'] = properties.description, + ['properties.displayName'] = properties.displayName, + ['properties.parameters'] = properties.parameters, + ['properties.notScopes'] = properties.notScopes, + ['properties.overrides'] = properties.overrides, + ['properties.metadata'] = properties.metadata, + ['properties.scope'] = properties.scope, + ['properties.metadata.createdOn'] = properties.metadata.createdOn, + ['properties.metadata.createdBy'] = properties.metadata.createdBy, + ['properties.metadata.assignedBy'] = properties.metadata.assignedBy, + ['properties.metadata.parameterScopes'] = properties.metadata.parameterScopes, + ['properties.metadata.updatedOn'] = properties.metadata.updatedOn, + ['properties.metadata.updatedBy'] = properties.metadata.updatedBy, + ['properties.metadata.category'] = properties.metadata.category, + ['properties.metadata.managedByResourceId'] = properties.metadata.managedByResourceId, + ['properties.metadata.securityCenter'] = properties.metadata.securityCenter, + ['properties.metadata.excludedOutOfTheBoxStandards'] = properties.metadata.excludedOutOfTheBoxStandards, + ['identity.userAssignedIdentities'] = identity.userAssignedIdentities, + ['identity.principalId'] = identity.principalId, + ['identity.tenantId'] = identity.tenantId, + ['identity.type'] = identity.type + | mv-expand ['properties.notScopes'] + " & ftk_DemoFilter(), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]) in - #"Expanded properties.notScopes" + Source annotation PBI_NavigationStepName = Navigation diff --git a/src/power-bi/kql/Shared.Dataset/definition/tables/PolicyDefinitions.tmdl b/src/power-bi/kql/Shared.Dataset/definition/tables/PolicyDefinitions.tmdl index 782b1b095..a0c4d5d64 100644 --- a/src/power-bi/kql/Shared.Dataset/definition/tables/PolicyDefinitions.tmdl +++ b/src/power-bi/kql/Shared.Dataset/definition/tables/PolicyDefinitions.tmdl @@ -201,18 +201,37 @@ table PolicyDefinitions annotation SummarizationSetBy = Automatic + column properties + dataType: string + lineageTag: 1723b9a7-0fe7-4fea-b5e3-bf636be87bf2 + summarizeBy: none + sourceColumn: properties + + annotation SummarizationSetBy = Automatic + partition PolicyDefinitions = m mode: import queryGroup: 'Resource Graph' source = let - Source = AzureResourceGraph.Query( - "policyResources + query = " + policyResources | where type =~'Microsoft.Authorization/PolicySetDefinitions' or type =~'Microsoft.Authorization/PolicyDefinitions' - " & ftk_DemoFilter(), "Tenant", null, null, [resultTruncated = false]), - #"Expanded properties" = Table.ExpandRecordColumn(Source, "properties", {"displayName", "policyType", "description", "metadata", "version", "parameters", "policyDefinitions", "policyDefinitionGroups", "versions", "oldVersions"}, {"properties.displayName", "properties.policyType", "properties.description", "properties.metadata", "properties.version", "properties.parameters", "properties.policyDefinitions", "properties.policyDefinitionGroups", "properties.versions", "properties.oldVersions"}) + | extend + ['properties.displayName'] = properties.displayName, + ['properties.policyType'] = properties.policyType, + ['properties.description'] = properties.description, + ['properties.metadata'] = properties.metadata, + ['properties.version'] = properties.version, + ['properties.parameters'] = properties.parameters, + ['properties.policyDefinitions'] = properties.policyDefinitions, + ['properties.policyDefinitionGroups'] = properties.policyDefinitionGroups, + ['properties.versions'] = properties.versions, + ['properties.oldVersions'] = properties.oldVersions + " & ftk_DemoFilter(), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]) in - #"Expanded properties" + Source annotation PBI_NavigationStepName = Navigation diff --git a/src/power-bi/kql/Shared.Dataset/definition/tables/PolicyStates.tmdl b/src/power-bi/kql/Shared.Dataset/definition/tables/PolicyStates.tmdl index a23c0d3b0..4593590a9 100644 --- a/src/power-bi/kql/Shared.Dataset/definition/tables/PolicyStates.tmdl +++ b/src/power-bi/kql/Shared.Dataset/definition/tables/PolicyStates.tmdl @@ -328,19 +328,52 @@ table PolicyStates annotation SummarizationSetBy = Automatic + column properties + dataType: string + lineageTag: 1c44fa0d-9a5d-4620-9d4b-448c7f806d0b + summarizeBy: none + sourceColumn: properties + + annotation SummarizationSetBy = Automatic + partition PolicyStates = m mode: import queryGroup: 'Resource Graph' source = let - Source = AzureResourceGraph.Query( - "policyResources + query = " + policyResources | where type =~'Microsoft.PolicyInsights/PolicyStates' - " & ftk_DemoFilter(), "Tenant", null, null, [resultTruncated = false]), - #"Expanded properties" = Table.ExpandRecordColumn(Source, "properties", {"policyAssignmentParameters", "policyDefinitionAction", "policyAssignmentScope", "policyAssignmentName", "policyDefinitionName", "policyDefinitionReferenceId", "policyDefinitionId", "managementGroupIds", "policyAssignmentId", "policySetDefinitionName", "complianceState", "policySetDefinitionId", "subscriptionId", "resourceType", "stateWeight", "resourceGroup", "resourceId", "timestamp", "isDeleted", "resourceLocation", "policySetDefinitionCategory", "policyDefinitionGroupNames", "complianceReasonCode", "stateDetails"}, {"properties.policyAssignmentParameters", "properties.policyDefinitionAction", "properties.policyAssignmentScope", "properties.policyAssignmentName", "properties.policyDefinitionName", "properties.policyDefinitionReferenceId", "properties.policyDefinitionId", "properties.managementGroupIds", "properties.policyAssignmentId", "properties.policySetDefinitionName", "properties.complianceState", "properties.policySetDefinitionId", "properties.subscriptionId", "properties.resourceType", "properties.stateWeight", "properties.resourceGroup", "properties.resourceId", "properties.timestamp", "properties.isDeleted", "properties.resourceLocation", "properties.policySetDefinitionCategory", "properties.policyDefinitionGroupNames", "properties.complianceReasonCode", "properties.stateDetails"}), - #"Extracted Text After Delimiter" = Table.TransformColumns(#"Expanded properties", {{"properties.policyAssignmentScope", each Text.AfterDelimiter(_, "/", {0, RelativePosition.FromEnd}), type text}}) + | extend + ['properties.policyAssignmentParameters'] = properties.policyAssignmentParameters, + ['properties.policyDefinitionAction'] = properties.policyDefinitionAction, + ['properties.policyAssignmentScope'] = properties.policyAssignmentScope, + ['properties.policyAssignmentName'] = properties.policyAssignmentName, + ['properties.policyDefinitionName'] = properties.policyDefinitionName, + ['properties.policyDefinitionReferenceId'] = properties.policyDefinitionReferenceId, + ['properties.policyDefinitionId'] = properties.policyDefinitionId, + ['properties.managementGroupIds'] = properties.managementGroupIds, + ['properties.policyAssignmentId'] = properties.policyAssignmentId, + ['properties.policySetDefinitionName'] = properties.policySetDefinitionName, + ['properties.complianceState'] = properties.complianceState, + ['properties.policySetDefinitionId'] = properties.policySetDefinitionId, + ['properties.subscriptionId'] = properties.subscriptionId, + ['properties.resourceType'] = properties.resourceType, + ['properties.stateWeight'] = properties.stateWeight, + ['properties.resourceGroup'] = properties.resourceGroup, + ['properties.resourceId'] = properties.resourceId, + ['properties.timestamp'] = properties.timestamp, + ['properties.isDeleted'] = properties.isDeleted, + ['properties.resourceLocation'] = properties.resourceLocation, + ['properties.policySetDefinitionCategory'] = properties.policySetDefinitionCategory, + ['properties.policyDefinitionGroupNames'] = properties.policyDefinitionGroupNames, + ['properties.complianceReasonCode'] = properties.complianceReasonCode, + ['properties.stateDetails'] = properties.stateDetails + " & ftk_DemoFilter(), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]), + Types = Table.TransformColumns(Source, {{"properties.policyAssignmentScope", each Text.AfterDelimiter(_, "/", {0, RelativePosition.FromEnd}), type text}}, null, MissingField.Ignore) in - #"Extracted Text After Delimiter" + Types annotation PBI_NavigationStepName = Navigation diff --git a/src/power-bi/kql/Shared.Dataset/definition/tables/PublicIPAddresses.tmdl b/src/power-bi/kql/Shared.Dataset/definition/tables/PublicIPAddresses.tmdl index 975d7acc8..d61a82fa2 100644 --- a/src/power-bi/kql/Shared.Dataset/definition/tables/PublicIPAddresses.tmdl +++ b/src/power-bi/kql/Shared.Dataset/definition/tables/PublicIPAddresses.tmdl @@ -185,18 +185,35 @@ table PublicIPAddresses annotation SummarizationSetBy = Automatic + column properties + dataType: string + lineageTag: 465b0574-de95-46a1-8959-18d2eb167b28 + summarizeBy: none + sourceColumn: properties + + annotation SummarizationSetBy = Automatic + partition PublicIPAddresses = m mode: import queryGroup: 'Resource Graph' source = let - Source = AzureResourceGraph.Query( - "Resources + query = " + Resources | where type =~ 'microsoft.network/publicipaddresses' - " & ftk_DemoFilter(), "Tenant", null, null, [resultTruncated = false]), - #"Expanded properties" = Table.ExpandRecordColumn(Source, "properties", {"provisioningState", "resourceGuid", "idleTimeoutInMinutes", "publicIPAllocationMethod", "publicIPAddressVersion", "ipAddress", "ipConfiguration", "ipTags"}, {"properties.provisioningState", "properties.resourceGuid", "properties.idleTimeoutInMinutes", "properties.publicIPAllocationMethod", "properties.publicIPAddressVersion", "properties.ipAddress", "properties.ipConfiguration", "properties.ipTags"}) + | extend + ['properties.provisioningState'] = properties.provisioningState, + ['properties.resourceGuid'] = properties.resourceGuid, + ['properties.idleTimeoutInMinutes'] = properties.idleTimeoutInMinutes, + ['properties.publicIPAllocationMethod'] = properties.publicIPAllocationMethod, + ['properties.publicIPAddressVersion'] = properties.publicIPAddressVersion, + ['properties.ipAddress'] = properties.ipAddress, + ['properties.ipConfiguration'] = properties.ipConfiguration, + ['properties.ipTags'] = properties.ipTags + " & ftk_DemoFilter(), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]) in - #"Expanded properties" + Source annotation PBI_NavigationStepName = Navigation diff --git a/src/power-bi/kql/Shared.Dataset/definition/tables/ReservationRecommendations.tmdl b/src/power-bi/kql/Shared.Dataset/definition/tables/ReservationRecommendations.tmdl index 8badcbd36..1d41dceda 100644 --- a/src/power-bi/kql/Shared.Dataset/definition/tables/ReservationRecommendations.tmdl +++ b/src/power-bi/kql/Shared.Dataset/definition/tables/ReservationRecommendations.tmdl @@ -184,6 +184,41 @@ table ReservationRecommendations annotation SummarizationSetBy = Automatic + column x_BreakEvenDate + dataType: dateTime + formatString: Mmm d, yyyy + sourceProviderType: datetimeoffset + lineageTag: 6a5719f2-06a5-406a-b4a4-7f68bd76b36d + summarizeBy: none + sourceColumn: x_BreakEvenDate + + annotation SummarizationSetBy = Automatic + + annotation PBI_FormatHint = {"isCustom":true} + + column x_BreakEvenMonths + dataType: double + formatString: 0.0 mo + sourceProviderType: decimal + lineageTag: b2eb1130-d5ea-40cb-8f55-1ceb40f7ce8e + summarizeBy: sum + sourceColumn: x_BreakEvenMonths + + annotation SummarizationSetBy = Automatic + + annotation PBI_FormatHint = {"isCustom":true} + + column x_CommitmentDiscountSavingsDailyRate + dataType: double + sourceProviderType: decimal + lineageTag: 89c50515-c080-4d04-8996-6b9d4617529b + summarizeBy: sum + sourceColumn: x_CommitmentDiscountSavingsDailyRate + + annotation SummarizationSetBy = Automatic + + annotation PBI_FormatHint = {"isGeneralNumber":true} + partition ReservationRecommendations = m mode: directQuery queryGroup: 'Data Explorer' @@ -193,8 +228,6 @@ table ReservationRecommendations Recommendations_v1_0 | where x_SourceProvider == 'Microsoft' and x_SourceType == 'ReservationRecommendations' - | as rec - | where x_RecommendationDate in ((rec | distinct x_RecommendationDate | order by x_RecommendationDate desc | limit 1)) | extend RegionId = tostring(x_RecommendationDetails.RegionId) | extend RegionName = tostring(x_RecommendationDetails.RegionName) | extend x_CommitmentDiscountSavings = x_EffectiveCostBefore - x_EffectiveCostAfter @@ -202,9 +235,14 @@ table ReservationRecommendations | extend x_CommitmentDiscountNormalizedSize = tostring(x_RecommendationDetails.CommitmentDiscountNormalizedSize) | extend x_SkuTerm = toint(x_RecommendationDetails.SkuTerm) | extend x_SkuMeterId = tostring(x_RecommendationDetails.SkuMeterId) + | summarize arg_max(x_RecommendationDate, *) by x_CommitmentDiscountNormalizedSize, x_SkuMeterId, x_SkuTerm, RegionId,tostring(x_RecommendationDetails.CommitmentDiscountNormalizedGroup) + | extend x_BreakEvenMonths = x_EffectiveCostAfter * x_SkuTerm / x_EffectiveCostBefore + | extend x_BreakEvenDate = startofday(now()) + 1d + toint(x_BreakEvenMonths * 30.437) * 1d | project RegionId, RegionName = iff(isempty(RegionName), RegionId, RegionName), + x_BreakEvenDate, + x_BreakEvenMonths, x_CommitmentDiscountKey = strcat(x_CommitmentDiscountNormalizedSize, x_SkuMeterId), x_CommitmentDiscountNormalizedGroup = tostring(x_RecommendationDetails.CommitmentDiscountNormalizedGroup), x_CommitmentDiscountNormalizedRatio = tostring(x_RecommendationDetails.CommitmentDiscountNormalizedRatio), @@ -212,6 +250,7 @@ table ReservationRecommendations x_CommitmentDiscountPercent = 1.0 * x_CommitmentDiscountSavings / x_EffectiveCostBefore * 100, x_CommitmentDiscountResourceType = tostring(x_RecommendationDetails.CommitmentDiscountResourceType), x_CommitmentDiscountSavings, + x_CommitmentDiscountSavingsDailyRate = x_CommitmentDiscountSavings / (x_SkuTerm - x_BreakEvenMonths) / (365/12), x_CommitmentDiscountScope = case( x_CommitmentDiscountScope == 'Single', 'Subscription', x_CommitmentDiscountScope diff --git a/src/power-bi/kql/Shared.Dataset/definition/tables/Resources.tmdl b/src/power-bi/kql/Shared.Dataset/definition/tables/Resources.tmdl index 15cb8b584..e8b8582f1 100644 --- a/src/power-bi/kql/Shared.Dataset/definition/tables/Resources.tmdl +++ b/src/power-bi/kql/Shared.Dataset/definition/tables/Resources.tmdl @@ -308,9 +308,7 @@ table Resources queryGroup: 'Resource Graph' source = let - Source = AzureResourceGraph.Query(" - - + query = " resources | extend id = tolower(id), @@ -333,9 +331,8 @@ table Resources ['accessTier'] = properties.accessTier, ['isHnsEnabled'] = properties.isHnsEnabled, ['isBlueShiftAccount'] = properties.isBlueShiftAccount - - - " & ftk_DemoFilter(), "Tenant", null, null, [resultTruncated = false]) + " & ftk_DemoFilter(), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]) in Source diff --git a/src/power-bi/kql/Shared.Dataset/definition/tables/SqlDatabases.tmdl b/src/power-bi/kql/Shared.Dataset/definition/tables/SqlDatabases.tmdl index 9617e42ee..6169ad949 100644 --- a/src/power-bi/kql/Shared.Dataset/definition/tables/SqlDatabases.tmdl +++ b/src/power-bi/kql/Shared.Dataset/definition/tables/SqlDatabases.tmdl @@ -314,20 +314,61 @@ table SqlDatabases annotation SummarizationSetBy = Automatic + column sku + dataType: string + lineageTag: d7a4cc1a-1ec2-4d53-9fbc-67bd9909b432 + summarizeBy: none + sourceColumn: sku + + annotation SummarizationSetBy = Automatic + + column properties + dataType: string + lineageTag: ce2fc334-a9de-4987-9251-0069e7208ada + summarizeBy: none + sourceColumn: properties + + annotation SummarizationSetBy = Automatic + partition SqlDatabases = m mode: import queryGroup: 'Resource Graph' source = let - Source = AzureResourceGraph.Query( - "resources + query = " + resources | where type == 'microsoft.sql/servers/databases' - " & ftk_DemoFilter(), "Tenant", null, null, [resultTruncated = false]), - #"Expanded sku" = Table.ExpandRecordColumn(Source, "sku", {"name", "tier", "capacity", "family"}, {"sku.name", "sku.tier", "sku.capacity", "sku.family"}), - #"Expanded properties" = Table.ExpandRecordColumn(#"Expanded sku", "properties", {"status", "requestedBackupStorageRedundancy", "currentBackupStorageRedundancy", "requestedServiceObjectiveName", "currentServiceObjectiveName", "maintenanceConfigurationId", "defaultSecondaryLocation", "isInfraEncryptionEnabled", "earliestRestoreDate", "zoneRedundant", "availabilityZone", "catalogCollation", "creationDate", "collation", "licenseType", "maxSizeBytes", "isLedgerOn", "databaseId", "currentSku", "readScale", "maxLogSizeBytes"}, {"properties.status", "properties.requestedBackupStorageRedundancy", "properties.currentBackupStorageRedundancy", "properties.requestedServiceObjectiveName", "properties.currentServiceObjectiveName", "properties.maintenanceConfigurationId", "properties.defaultSecondaryLocation", "properties.isInfraEncryptionEnabled", "properties.earliestRestoreDate", "properties.zoneRedundant", "properties.availabilityZone", "properties.catalogCollation", "properties.creationDate", "properties.collation", "properties.licenseType", "properties.maxSizeBytes", "properties.isLedgerOn", "properties.databaseId", "properties.currentSku", "properties.readScale", "properties.maxLogSizeBytes"}), - #"Changed Type" = Table.TransformColumnTypes(#"Expanded properties",{{"properties.creationDate", type datetimezone}}) + | extend + ['sku.name'] = sku.name, + ['sku.tier'] = sku.tier, + ['sku.capacity'] = sku.capacity, + ['sku.family'] = sku.family, + ['properties.status'] = properties.status, + ['properties.requestedBackupStorageRedundancy'] = properties.requestedBackupStorageRedundancy, + ['properties.currentBackupStorageRedundancy'] = properties.currentBackupStorageRedundancy, + ['properties.requestedServiceObjectiveName'] = properties.requestedServiceObjectiveName, + ['properties.currentServiceObjectiveName'] = properties.currentServiceObjectiveName, + ['properties.maintenanceConfigurationId'] = properties.maintenanceConfigurationId, + ['properties.defaultSecondaryLocation'] = properties.defaultSecondaryLocation, + ['properties.isInfraEncryptionEnabled'] = properties.isInfraEncryptionEnabled, + ['properties.earliestRestoreDate'] = properties.earliestRestoreDate, + ['properties.zoneRedundant'] = properties.zoneRedundant, + ['properties.availabilityZone'] = properties.availabilityZone, + ['properties.catalogCollation'] = properties.catalogCollation, + ['properties.creationDate'] = properties.creationDate, + ['properties.collation'] = properties.collation, + ['properties.licenseType'] = properties.licenseType, + ['properties.maxSizeBytes'] = properties.maxSizeBytes, + ['properties.isLedgerOn'] = properties.isLedgerOn, + ['properties.databaseId'] = properties.databaseId, + ['properties.currentSku'] = properties.currentSku, + ['properties.readScale'] = properties.readScale, + ['properties.maxLogSizeBytes'] = properties.maxLogSizeBytes + " & ftk_DemoFilter(), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]), + Types = Table.TransformColumnTypes(Source, {{"properties.creationDate", type datetimezone}}) in - #"Changed Type" + Types annotation PBI_NavigationStepName = Navigation diff --git a/src/power-bi/kql/Shared.Dataset/definition/tables/Subscriptions.tmdl b/src/power-bi/kql/Shared.Dataset/definition/tables/Subscriptions.tmdl index d94d0897e..f1c96c7d8 100644 --- a/src/power-bi/kql/Shared.Dataset/definition/tables/Subscriptions.tmdl +++ b/src/power-bi/kql/Shared.Dataset/definition/tables/Subscriptions.tmdl @@ -89,22 +89,6 @@ table Subscriptions annotation SummarizationSetBy = Automatic - column managementGroupAncestorsChain - dataType: string - lineageTag: e8cb5088-804a-4a4b-b124-bc1569c32912 - summarizeBy: none - sourceColumn: managementGroupAncestorsChain - - annotation SummarizationSetBy = Automatic - - column state - dataType: string - lineageTag: 004d35f6-d6a8-4c7f-ad7b-05c0dedf2cfe - summarizeBy: none - sourceColumn: state - - annotation SummarizationSetBy = Automatic - column tags dataType: string lineageTag: ff48b324-4a1c-488d-97d3-f9f59e0b7f3c @@ -137,18 +121,46 @@ table Subscriptions annotation SummarizationSetBy = Automatic + column properties + dataType: string + lineageTag: 5fac4a2f-7543-457b-807f-38bc02674634 + summarizeBy: none + sourceColumn: properties + + annotation SummarizationSetBy = Automatic + + column 'properties.managementGroupAncestorsChain' + dataType: string + lineageTag: 59d31e9b-c76b-450d-9d6c-b7d9ab9f27c8 + summarizeBy: none + sourceColumn: properties.managementGroupAncestorsChain + + annotation SummarizationSetBy = Automatic + + column 'properties.state' + dataType: string + lineageTag: e279b0de-83db-4bef-b13d-442bd5049ab1 + summarizeBy: none + sourceColumn: properties.state + + annotation SummarizationSetBy = Automatic + partition Subscriptions = m mode: import queryGroup: 'Resource Graph' - source = + source = ``` let - Source = AzureResourceGraph.Query( - "resourcecontainers + query = " + resourcecontainers | where type == 'microsoft.resources/subscriptions' - " & ftk_DemoFilter(), "Tenant", null, null, [resultTruncated = false]), - #"Expanded properties" = Table.ExpandRecordColumn(Source, "properties", {"managementGroupAncestorsChain", "state"}, {"managementGroupAncestorsChain", "state"}) + | extend + ['properties.managementGroupAncestorsChain'] = properties.managementGroupAncestorsChain, + ['properties.state'] = properties.state + " & ftk_DemoFilter(), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]) in - #"Expanded properties" + Source + ``` annotation PBI_NavigationStepName = Navigation diff --git a/src/power-bi/kql/Shared.Dataset/definition/tables/VirtualMachines.tmdl b/src/power-bi/kql/Shared.Dataset/definition/tables/VirtualMachines.tmdl index 221ca516d..2f80cf9c6 100644 --- a/src/power-bi/kql/Shared.Dataset/definition/tables/VirtualMachines.tmdl +++ b/src/power-bi/kql/Shared.Dataset/definition/tables/VirtualMachines.tmdl @@ -409,37 +409,215 @@ table VirtualMachines annotation SummarizationSetBy = Automatic + column properties + dataType: string + lineageTag: e6dfb866-56e9-41d3-92be-51ca63dce8de + summarizeBy: none + sourceColumn: properties + + annotation SummarizationSetBy = Automatic + + column networkProfile + dataType: string + lineageTag: e44b9015-72d2-4fca-8c66-d453745ceda2 + summarizeBy: none + sourceColumn: networkProfile + + annotation SummarizationSetBy = Automatic + + column osProfile + dataType: string + lineageTag: 3f7a330b-35c4-4a46-a437-bd7830c91821 + summarizeBy: none + sourceColumn: osProfile + + annotation SummarizationSetBy = Automatic + + column storageProfile + dataType: string + lineageTag: fdffb001-8cd4-4545-a5e3-5a7625f01df0 + summarizeBy: none + sourceColumn: storageProfile + + annotation SummarizationSetBy = Automatic + + column hardwareProfile + dataType: string + lineageTag: 998c7342-d833-46f0-87d0-671da7ad19b1 + summarizeBy: none + sourceColumn: hardwareProfile + + annotation SummarizationSetBy = Automatic + + column diagnosticsProfile + dataType: string + lineageTag: 236da049-94eb-4611-8d87-2e621ae2d291 + summarizeBy: none + sourceColumn: diagnosticsProfile + + annotation SummarizationSetBy = Automatic + + column extended + dataType: string + lineageTag: 91e1d8db-9b66-40af-8e05-bafa4708198b + summarizeBy: none + sourceColumn: extended + + annotation SummarizationSetBy = Automatic + + column networkInterfaces + dataType: string + lineageTag: bd9607d7-e154-4bf7-a5c8-bb9864896f17 + summarizeBy: none + sourceColumn: networkInterfaces + + annotation SummarizationSetBy = Automatic + + column 'networkInterfaces.properties' + dataType: string + lineageTag: c5159fb4-3eec-4b67-8bf5-07181160e398 + summarizeBy: none + sourceColumn: networkInterfaces.properties + + annotation SummarizationSetBy = Automatic + + column 'storageProfile.imageReference' + dataType: string + lineageTag: d0dbf571-2490-4b7f-8995-22c0036dfa67 + summarizeBy: none + sourceColumn: storageProfile.imageReference + + annotation SummarizationSetBy = Automatic + + column 'storageProfile.dataDisks' + dataType: string + lineageTag: 83e2e073-2bf8-496e-bc2c-a3553f8c5384 + summarizeBy: none + sourceColumn: storageProfile.dataDisks + + annotation SummarizationSetBy = Automatic + + column 'storageProfile.osDisk' + dataType: string + lineageTag: d4af0653-26d8-4e20-8305-31be6cb05548 + summarizeBy: none + sourceColumn: storageProfile.osDisk + + annotation SummarizationSetBy = Automatic + + column 'storageProfile.dataDisks.managedDisk' + dataType: string + lineageTag: 66cd5719-8338-4102-b1b6-0caa9bb55fa5 + summarizeBy: none + sourceColumn: storageProfile.dataDisks.managedDisk + + annotation SummarizationSetBy = Automatic + + column 'storageProfile.osDisk.managedDisk' + dataType: string + lineageTag: 9961ea28-ed3c-4097-b061-ca148131d6ad + summarizeBy: none + sourceColumn: storageProfile.osDisk.managedDisk + + annotation SummarizationSetBy = Automatic + + column 'diagnosticsProfile.bootDiagnostics' + dataType: string + lineageTag: 6f3662b6-91e3-4645-858c-ecdca8b1ef3d + summarizeBy: none + sourceColumn: diagnosticsProfile.bootDiagnostics + + annotation SummarizationSetBy = Automatic + + column instanceView + dataType: string + lineageTag: ec49c96b-adf9-4b6a-b5ed-a4605ea55702 + summarizeBy: none + sourceColumn: instanceView + + annotation SummarizationSetBy = Automatic + + column powerState + dataType: string + lineageTag: 9111acad-c60b-40b3-8e7f-37cdfc80c85e + summarizeBy: none + sourceColumn: powerState + + annotation SummarizationSetBy = Automatic + partition VirtualMachines = m mode: import queryGroup: 'Resource Graph' source = let - Source = AzureResourceGraph.Query( - "Resources + query = " + Resources | where type =~ 'Microsoft.Compute/virtualMachines' - " & ftk_DemoFilter(), "Tenant", null, null, [resultTruncated = false]), - #"Expanded properties" = Table.ExpandRecordColumn(Source, "properties", {"provisioningState", "timeCreated", "networkProfile", "osProfile", "storageProfile", "hardwareProfile", "vmId", "diagnosticsProfile", "extended", "licenseType"}, {"provisioningState", "timeCreated", "networkProfile", "osProfile", "storageProfile", "hardwareProfile", "vmId", "diagnosticsProfile", "extended", "licenseType"}), - #"Expanded osProfile" = Table.ExpandRecordColumn(#"Expanded properties", "osProfile", {"computerName", "requireGuestProvisionSignal", "allowExtensionOperations", "adminUsername", "secrets", "linuxConfiguration", "windowsConfiguration"}, {"osProfile.computerName", "osProfile.requireGuestProvisionSignal", "osProfile.allowExtensionOperations", "osProfile.adminUsername", "osProfile.secrets", "osProfile.linuxConfiguration", "osProfile.windowsConfiguration"}), - #"Expanded networkProfile" = Table.ExpandRecordColumn(#"Expanded osProfile", "networkProfile", {"networkInterfaces"}, {"networkInterfaces"}), - #"Expanded networkInterfaces" = Table.ExpandListColumn(#"Expanded networkProfile", "networkInterfaces"), - #"Expanded networkInterfaces 1" = Table.ExpandRecordColumn(#"Expanded networkInterfaces", "networkInterfaces", {"properties", "id"}, {"networkInterfaces.properties", "networkInterfaces.id"}), - #"Expanded networkInterfaces.properties" = Table.ExpandRecordColumn(#"Expanded networkInterfaces 1", "networkInterfaces.properties", {"deleteOption"}, {"networkInterfaces.properties.deleteOption"}), - #"Expanded storageProfile" = Table.ExpandRecordColumn(#"Expanded networkInterfaces.properties", "storageProfile", {"imageReference", "dataDisks", "osDisk"}, {"storageProfile.imageReference", "storageProfile.dataDisks", "storageProfile.osDisk"}), - #"Expanded storageProfile.imageReference" = Table.ExpandRecordColumn(#"Expanded storageProfile", "storageProfile.imageReference", {"publisher", "sku", "version", "exactVersion", "offer"}, {"storageProfile.imageReference.publisher", "storageProfile.imageReference.sku", "storageProfile.imageReference.version", "storageProfile.imageReference.exactVersion", "storageProfile.imageReference.offer"}), - #"Expanded storageProfile.dataDisks" = Table.ExpandListColumn(#"Expanded storageProfile.imageReference", "storageProfile.dataDisks"), - #"Expanded storageProfile.dataDisks 1" = Table.ExpandRecordColumn(#"Expanded storageProfile.dataDisks", "storageProfile.dataDisks", {"name", "createOption", "deleteOption", "managedDisk", "caching", "toBeDetached", "writeAcceleratorEnabled", "lun"}, {"storageProfile.dataDisks.name", "storageProfile.dataDisks.createOption", "storageProfile.dataDisks.deleteOption", "storageProfile.dataDisks.managedDisk", "storageProfile.dataDisks.caching", "storageProfile.dataDisks.toBeDetached", "storageProfile.dataDisks.writeAcceleratorEnabled", "storageProfile.dataDisks.lun"}), - #"Expanded storageProfile.dataDisks.managedDisk" = Table.ExpandRecordColumn(#"Expanded storageProfile.dataDisks 1", "storageProfile.dataDisks.managedDisk", {"id"}, {"storageProfile.dataDisks.managedDisk.id"}), - #"Expanded storageProfile.osDisk" = Table.ExpandRecordColumn(#"Expanded storageProfile.dataDisks.managedDisk", "storageProfile.osDisk", {"name", "createOption", "osType", "deleteOption", "managedDisk", "caching"}, {"storageProfile.osDisk.name", "storageProfile.osDisk.createOption", "storageProfile.osDisk.osType", "storageProfile.osDisk.deleteOption", "storageProfile.osDisk.managedDisk", "storageProfile.osDisk.caching"}), - #"Expanded storageProfile.osDisk.managedDisk" = Table.ExpandRecordColumn(#"Expanded storageProfile.osDisk", "storageProfile.osDisk.managedDisk", {"id"}, {"storageProfile.osDisk.managedDisk.id"}), - #"Expanded hardwareProfile" = Table.ExpandRecordColumn(#"Expanded storageProfile.osDisk.managedDisk", "hardwareProfile", {"vmSize"}, {"hardwareProfile.vmSize"}), - #"Expanded diagnosticsProfile" = Table.ExpandRecordColumn(#"Expanded hardwareProfile", "diagnosticsProfile", {"bootDiagnostics"}, {"diagnosticsProfile.bootDiagnostics"}), - #"Expanded diagnosticsProfile.bootDiagnostics" = Table.ExpandRecordColumn(#"Expanded diagnosticsProfile", "diagnosticsProfile.bootDiagnostics", {"enabled", "storageUri"}, {"diagnosticsProfile.bootDiagnostics.enabled", "diagnosticsProfile.bootDiagnostics.storageUri"}), - #"Expanded extended" = Table.ExpandRecordColumn(#"Expanded diagnosticsProfile.bootDiagnostics", "extended", {"instanceView"}, {"instanceView"}), - #"Expanded instanceView" = Table.ExpandRecordColumn(#"Expanded extended", "instanceView", {"powerState"}, {"powerState"}), - #"Expanded powerState" = Table.ExpandRecordColumn(#"Expanded instanceView", "powerState", {"displayStatus"}, {"powerState.displayStatus"}), - #"Expanded zones" = Table.ExpandListColumn(#"Expanded powerState", "zones") + | extend + provisioningState = properties.provisioningState, + timeCreated = properties.timeCreated, + networkProfile = properties.networkProfile, + osProfile = properties.osProfile, + storageProfile = properties.storageProfile, + hardwareProfile = properties.hardwareProfile, + vmId = properties.vmId, + diagnosticsProfile = properties.diagnosticsProfile, + extended = properties.extended, + licenseType = properties.licenseType + | extend + ['osProfile.computerName'] = osProfile.computerName, + ['osProfile.requireGuestProvisionSignal'] = osProfile.requireGuestProvisionSignal, + ['osProfile.allowExtensionOperations'] = osProfile.allowExtensionOperations, + ['osProfile.adminUsername'] = osProfile.adminUsername, + ['osProfile.secrets'] = osProfile.secrets, + ['osProfile.linuxConfiguration'] = osProfile.linuxConfiguration, + ['osProfile.windowsConfiguration'] = osProfile.windowsConfiguration, + networkInterfaces = networkProfile.networkInterfaces + | mv-expand ['networkInterfaces'] + | extend + ['networkInterfaces.properties'] = networkInterfaces.properties, + ['networkInterfaces.id'] = networkInterfaces.id, + ['networkInterfaces.properties.deleteOption'] = networkInterfaces.properties.deleteOption, + ['storageProfile.imageReference'] = storageProfile.imageReference, + ['storageProfile.dataDisks'] = storageProfile.dataDisks, + ['storageProfile.osDisk'] = storageProfile.osDisk, + ['storageProfile.imageReference.publisher'] = storageProfile.imageReference.publisher, + ['storageProfile.imageReference.sku'] = storageProfile.imageReference.sku, + ['storageProfile.imageReference.version'] = storageProfile.imageReference.version, + ['storageProfile.imageReference.exactVersion'] = storageProfile.imageReference.exactVersion, + ['storageProfile.imageReference.offer'] = storageProfile.imageReference.offer + | mv-expand ['storageProfile.dataDisks'] + | extend + ['storageProfile.dataDisks.name'] = storageProfile.dataDisks.name, + ['storageProfile.dataDisks.createOption'] = storageProfile.dataDisks.createOption, + ['storageProfile.dataDisks.deleteOption'] = storageProfile.dataDisks.deleteOption, + ['storageProfile.dataDisks.managedDisk'] = storageProfile.dataDisks.managedDisk, + ['storageProfile.dataDisks.caching'] = storageProfile.dataDisks.caching, + ['storageProfile.dataDisks.toBeDetached'] = storageProfile.dataDisks.toBeDetached, + ['storageProfile.dataDisks.writeAcceleratorEnabled'] = storageProfile.dataDisks.writeAcceleratorEnabled, + ['storageProfile.dataDisks.lun'] = storageProfile.dataDisks.lun, + ['storageProfile.dataDisks.managedDisk.id'] = storageProfile.dataDisks.managedDisk.id, + ['storageProfile.osDisk.name'] = storageProfile.osDisk.name, + ['storageProfile.osDisk.createOption'] = storageProfile.osDisk.createOption, + ['storageProfile.osDisk.osType'] = storageProfile.osDisk.osType, + ['storageProfile.osDisk.deleteOption'] = storageProfile.osDisk.deleteOption, + ['storageProfile.osDisk.managedDisk'] = storageProfile.osDisk.managedDisk, + ['storageProfile.osDisk.caching'] = storageProfile.osDisk.caching, + ['storageProfile.osDisk.managedDisk.id'] = storageProfile.osDisk.managedDisk.id, + ['hardwareProfile.vmSize'] = hardwareProfile.vmSize, + ['diagnosticsProfile.bootDiagnostics'] = diagnosticsProfile.bootDiagnostics, + ['diagnosticsProfile.bootDiagnostics.enabled'] = diagnosticsProfile.bootDiagnostics.enabled, + ['diagnosticsProfile.bootDiagnostics.storageUri'] = diagnosticsProfile.bootDiagnostics.storageUri + | extend + instanceView = extended.instanceView, + powerState = extended.instanceView.powerState + | extend + ['powerState.displayStatus'] = powerState.displayStatus + | mv-expand ['zones'] + " & ftk_DemoFilter(), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]) in - #"Expanded zones" + Source annotation PBI_NavigationStepName = Navigation diff --git a/src/power-bi/kql/WorkloadOptimization.Report/report.json b/src/power-bi/kql/WorkloadOptimization.Report/report.json index 570816480..e3e601d0b 100644 --- a/src/power-bi/kql/WorkloadOptimization.Report/report.json +++ b/src/power-bi/kql/WorkloadOptimization.Report/report.json @@ -221,7 +221,7 @@ "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.WorkloadOptimization/featureName/KQL.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.WorkloadOptimization/featureName/KQL.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.0, "width": 192.0, @@ -795,7 +795,7 @@ "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.WorkloadOptimization/featureName/KQL.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.WorkloadOptimization/featureName/KQL.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.0, "width": 192.0, @@ -1028,7 +1028,7 @@ "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.WorkloadOptimization/featureName/KQL.GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.WorkloadOptimization/featureName/KQL.GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", "height": 32.0, "width": 112.0, @@ -1153,7 +1153,7 @@ "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-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\"}}}}}]}}}", + "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\":\"$$ftkver$$ · $$build-date$$ · 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.0, "width": 240.0, @@ -1225,7 +1225,7 @@ "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.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\"}", + "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/surveyId/FTK$$ftkver$$/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'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'9882785c36c2ec058d8d'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", "height": 32.0, "width": 88.0, @@ -1304,7 +1304,7 @@ "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.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\"}", + "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/surveyId/FTK$$ftkver$$/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'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Clear filters'\"}}}}}]}},\"parentGroupName\":\"7c5ed4b7f28bd45e2f3a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", "height": 32.0, "width": 88.0, @@ -1422,7 +1422,7 @@ "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.WorkloadOptimization/featureName/KQL.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.WorkloadOptimization/featureName/KQL.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.0, "width": 192.0, diff --git a/src/power-bi/storage/CostSummary.Report/report.json b/src/power-bi/storage/CostSummary.Report/report.json index 41d0c4c46..10db81ec2 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\":\"true\"}}}}}]}}", + "config": "{\"version\":\"5.62\",\"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": [ @@ -111,368 +111,368 @@ "displayName": "Tags example", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "name": "6244831b8b6043fa9620", "ordinal": 12, "visualContainers": [ { "config": "{\"name\":\"09ad96c7fc1b0eaf9d24\",\"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\":\"e15e2459782dffce9441\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"0d35625852c886f6c00c\",\"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\":\"2b1a87e2de40ed0e1ea8\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "config": "{\"name\":\"0f6ca7db97cf509ab148\",\"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\":\"09ad96c7fc1b0eaf9d24\"}", "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "config": "{\"name\":\"153cec0f8beb72cee0ce\",\"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\":\"09ad96c7fc1b0eaf9d24\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"1f5b5cca284edba36cda\",\"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\":\"e15e2459782dffce9441\"}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"2388f081b7d6815fec7c\",\"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\":\"2b1a87e2de40ed0e1ea8\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "config": "{\"name\":\"2b1a87e2de40ed0e1ea8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":216.00126878372978,\"y\":7.522749379008424,\"z\":0,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, + "height": 704.00, "width": 1048.09, - "x": 216.0, + "x": 216.00, "y": 7.52, - "z": 0.0 + "z": 0.00 }, { "config": "{\"name\":\"342d1b7398dcbc93d34f\",\"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\":\"2b1a87e2de40ed0e1ea8\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"3af36c2be7c02449e69a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":696,\"y\":392,\"z\":5000,\"width\":568,\"height\":320,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.x_ReportingDate\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}],\"Series\":[{\"queryRef\":\"CostDetails.tag_CostCenter\"}]},\"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.0, - "width": 568.0, - "x": 696.0, - "y": 392.0, - "z": 5000.0 + "height": 320.00, + "width": 568.00, + "x": 696.00, + "y": 392.00, + "z": 5000.00 }, { "config": "{\"name\":\"45eaa3a2f85e50323ef3\",\"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\":\"e15e2459782dffce9441\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "config": "{\"name\":\"5333b720ef93b0fd3174\",\"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\":\"e15e2459782dffce9441\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"5bec3273f4ede81d573f\",\"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\":\"2b1a87e2de40ed0e1ea8\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "config": "{\"name\":\"5c471065491934d0da18\",\"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\":\"2b1a87e2de40ed0e1ea8\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"61ae7dcb8939d4da44c9\",\"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\":\"2b1a87e2de40ed0e1ea8\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"63ceced951f4ecd9afe9\",\"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.0, - "width": 280.0, - "x": 984.0, - "y": 8.0, - "z": 2000.0 + "height": 376.00, + "width": 280.00, + "x": 984.00, + "y": 8.00, + "z": 2000.00 }, { "config": "{\"name\":\"687c066df7fceee8457f\",\"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\":\"09ad96c7fc1b0eaf9d24\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "config": "{\"name\":\"6e45e073e6598c53f8f8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":696,\"y\":8,\"z\":3000,\"width\":280,\"height\":376,\"tabOrder\":2000}}],\"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.0, - "width": 280.0, - "x": 696.0, - "y": 8.0, - "z": 3000.0 + "height": 376.00, + "width": 280.00, + "x": 696.00, + "y": 8.00, + "z": 3000.00 }, { "config": "{\"name\":\"7adf8631c88a1ccf51b1\",\"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\":\"2b1a87e2de40ed0e1ea8\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"81c967b427586db9423f\",\"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\":\"2b1a87e2de40ed0e1ea8\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "config": "{\"name\":\"85cac2ff730294f50f32\",\"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\":\"2b1a87e2de40ed0e1ea8\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "config": "{\"name\":\"864670e2dbea91c481d3\",\"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\":\"2b1a87e2de40ed0e1ea8\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"8f4d1fd3963c28397c9b\",\"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\":\"09ad96c7fc1b0eaf9d24\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "config": "{\"name\":\"9800856012e5e95c0ee3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":4000,\"width\":472.00000000000006,\"height\":376,\"tabOrder\":3000}}],\"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.0, - "width": 472.0, - "x": 216.0, - "y": 8.0, - "z": 4000.0 + "height": 376.00, + "width": 472.00, + "x": 216.00, + "y": 8.00, + "z": 4000.00 }, { "config": "{\"name\":\"a0f9e9d33fa0c6585e95\",\"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\":\"e15e2459782dffce9441\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"a92a130c6f002a2c0526\",\"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\":\"2b1a87e2de40ed0e1ea8\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "config": "{\"name\":\"b573cd8d57eb3e7fdce0\",\"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\":\"2b1a87e2de40ed0e1ea8\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"b8329fb81f747a1760fd\",\"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\":\"2b1a87e2de40ed0e1ea8\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"cbfdfdb52fcafbd6088b\",\"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\":\"2b1a87e2de40ed0e1ea8\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { - "config": "{\"name\":\"cfd696dc02c80537892e\",\"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.CostSummary/featureName/Storage.TagsExample'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e15e2459782dffce9441\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"cfd696dc02c80537892e\",\"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/FTK$$ftkver$$/bladeName/PowerBI.CostSummary/featureName/Storage.TagsExample'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e15e2459782dffce9441\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"d0ddfc4833b7f949b650\",\"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\":\"2b1a87e2de40ed0e1ea8\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "config": "{\"name\":\"d4455d8312e94f40ecf2\",\"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\":\"2b1a87e2de40ed0e1ea8\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"de1562555c234ad3b087\",\"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\":\"e15e2459782dffce9441\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"e15e2459782dffce9441\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":5000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"e1c0abe030cd1dae6a0a\",\"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\":\"2b1a87e2de40ed0e1ea8\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "config": "{\"name\":\"e4eda33770c9fa5b76c2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":6000,\"width\":472.00000000000006,\"height\":320,\"tabOrder\":6000}}],\"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.0, - "width": 472.0, - "x": 216.0, - "y": 392.0, - "z": 6000.0 + "height": 320.00, + "width": 472.00, + "x": 216.00, + "y": 392.00, + "z": 6000.00 }, { "config": "{\"name\":\"efa9c8ed7bc8bd5123ce\",\"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\":\"2b1a87e2de40ed0e1ea8\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"fa7cb59868d471b67f80\",\"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\":\"09ad96c7fc1b0eaf9d24\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Get started", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "name": "ReportSection04cb7247170034c13d74", "visualContainers": [ { "config": "{\"name\":\"00155f6ca98a4b1edc0b\",\"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\":\"66c7e5fa0bf46b2380c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 1056.0, - "y": 0.0, - "z": 1000.0 + "height": 696.00, + "width": 80.00, + "x": 1056.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"0229693c2ca2cb98cb9e\",\"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\":\"66c7e5fa0bf46b2380c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 80.0, - "width": 1232.0, - "x": 0.0, - "y": 576.0, - "z": 13000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 576.00, + "z": 13000.00 }, { "config": "{\"name\":\"0696a16725f4fab15f1f\",\"layouts\":[{\"id\":0,\"position\":{\"x\":212.05479452054797,\"y\":111.78082191780823,\"z\":16000,\"width\":852.3287671232878,\"height\":560.5479452054796,\"tabOrder\":9000}}],\"singleVisualGroup\":{\"displayName\":\"Connect dialog\",\"groupMode\":0,\"isHidden\":true}}", @@ -480,87 +480,87 @@ "width": 852.33, "x": 212.05, "y": 111.78, - "z": 16000.0 + "z": 16000.00 }, { "config": "{\"name\":\"0904978eb7dd40202e16\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":272,\"height\":176,\"tabOrder\":22}}],\"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\":\"5e23888e545707205062\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 176.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 3000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"0c398bbff28219db5150\",\"layouts\":[{\"id\":0,\"position\":{\"x\":211.66666666666669,\"y\":24.166666666666668,\"z\":13000,\"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.5, + "width": 852.50, "x": 211.67, "y": 24.17, - "z": 13000.0 + "z": 13000.00 }, { "config": "{\"name\":\"0d6cc8089bbe0b3ea6d1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":272,\"height\":176,\"tabOrder\":13}}],\"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\":\"a236236f83a6794f1375\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 176.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 3000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"121d8450fce71d59c973\",\"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\":\"66c7e5fa0bf46b2380c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 80.0, - "width": 1232.0, - "x": 0.0, - "y": 96.0, - "z": 18000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 96.00, + "z": 18000.00 }, { "config": "{\"name\":\"148436ae95d4bdecb7a7\",\"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'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"0696a16725f4fab15f1f\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", "height": 560.55, "width": 852.33, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"1879931b5bb09023a135\",\"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\":\"66c7e5fa0bf46b2380c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 80.0, - "width": 1232.0, - "x": 0.0, - "y": 192.0, - "z": 17000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 192.00, + "z": 17000.00 }, { "config": "{\"name\":\"20782f5504ba84eeb06e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":304,\"z\":8000,\"width\":272.0000000000001,\"height\":312,\"tabOrder\":7000}}],\"singleVisualGroup\":{\"displayName\":\"Get data copy\",\"groupMode\":0,\"isHidden\":false}}", - "height": 312.0, - "width": 272.0, - "x": 792.0, - "y": 304.0, - "z": 8000.0 + "height": 312.00, + "width": 272.00, + "x": 792.00, + "y": 304.00, + "z": 8000.00 }, { "config": "{\"name\":\"23b617f5c2a9db20d1e9\",\"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\":\"66c7e5fa0bf46b2380c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 576.0, - "y": 0.0, - "z": 6000.0 + "height": 696.00, + "width": 80.00, + "x": 576.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"2af23e804cd0ec3d1d2f\",\"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\":\"'6220ab6f40f094dbfea7'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Close button'\"}}}}}]}},\"parentGroupName\":\"0696a16725f4fab15f1f\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 32.0, - "x": 784.0, - "y": 48.0, - "z": 2000.0 + "height": 32.00, + "width": 32.00, + "x": 784.00, + "y": 48.00, + "z": 2000.00 }, { "config": "{\"name\":\"33c1aff02b29d92748b9\",\"layouts\":[{\"id\":0,\"position\":{\"x\":213.33333333333334,\"y\":8.333333333333334,\"z\":14000,\"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'\"}}}}}]}}}", @@ -569,3944 +569,3944 @@ "width": 194.17, "x": 213.33, "y": 8.33, - "z": 14000.0 + "z": 14000.00 }, { "config": "{\"name\":\"3d599aa84ab540cf006b\",\"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\":\"5e23888e545707205062\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 176.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 2000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"4278f34a648c1f86f449\",\"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\":\"a236236f83a6794f1375\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 176.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 2000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"52ce4bd7b417634379e8\",\"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\":\"66c7e5fa0bf46b2380c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 864.0, - "y": 0.0, - "z": 3000.0 + "height": 696.00, + "width": 80.00, + "x": 864.00, + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"531ecbb0f561be69a5b8\",\"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\":\"66c7e5fa0bf46b2380c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 80.0, - "width": 1232.0, - "x": 0.0, - "y": 0.0, - "z": 19000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 0.00, + "z": 19000.00 }, { "config": "{\"name\":\"5e23888e545707205062\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":304,\"z\":11000,\"width\":272,\"height\":368,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Connect copy\",\"groupMode\":0,\"isHidden\":false}}", - "height": 368.0, - "width": 272.0, - "x": 216.0, - "y": 304.0, - "z": 11000.0 + "height": 368.00, + "width": 272.00, + "x": 216.00, + "y": 304.00, + "z": 11000.00 }, { "config": "{\"name\":\"6296c7754e20b995ffa3\",\"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\":\"66c7e5fa0bf46b2380c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 80.0, - "width": 1232.0, - "x": 0.0, - "y": 288.0, - "z": 16000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 288.00, + "z": 16000.00 }, { "config": "{\"name\":\"63a6f725c0a55fdc2617\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":288,\"z\":1000,\"width\":160,\"height\":24,\"tabOrder\":1}}],\"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\":\"a236236f83a6794f1375\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 24.0, - "width": 160.0, - "x": 0.0, - "y": 288.0, - "z": 1000.0 + "height": 24.00, + "width": 160.00, + "x": 0.00, + "y": 288.00, + "z": 1000.00 }, { "config": "{\"name\":\"66c7e5fa0bf46b2380c3\",\"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.0, - "width": 1232.0, - "x": 24.0, - "y": 16.0, - "z": 0.0 + "height": 696.00, + "width": 1232.00, + "x": 24.00, + "y": 16.00, + "z": 0.00 }, { "config": "{\"name\":\"671132e2ea0bc658103a\",\"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\":\"66c7e5fa0bf46b2380c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 1152.0, - "y": 0.0, - "z": 0.0 + "height": 696.00, + "width": 80.00, + "x": 1152.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"6df4faecb0626ee28519\",\"layouts\":[{\"id\":0,\"position\":{\"x\":8,\"y\":687.9999999999999,\"z\":7000,\"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.0, - "width": 96.0, - "x": 8.0, - "y": 688.0, - "z": 7000.0 + "height": 32.00, + "width": 96.00, + "x": 8.00, + "y": 688.00, + "z": 7000.00 }, { "config": "{\"name\":\"7685f973f2951e23d4fa\",\"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\":\"66c7e5fa0bf46b2380c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 80.0, - "width": 1232.0, - "x": 0.0, - "y": 480.0, - "z": 14000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 480.00, + "z": 14000.00 }, { "config": "{\"name\":\"772386c010f1432a6781\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1.1368683772161603e-13,\"y\":192.00000000000006,\"z\":0,\"width\":272,\"height\":96,\"tabOrder\":11}}],\"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\":\"20782f5504ba84eeb06e\"}", "filters": "[]", - "height": 96.0, - "width": 272.0, - "x": 0.0, - "y": 192.0, - "z": 0.0 + "height": 96.00, + "width": 272.00, + "x": 0.00, + "y": 192.00, + "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-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\"}}}}}]}}}", + "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\":\"$$ftkver$$ · $$build-date$$ · 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.0, - "width": 240.0, - "x": 104.0, - "y": 688.0, - "z": 5000.0 + "height": 32.00, + "width": 240.00, + "x": 104.00, + "y": 688.00, + "z": 5000.00 }, { "config": "{\"name\":\"7d4cd0104a8b72043d72\",\"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\":\"66c7e5fa0bf46b2380c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 768.0, - "y": 0.0, - "z": 4000.0 + "height": 696.00, + "width": 80.00, + "x": 768.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"7d56742cf1f825dacc99\",\"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\":\"66c7e5fa0bf46b2380c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 96.0, - "y": 0.0, - "z": 11000.0 + "height": 696.00, + "width": 80.00, + "x": 96.00, + "y": 0.00, + "z": 11000.00 }, { "config": "{\"name\":\"801601c124ce04733126\",\"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\":\"0696a16725f4fab15f1f\"}", "filters": "[]", - "height": 48.0, - "width": 736.0, - "x": 40.0, - "y": 40.0, - "z": 3000.0 + "height": 48.00, + "width": 736.00, + "x": 40.00, + "y": 40.00, + "z": 3000.00 }, { "config": "{\"name\":\"8213d12a199c081d6009\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":112.00000000000001,\"z\":12000,\"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 \"},{\"value\":\"Reporting and analytics capability\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/framework/understand/reporting\"},{\"value\":\" in the FinOps Framework.\"}]},{\"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.0, - "width": 848.0, - "x": 216.0, - "y": 112.0, - "z": 12000.0 + "height": 176.00, + "width": 848.00, + "x": 216.00, + "y": 112.00, + "z": 12000.00 }, { "config": "{\"name\":\"89d8a96d89b62c88315b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.03600823045266566,\"y\":192,\"z\":0,\"width\":256,\"height\":176,\"tabOrder\":10}}],\"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\":\"5e23888e545707205062\"}", "filters": "[]", - "height": 176.0, - "width": 256.0, + "height": 176.00, + "width": 256.00, "x": 0.04, - "y": 192.0, - "z": 0.0 + "y": 192.00, + "z": 0.00 }, { "config": "{\"name\":\"9a3240cd1e6136166963\",\"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\":\"66c7e5fa0bf46b2380c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 192.0, - "y": 0.0, - "z": 10000.0 + "height": 696.00, + "width": 80.00, + "x": 192.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"9d5254393545501da1b9\",\"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\":\"66c7e5fa0bf46b2380c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 80.0, - "width": 1232.0, - "x": 0.0, - "y": 384.0, - "z": 15000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 384.00, + "z": 15000.00 }, { "config": "{\"name\":\"a236236f83a6794f1375\",\"layouts\":[{\"id\":0,\"position\":{\"x\":504,\"y\":304,\"z\":10000,\"width\":272,\"height\":368,\"tabOrder\":5000}}],\"singleVisualGroup\":{\"displayName\":\"Customize copy\",\"groupMode\":0,\"isHidden\":false}}", - "height": 368.0, - "width": 272.0, - "x": 504.0, - "y": 304.0, - "z": 10000.0 + "height": 368.00, + "width": 272.00, + "x": 504.00, + "y": 304.00, + "z": 10000.00 }, { "config": "{\"name\":\"a6fcd78e7e9da03fe673\",\"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\":\"66c7e5fa0bf46b2380c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 384.0, - "y": 0.0, - "z": 8000.0 + "height": 696.00, + "width": 80.00, + "x": 384.00, + "y": 0.00, + "z": 8000.00 }, { - "config": "{\"name\":\"ae49ee287112cd583e0a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1064,\"y\":688,\"z\":4000,\"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\":\"'WebUrl'\"}}},\"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\":\"'Help'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"ae49ee287112cd583e0a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1064,\"y\":688,\"z\":4000,\"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\":\"'WebUrl'\"}}},\"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/FTK$$ftkver$$'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 88.0, - "x": 1064.0, - "y": 688.0, - "z": 4000.0 + "height": 32.00, + "width": 88.00, + "x": 1064.00, + "y": 688.00, + "z": 4000.00 }, { "config": "{\"name\":\"b03639aa3cb3d483bebf\",\"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\":\"'020e65af2855ab46ec37'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"5e23888e545707205062\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 24.0, - "width": 144.0, + "height": 24.00, + "width": 144.00, "x": 0.22, - "y": 288.0, - "z": 1000.0 + "y": 288.00, + "z": 1000.00 }, { "config": "{\"name\":\"b381c8c1f50d39c2c039\",\"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\":\"20782f5504ba84eeb06e\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 24.0, - "width": 152.0, - "x": 0.0, - "y": 288.0, - "z": 1000.0 + "height": 24.00, + "width": 152.00, + "x": 0.00, + "y": 288.00, + "z": 1000.00 }, { "config": "{\"name\":\"c0e72c608bf7be5061ed\",\"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\":\"20782f5504ba84eeb06e\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 176.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 3000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"c3b4eefb0f030b092c72\",\"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\":\"66c7e5fa0bf46b2380c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 480.0, - "y": 0.0, - "z": 7000.0 + "height": 696.00, + "width": 80.00, + "x": 480.00, + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"c98a283bd0c688851179\",\"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\":\"66c7e5fa0bf46b2380c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 0.0, - "y": 0.0, - "z": 12000.0 + "height": 696.00, + "width": 80.00, + "x": 0.00, + "y": 0.00, + "z": 12000.00 }, { "config": "{\"name\":\"ce6956159ec4325f2137\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":192,\"z\":0,\"width\":247.99999999999997,\"height\":176,\"tabOrder\":19}}],\"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\":\"a236236f83a6794f1375\"}", "filters": "[]", - "height": 176.0, - "width": 248.0, - "x": 0.0, - "y": 192.0, - "z": 0.0 + "height": 176.00, + "width": 248.00, + "x": 0.00, + "y": 192.00, + "z": 0.00 }, { "config": "{\"name\":\"d3a19380ec587bb95108\",\"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\":\"66c7e5fa0bf46b2380c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 288.0, - "y": 0.0, - "z": 9000.0 + "height": 696.00, + "width": 80.00, + "x": 288.00, + "y": 0.00, + "z": 9000.00 }, { "config": "{\"name\":\"dd2ec22844439a0ad19e\",\"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\":\"66c7e5fa0bf46b2380c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 672.0, - "y": 0.0, - "z": 5000.0 + "height": 696.00, + "width": 80.00, + "x": 672.00, + "y": 0.00, + "z": 5000.00 }, { - "config": "{\"name\":\"debc77851805a849615c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1160,\"y\":688,\"z\":2000,\"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.CostSummary/featureName/Storage.GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"debc77851805a849615c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1160,\"y\":688,\"z\":2000,\"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/FTK$$ftkver$$/bladeName/PowerBI.CostSummary/featureName/Storage.GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 112.0, - "x": 1160.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 112.00, + "x": 1160.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"ec085cdf84528a4d1ede\",\"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 connects to 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 this report to your storage account:\"}]},{\"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 for reservation cost 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\":\"To promote specific tags into dedicated columns, update the TagCosts query to specify which tags you need to promote:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"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\":\"\"}]},{\"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 desired container. You can do this by opening your storage account in the Azure portal, selecting Storage Browser, and navigating to the exported file folder (or the ingestion path 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'\"}}}}}]}},\"parentGroupName\":\"0696a16725f4fab15f1f\"}", "filters": "[]", - "height": 424.0, - "width": 776.0, - "x": 40.0, - "y": 96.0, - "z": 1000.0 + "height": 424.00, + "width": 776.00, + "x": 40.00, + "y": 96.00, + "z": 1000.00 }, { "config": "{\"name\":\"f00ade81fdafa0b1e2be\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":272,\"height\":176,\"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.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\":\"20782f5504ba84eeb06e\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 176.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 2000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"fd5db249a8fad82c6e36\",\"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\":\"66c7e5fa0bf46b2380c3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 960.0, - "y": 0.0, - "z": 2000.0 + "height": 696.00, + "width": 80.00, + "x": 960.00, + "y": 0.00, + "z": 2000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Subscriptions", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "name": "ReportSection0f19b4db8a9820050c88", "ordinal": 4, "visualContainers": [ { "config": "{\"name\":\"043a91d963bbb6c1d8f1\",\"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\":\"825fbf6bed9873f8e647\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"1c0e593439debdb07882\",\"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\":\"825fbf6bed9873f8e647\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"1e71cbda414ca32f7978\",\"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\":\"825fbf6bed9873f8e647\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "config": "{\"name\":\"1f284a8dc2a7af24dff2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":4000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"26775fed9c0c74dae3ff\",\"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\":\"825fbf6bed9873f8e647\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"38961e3e1de08336c0af\",\"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\":\"825fbf6bed9873f8e647\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "config": "{\"name\":\"47a110b99409f02f705c\",\"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\":\"825fbf6bed9873f8e647\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "config": "{\"name\":\"498e6ada128ef359349e\",\"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\":\"ec892a62feddd1503ce8\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "config": "{\"name\":\"4f4e8be320dc6490232c\",\"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\":\"825fbf6bed9873f8e647\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"526915e902c12a8818fe\",\"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\":\"1f284a8dc2a7af24dff2\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "config": "{\"name\":\"5790feb17d1ce257d555\",\"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\":\"1f284a8dc2a7af24dff2\"}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 5500.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 5500.00 }, { "config": "{\"name\":\"5a34ec24b7085b49c85a\",\"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\":\"825fbf6bed9873f8e647\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"6699cdb0ec5618dffdbd\",\"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\":\"1f284a8dc2a7af24dff2\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"6975ee26157922a3fa78\",\"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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 5000.00 }, { - "config": "{\"name\":\"6a805af0ffebe9ca8f7b\",\"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.CostSummary/featureName/Storage.Subscriptions'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1f284a8dc2a7af24dff2\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"6a805af0ffebe9ca8f7b\",\"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/FTK$$ftkver$$/bladeName/PowerBI.CostSummary/featureName/Storage.Subscriptions'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1f284a8dc2a7af24dff2\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"6c949d99df0e5e3690b8\",\"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\":\"825fbf6bed9873f8e647\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "config": "{\"name\":\"825fbf6bed9873f8e647\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":226,\"y\":16,\"z\":1000,\"tabOrder\":3000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, + "height": 704.00, "width": 1048.09, - "x": 226.0, - "y": 16.0, - "z": 1000.0 + "x": 226.00, + "y": 16.00, + "z": 1000.00 }, { "config": "{\"name\":\"88ca6ca2f050a62cc83e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":2000,\"width\":1048,\"height\":320,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"pivotTable\",\"projections\":{\"Rows\":[{\"queryRef\":\"CostDetails.SubAccountName\",\"active\":true},{\"queryRef\":\"CostDetails.x_ResourceGroupName\",\"active\":true},{\"queryRef\":\"CostDetails.ResourceName\",\"active\":true}],\"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\":\"'FTK Fabric'\"}}],\"isToggled\":true,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'haven'\"}}],\"isToggled\":true},{\"identityValues\":[{\"Literal\":{\"Value\":\"'Haven'\"}}],\"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.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 }, { "config": "{\"name\":\"89829f9a01ffd816c75e\",\"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\":\"825fbf6bed9873f8e647\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"8c4f6fae8c9ffcb82e0d\",\"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\":\"ec892a62feddd1503ce8\"}", "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "config": "{\"name\":\"8d46ed378e9c56d0087b\",\"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\":\"825fbf6bed9873f8e647\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"8d93aef5cdf603470839\",\"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\":\"ec892a62feddd1503ce8\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "config": "{\"name\":\"914737c5a05bb600a24c\",\"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.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 6000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 6000.00 }, { "config": "{\"name\":\"946d71dfbb9a20f4171b\",\"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\":\"1f284a8dc2a7af24dff2\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"953464275aadb91fbc4b\",\"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\":\"825fbf6bed9873f8e647\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "config": "{\"name\":\"af658a0fd5160ed15e7b\",\"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\":\"ec892a62feddd1503ce8\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "config": "{\"name\":\"b5d379ef65c84b7a3cf3\",\"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\":\"1f284a8dc2a7af24dff2\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"bdc780daa63bc3b2cb8d\",\"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\":\"825fbf6bed9873f8e647\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "config": "{\"name\":\"c5f4d638b179a48c83b3\",\"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\":\"825fbf6bed9873f8e647\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "config": "{\"name\":\"cd86bf4189bc2e5f924d\",\"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\":\"825fbf6bed9873f8e647\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "config": "{\"name\":\"dde280c60f6b0086d58c\",\"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.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { "config": "{\"name\":\"e5a59da5fd5f5d64c37d\",\"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\":\"825fbf6bed9873f8e647\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"e94c7f3973b36a77ff34\",\"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\":\"ec892a62feddd1503ce8\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"ec892a62feddd1503ce8\",\"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\":\"1f284a8dc2a7af24dff2\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"f80753991a5441c7e7da\",\"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\":\"825fbf6bed9873f8e647\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "config": "{\"name\":\"fc39486f6efa3b07a6b9\",\"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\":\"825fbf6bed9873f8e647\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"fcb2dc2289bb4dc9bb6d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":2000}}],\"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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 4000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{\"objects\":{\"outspacePane\":[{\"properties\":{\"width\":{\"expr\":{\"Literal\":{\"Value\":\"204L\"}}}}}]}}", "displayName": "Regions", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "name": "ReportSection186ada557ce8442407cd", "ordinal": 7, "visualContainers": [ { "config": "{\"name\":\"03299b6d5109e3f76626\",\"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\":\"3c2a23aac2d1f9a039df\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "config": "{\"name\":\"04e73d6267a1601796b1\",\"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\":\"a342312bcf053aecbda5\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "config": "{\"name\":\"056ffacc8ec1f6462e10\",\"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\":\"3c2a23aac2d1f9a039df\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "config": "{\"name\":\"058f6c78a02cfcdbe416\",\"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\":\"3c2a23aac2d1f9a039df\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"070d3e5c5cefc376e4df\",\"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\":\"3c2a23aac2d1f9a039df\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"139faa8cb07815b4ef4c\",\"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\":\"a342312bcf053aecbda5\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"198f227426527f91649e\",\"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\":\"3c2a23aac2d1f9a039df\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"2d030e4c2d56694f9ff6\",\"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\":\"139faa8cb07815b4ef4c\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "config": "{\"name\":\"2d4d2f29b156ca6af9f1\",\"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\":\"3c2a23aac2d1f9a039df\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "config": "{\"name\":\"3463d8d4186901abfa76\",\"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\":\"3c2a23aac2d1f9a039df\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "config": "{\"name\":\"3c2a23aac2d1f9a039df\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":216.00126878372978,\"y\":7.522749379008424,\"z\":1000,\"tabOrder\":3000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, + "height": 704.00, "width": 1048.09, - "x": 216.0, + "x": 216.00, "y": 7.52, - "z": 1000.0 + "z": 1000.00 }, { "config": "{\"name\":\"3e0f8b174b3ccd5dff82\",\"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\":\"139faa8cb07815b4ef4c\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "config": "{\"name\":\"44a39d3ba48c6988a8a3\",\"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\":\"3c2a23aac2d1f9a039df\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "config": "{\"name\":\"4bc0023549e027303547\",\"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.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 6000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 6000.00 }, { "config": "{\"name\":\"5619172d06dd80aecb54\",\"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\":\"139faa8cb07815b4ef4c\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "config": "{\"name\":\"5de753412976f294f761\",\"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\":\"a342312bcf053aecbda5\"}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"5f07e396afcd0d83f73a\",\"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\":\"3c2a23aac2d1f9a039df\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"64267abb85051bef7f91\",\"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\":\"a342312bcf053aecbda5\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"6f9b85494733f2a9c123\",\"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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 5000.00 }, { "config": "{\"name\":\"7204e74bc5fa601a82ba\",\"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\":\"3c2a23aac2d1f9a039df\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"7f86b44f4de32ce3ed8b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":7000,\"width\":568,\"height\":280,\"tabOrder\":7000}}],\"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.0, - "width": 568.0, - "x": 216.0, - "y": 104.0, - "z": 7000.0 + "height": 280.00, + "width": 568.00, + "x": 216.00, + "y": 104.00, + "z": 7000.00 }, { "config": "{\"name\":\"814d54cf9a0a7ffa34c0\",\"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\":\"3c2a23aac2d1f9a039df\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "config": "{\"name\":\"822f4fce3db3ba2f810f\",\"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\":\"a342312bcf053aecbda5\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"8a2a899385cafb7475bd\",\"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\":\"3c2a23aac2d1f9a039df\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "config": "{\"name\":\"96f69053981f628cd2e7\",\"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\":\"3c2a23aac2d1f9a039df\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"97fe9086bf671fc65b79\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":2000,\"width\":568,\"height\":320,\"tabOrder\":0}}],\"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.0, - "width": 568.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 320.00, + "width": 568.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 }, { "config": "{\"name\":\"9d746993f4ec3207cc9b\",\"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\":\"3c2a23aac2d1f9a039df\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"a342312bcf053aecbda5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":4000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"a7a84a4bd26f8ff8b45c\",\"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\":\"a342312bcf053aecbda5\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"ab712e11ed6790a06dd4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":2000}}],\"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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 4000.00 }, { "config": "{\"name\":\"b0a035e8934a64119ac2\",\"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\":\"3c2a23aac2d1f9a039df\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { - "config": "{\"name\":\"babf5acb402181305ade\",\"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.CostSummary/featureName/Storage.Regions'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"a342312bcf053aecbda5\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"babf5acb402181305ade\",\"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/FTK$$ftkver$$/bladeName/PowerBI.CostSummary/featureName/Storage.Regions'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"a342312bcf053aecbda5\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"c6bc385644d94a94b630\",\"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\":\"3c2a23aac2d1f9a039df\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"d0e7e462c3df016e76c4\",\"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\":\"3c2a23aac2d1f9a039df\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "config": "{\"name\":\"e673b4061171acf3ca9a\",\"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\":\"139faa8cb07815b4ef4c\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"eb96203898242319f178\",\"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\":\"139faa8cb07815b4ef4c\"}", "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "config": "{\"name\":\"ef186d4ecc9a6d145065\",\"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\":\"3c2a23aac2d1f9a039df\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "config": "{\"name\":\"f2c123d1fadb7da64237\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":8,\"z\":3000,\"width\":472.00000000000006,\"height\":704,\"tabOrder\":1000}}],\"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.0, - "width": 472.0, - "x": 792.0, - "y": 8.0, - "z": 3000.0 + "height": 704.00, + "width": 472.00, + "x": 792.00, + "y": 8.00, + "z": 3000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "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.0, + "height": 720.00, "name": "ReportSection1cf2d1f5b35f16310482", "ordinal": 9, "visualContainers": [ { "config": "{\"name\":\"05f89315c1737cb4a8aa\",\"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\":\"5ff20e5e3f02fcc404a9\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"1d4af3fa6bad56f91320\",\"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\":\"5ff20e5e3f02fcc404a9\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "config": "{\"name\":\"21bfc20c264982840f7e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":3000,\"width\":1048,\"height\":280,\"tabOrder\":1000}}],\"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.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { "config": "{\"name\":\"284877100117267199c2\",\"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\":\"5ff20e5e3f02fcc404a9\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "config": "{\"name\":\"31ff57c0b6c323b66970\",\"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\":\"99833695335b2a2f8728\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"389541396bee898e1b43\",\"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\":\"99833695335b2a2f8728\"}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"410df25331899846580b\",\"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\":\"a3fac9f64ac4e1c34cc0\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "config": "{\"name\":\"4ecf537fc51d12858361\",\"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\":\"5ff20e5e3f02fcc404a9\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"4fe7e35e5aa5fdab14d4\",\"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\":\"5ff20e5e3f02fcc404a9\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"51c755b764bbdd0ff459\",\"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\":\"5ff20e5e3f02fcc404a9\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "config": "{\"name\":\"57deb8325e7110da4d19\",\"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\":\"99833695335b2a2f8728\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "config": "{\"name\":\"5ff20e5e3f02fcc404a9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":216.83810176118737,\"y\":8.087324571173982,\"z\":1000,\"tabOrder\":3000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, + "height": 704.00, "width": 1048.09, "x": 216.84, "y": 8.09, - "z": 1000.0 + "z": 1000.00 }, { "config": "{\"name\":\"673ebd4657493f0bc8aa\",\"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\":\"5ff20e5e3f02fcc404a9\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"678c3f85c7d047353f70\",\"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\":\"5ff20e5e3f02fcc404a9\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"686f69f7a3cdc19e6452\",\"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\":\"5ff20e5e3f02fcc404a9\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "config": "{\"name\":\"6efccc18fabb6d600132\",\"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\":\"5ff20e5e3f02fcc404a9\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "config": "{\"name\":\"6f317cd423b3eb2e22c6\",\"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\":\"99833695335b2a2f8728\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"8251b83d135472e6bd9f\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":2000,\"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.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 }, { - "config": "{\"name\":\"841a813e355731184b85\",\"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.CostSummary/featureName/Storage.Purchases'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"99833695335b2a2f8728\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"841a813e355731184b85\",\"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/FTK$$ftkver$$/bladeName/PowerBI.CostSummary/featureName/Storage.Purchases'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"99833695335b2a2f8728\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"9140527664d1950e052f\",\"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\":\"5ff20e5e3f02fcc404a9\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"99833695335b2a2f8728\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":4000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"a3fac9f64ac4e1c34cc0\",\"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\":\"99833695335b2a2f8728\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"b3ccd6db8fa84be4ef00\",\"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\":\"99833695335b2a2f8728\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"b3e3b88cc8b740d8f26c\",\"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\":\"5ff20e5e3f02fcc404a9\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"b44ab8c2efbf083edb6a\",\"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\":\"5ff20e5e3f02fcc404a9\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "config": "{\"name\":\"bc8498c4aeebdcf95b2f\",\"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\":\"5ff20e5e3f02fcc404a9\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "config": "{\"name\":\"bd03846eea98263cf71a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":2000}}],\"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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 4000.00 }, { "config": "{\"name\":\"be8b9f9556398b1f525f\",\"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\":\"a3fac9f64ac4e1c34cc0\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "config": "{\"name\":\"c441781031000a637cef\",\"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\":\"5ff20e5e3f02fcc404a9\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "config": "{\"name\":\"cf7e9883476c2d804a7a\",\"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\":\"a3fac9f64ac4e1c34cc0\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"d2d7091338ff0ef25bac\",\"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\":\"a3fac9f64ac4e1c34cc0\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "config": "{\"name\":\"e4f90ff8b909807a7e93\",\"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\":\"5ff20e5e3f02fcc404a9\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"fa23d79d3df476d8cbca\",\"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\":\"5ff20e5e3f02fcc404a9\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"fc7ac6029c6720f0a3d7\",\"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\":\"5ff20e5e3f02fcc404a9\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "config": "{\"name\":\"fee241efda61bfd93e14\",\"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\":\"a3fac9f64ac4e1c34cc0\"}", "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Prices", "displayOption": 1, "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.0, + "height": 720.00, "name": "ReportSection27adbc5b658c5d02bd16", "ordinal": 10, "visualContainers": [ { "config": "{\"name\":\"019674cbcfbb78136313\",\"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\":\"e3e15a4114ab319ac549\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"031450c9a8494d272a92\",\"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\":\"88da5916e57ceb5525e7\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"0475b694eedd4b77565a\",\"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\":\"55a6637a1f5c4cc1fd16\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "config": "{\"name\":\"0585277daaa71fd0ee08\",\"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\":\"e3e15a4114ab319ac549\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "config": "{\"name\":\"0596711445a6fc38509e\",\"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\":\"e3e15a4114ab319ac549\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"0620275b44a1217672e2\",\"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\":\"55a6637a1f5c4cc1fd16\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "config": "{\"name\":\"0c895b14fafd245feb57\",\"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\":\"e3e15a4114ab319ac549\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"15f9125fe0fb5077ca1d\",\"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\":\"e3e15a4114ab319ac549\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"2420a8c9984eed6b43b0\",\"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\":\"e3e15a4114ab319ac549\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"2a852a17c3eb0e8968e5\",\"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\":\"e3e15a4114ab319ac549\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "config": "{\"name\":\"31075e8508b42ece4368\",\"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\":\"e3e15a4114ab319ac549\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "config": "{\"name\":\"4ba17c8c63999aab3c94\",\"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\":\"88da5916e57ceb5525e7\"}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"55a6637a1f5c4cc1fd16\",\"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\":\"88da5916e57ceb5525e7\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"575559d9b7a8b04cd2b3\",\"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\":\"e3e15a4114ab319ac549\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "config": "{\"name\":\"5a291f378cccd317dd87\",\"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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 5000.00 }, { "config": "{\"name\":\"649fcf41988509f0f155\",\"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\":\"e3e15a4114ab319ac549\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { - "config": "{\"name\":\"7fc8cfebf0b0e34f02bb\",\"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.CostSummary/featureName/Storage.Prices'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"88da5916e57ceb5525e7\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"7fc8cfebf0b0e34f02bb\",\"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/FTK$$ftkver$$/bladeName/PowerBI.CostSummary/featureName/Storage.Prices'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"88da5916e57ceb5525e7\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "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,\"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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "config": "{\"name\":\"8734306c37b5fa40fc71\",\"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\":\"e3e15a4114ab319ac549\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"87a8563a94301541c745\",\"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\":\"e3e15a4114ab319ac549\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "config": "{\"name\":\"88da5916e57ceb5525e7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":5000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"92245e90a6c0c38b4f2b\",\"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\":\"e3e15a4114ab319ac549\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "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\":\"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.0, - "width": 760.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 608.00, + "width": 760.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { "config": "{\"name\":\"9c2f5435b3e453dd37fa\",\"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\":\"88da5916e57ceb5525e7\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "config": "{\"name\":\"a76e1a3a0bc16d12b15f\",\"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\":\"e3e15a4114ab319ac549\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"b3bbd543b642f1e16753\",\"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\":\"e3e15a4114ab319ac549\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "config": "{\"name\":\"b6367a8e2400eb28b523\",\"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\":\"88da5916e57ceb5525e7\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"ba7387892fd6c46e29dc\",\"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\":\"55a6637a1f5c4cc1fd16\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "config": "{\"name\":\"bc5194b3a857b68a14e5\",\"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\":\"e3e15a4114ab319ac549\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "config": "{\"name\":\"c0032af8032e591e8dd4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":2000}}],\"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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 4000.00 }, { "config": "{\"name\":\"e028e4a54e5da1256659\",\"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\":\"55a6637a1f5c4cc1fd16\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"e1c0a8145913da88e060\",\"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\":\"88da5916e57ceb5525e7\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"e3e15a4114ab319ac549\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":216.00126878372978,\"y\":7.522749379008424,\"z\":1000,\"tabOrder\":4000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, + "height": 704.00, "width": 1048.09, - "x": 216.0, + "x": 216.00, "y": 7.52, - "z": 1000.0 + "z": 1000.00 }, { "config": "{\"name\":\"e988812941e699d4cfe6\",\"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\":\"e3e15a4114ab319ac549\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "config": "{\"name\":\"ea5872e707f3344fbad0\",\"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\":\"e3e15a4114ab319ac549\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"f6f56e2bab269b479529\",\"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.0, - "width": 280.0, - "x": 984.0, - "y": 104.0, - "z": 2000.0 + "height": 608.00, + "width": 280.00, + "x": 984.00, + "y": 104.00, + "z": 2000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{\"visibility\":1}", "displayName": "DQ", "displayOption": 2, "filters": "[]", - "height": 2720.0, + "height": 2720.00, "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.0, - "width": 1264.0, - "x": 8.0, + "height": 272.00, + "width": 1264.00, + "x": 8.00, "y": 903.94, - "z": 13000.0 + "z": 13000.00 }, { "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.0, - "width": 1264.0, - "x": 8.0, + "height": 272.00, + "width": 1264.00, + "x": 8.00, "y": 623.94, - "z": 6000.0 + "z": 6000.00 }, { "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.0, - "width": 256.0, - "x": 0.0, + "height": 152.00, + "width": 256.00, + "x": 0.00, "y": 287.16, - "z": 1000.0 + "z": 1000.00 }, { "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.0, - "width": 256.0, - "x": 0.0, + "height": 112.00, + "width": 256.00, + "x": 0.00, "y": 175.16, - "z": 0.0 + "z": 0.00 }, { "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.0, - "width": 256.0, - "x": 0.0, + "height": 88.00, + "width": 256.00, + "x": 0.00, "y": 439.16, - "z": 8000.0 + "z": 8000.00 }, { "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.0, - "width": 1280.0, - "x": 0.0, + "height": 80.00, + "width": 1280.00, + "x": 0.00, "y": 535.94, - "z": 12000.0 + "z": 12000.00 }, { "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.0, - "width": 1280.0, - "x": 0.0, + "height": 80.00, + "width": 1280.00, + "x": 0.00, "y": 1191.94, - "z": 11000.0 + "z": 11000.00 }, { "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.0, - "width": 360.0, - "x": 16.0, + "height": 200.00, + "width": 360.00, + "x": 16.00, "y": 1287.94, - "z": 9000.0 + "z": 9000.00 }, { "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.0, - "width": 1280.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 48.00, + "width": 1280.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 256.0, - "x": 768.0, + "height": 352.00, + "width": 256.00, + "x": 768.00, "y": 175.16, - "z": 2000.0 + "z": 2000.00 }, { "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.0, - "width": 256.0, - "x": 256.0, + "height": 352.00, + "width": 256.00, + "x": 256.00, "y": 175.16, - "z": 3000.0 + "z": 3000.00 }, { "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.0, - "width": 1280.0, - "x": 0.0, - "y": 48.0, - "z": 10000.0 + "height": 112.00, + "width": 1280.00, + "x": 0.00, + "y": 48.00, + "z": 10000.00 }, { "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.0, - "width": 256.0, - "x": 1024.0, + "height": 88.00, + "width": 256.00, + "x": 1024.00, "y": 175.16, - "z": 5000.0 + "z": 5000.00 }, { "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.0, - "width": 1264.0, - "x": 8.0, - "y": 2128.0, - "z": 19000.0 + "height": 216.00, + "width": 1264.00, + "x": 8.00, + "y": 2128.00, + "z": 19000.00 }, { "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.0, - "width": 632.0, - "x": 376.0, + "height": 200.00, + "width": 632.00, + "x": 376.00, "y": 1287.94, - "z": 14000.0 + "z": 14000.00 }, { "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.0, - "width": 1264.0, - "x": 8.0, - "y": 1624.0, - "z": 16000.0 + "height": 496.00, + "width": 1264.00, + "x": 8.00, + "y": 1624.00, + "z": 16000.00 }, { "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.0, - "width": 1280.0, - "x": 0.0, - "y": 2360.0, - "z": 18000.0 + "height": 128.00, + "width": 1280.00, + "x": 0.00, + "y": 2360.00, + "z": 18000.00 }, { "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.0, - "width": 1264.0, - "x": 8.0, - "y": 2496.0, - "z": 17000.0 + "height": 216.00, + "width": 1264.00, + "x": 8.00, + "y": 2496.00, + "z": 17000.00 }, { "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.0, - "width": 1280.0, - "x": 0.0, - "y": 1504.0, - "z": 15000.0 + "height": 112.00, + "width": 1280.00, + "x": 0.00, + "y": 1504.00, + "z": 15000.00 }, { "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.0, - "width": 256.0, - "x": 512.0, + "height": 352.00, + "width": 256.00, + "x": 512.00, "y": 175.16, - "z": 7000.0 + "z": 7000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Resource groups", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "name": "ReportSection3867a4b32e66201e7c9d", "ordinal": 5, "visualContainers": [ { "config": "{\"name\":\"05aab2c3daeae37033af\",\"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\":\"d69d0ab63a06ad81794b\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "config": "{\"name\":\"0c806f5e426cb4873eab\",\"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\":\"32bebbbb1a7759ccf6a2\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "config": "{\"name\":\"0e3b0e44dc32bb30538d\",\"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\":\"d69d0ab63a06ad81794b\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "config": "{\"name\":\"14a73563abb0b670b74e\",\"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\":\"32bebbbb1a7759ccf6a2\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"16beadbffe5fe51d559b\",\"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\":\"d69d0ab63a06ad81794b\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "config": "{\"name\":\"16e67f3d079f0bc9d008\",\"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\":\"d69d0ab63a06ad81794b\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"1f4cf29f08646f5bbab2\",\"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\":\"d69d0ab63a06ad81794b\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"2b7cede270cf2f923026\",\"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\":\"d69d0ab63a06ad81794b\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"2fe45688d012b095b39c\",\"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\":\"d69d0ab63a06ad81794b\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "config": "{\"name\":\"32bebbbb1a7759ccf6a2\",\"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\":\"3f9d9634a0bd31123183\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"35902afd431955301607\",\"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\":\"d69d0ab63a06ad81794b\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"3a5624b0e2dc126adbde\",\"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\":\"3f9d9634a0bd31123183\"}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 5500.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 5500.00 }, { "config": "{\"name\":\"3c7b1290dc44d906a97f\",\"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\":\"d69d0ab63a06ad81794b\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "config": "{\"name\":\"3f9d9634a0bd31123183\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":4000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"5a09320d02798f150e15\",\"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\":\"32bebbbb1a7759ccf6a2\"}", "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "config": "{\"name\":\"6705b5c58d5c9a2312c7\",\"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\":\"d69d0ab63a06ad81794b\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"77c9932080cdb2eeb872\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":2000}}],\"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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 4000.00 }, { "config": "{\"name\":\"8430c2957f7722fcc4a9\",\"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\":\"d69d0ab63a06ad81794b\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"869a5d9405fb781a24da\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":296,\"z\":2000,\"width\":1048,\"height\":416,\"tabOrder\":1000}}],\"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.0, - "width": 1048.0, - "x": 216.0, - "y": 296.0, - "z": 2000.0 + "height": 416.00, + "width": 1048.00, + "x": 216.00, + "y": 296.00, + "z": 2000.00 }, { "config": "{\"name\":\"89b30acc8c638ad91a58\",\"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\":\"d69d0ab63a06ad81794b\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "config": "{\"name\":\"8dd5e477519701521e11\",\"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.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 6000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 6000.00 }, { "config": "{\"name\":\"91aa2bfec1ef97b486a6\",\"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\":\"32bebbbb1a7759ccf6a2\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { - "config": "{\"name\":\"996330e6d16b6b5205a0\",\"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.CostSummary/featureName/Storage.ResourceGroups'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3f9d9634a0bd31123183\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"996330e6d16b6b5205a0\",\"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/FTK$$ftkver$$/bladeName/PowerBI.CostSummary/featureName/Storage.ResourceGroups'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3f9d9634a0bd31123183\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"999caba31f1bbdcf8754\",\"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\":\"d69d0ab63a06ad81794b\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "config": "{\"name\":\"9b3cd0e686605eae8310\",\"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\":\"32bebbbb1a7759ccf6a2\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "config": "{\"name\":\"a477c8c30fe63c60b7ac\",\"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\":\"d69d0ab63a06ad81794b\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"a94b21e5caee56e43450\",\"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\":\"3f9d9634a0bd31123183\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"aa38de24c67853883684\",\"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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 5000.00 }, { "config": "{\"name\":\"bd430a9ea51264bcccbd\",\"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\":\"3f9d9634a0bd31123183\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "config": "{\"name\":\"bf776a7642a7ae80f902\",\"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\":\"3f9d9634a0bd31123183\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"c1ea43612ddc1fa5a016\",\"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\":\"d69d0ab63a06ad81794b\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"c4495b106c80dca85cba\",\"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.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 184.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { "config": "{\"name\":\"d654c3ef810f23b89cfe\",\"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\":\"3f9d9634a0bd31123183\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"d69d0ab63a06ad81794b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":216.00126878372978,\"y\":7.522749379008424,\"z\":1000,\"tabOrder\":3000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, + "height": 704.00, "width": 1048.09, - "x": 216.0, + "x": 216.00, "y": 7.52, - "z": 1000.0 + "z": 1000.00 }, { "config": "{\"name\":\"d6ae3b68af64448a904a\",\"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\":\"d69d0ab63a06ad81794b\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "config": "{\"name\":\"e8288f578c09a6d7e348\",\"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\":\"d69d0ab63a06ad81794b\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "config": "{\"name\":\"f498bfbd57d4b2773448\",\"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\":\"d69d0ab63a06ad81794b\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "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\"}}}}}]}}]", - "height": 720.0, + "height": 720.00, "name": "ReportSection7cfbc31c105d95e75492", "ordinal": 8, "visualContainers": [ { "config": "{\"name\":\"00d7cb0f5d44b6ef2ec4\",\"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\":\"c6b11b3f37a93a8cd363\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "config": "{\"name\":\"07402b50600cd51b6a0f\",\"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\":\"c6b11b3f37a93a8cd363\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"0a836cb28a1fada081db\",\"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\":\"1b743dc33d3a3b80036c\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { - "config": "{\"name\":\"164dea0fad3df20d96aa\",\"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.CostSummary/featureName/Storage.Inventory'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1b743dc33d3a3b80036c\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"164dea0fad3df20d96aa\",\"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/FTK$$ftkver$$/bladeName/PowerBI.CostSummary/featureName/Storage.Inventory'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1b743dc33d3a3b80036c\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"1b743dc33d3a3b80036c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":5000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"1e6cc0c0358801ec764c\",\"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\":\"c6b11b3f37a93a8cd363\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "config": "{\"name\":\"20077b966b82fff13b96\",\"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\":\"1b743dc33d3a3b80036c\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "config": "{\"name\":\"2153988bc6a4b5fa39fb\",\"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\":\"c6b11b3f37a93a8cd363\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "config": "{\"name\":\"2dcadd13dd8b7c9ccaa8\",\"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\":\"c6b11b3f37a93a8cd363\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"2fe7155d5cb55ab446fa\",\"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\":\"445dfe074517ad79f082\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "config": "{\"name\":\"445dfe074517ad79f082\",\"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\":\"1b743dc33d3a3b80036c\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"4e6a1d7c761cf83a19c4\",\"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\":\"c6b11b3f37a93a8cd363\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"553d237f5f787c03cfd0\",\"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\":\"445dfe074517ad79f082\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "config": "{\"name\":\"5af74f8c57e159ed9a35\",\"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.0, - "width": 568.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 320.00, + "width": 568.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 }, { "config": "{\"name\":\"5c425fa0f37bcdd1f538\",\"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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 6000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 6000.00 }, { "config": "{\"name\":\"5ca4841b8056ca1bbb77\",\"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\":\"1b743dc33d3a3b80036c\"}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"5d6310639fa9d2d8025f\",\"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\":\"c6b11b3f37a93a8cd363\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"5fb93e11ec3b4225da1b\",\"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\":\"c6b11b3f37a93a8cd363\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"7f2c39beab2de778106e\",\"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\":\"c6b11b3f37a93a8cd363\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "config": "{\"name\":\"8e42c8b353b1a36d004e\",\"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.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 7000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 7000.00 }, { "config": "{\"name\":\"9838accbda4d24942be6\",\"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\":\"c6b11b3f37a93a8cd363\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "config": "{\"name\":\"a1508c5abc2bf1f0adff\",\"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\":\"445dfe074517ad79f082\"}", "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "config": "{\"name\":\"a35c8727d895b95b8092\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":392,\"z\":3000,\"width\":472.00000000000006,\"height\":320,\"tabOrder\":3000}}],\"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.0, - "width": 472.0, - "x": 792.0, - "y": 392.0, - "z": 3000.0 + "height": 320.00, + "width": 472.00, + "x": 792.00, + "y": 392.00, + "z": 3000.00 }, { "config": "{\"name\":\"adda505bbc1f77cb1a7d\",\"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\":\"c6b11b3f37a93a8cd363\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"b5a686bfcb74c2437c0c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":4000,\"width\":1048,\"height\":280,\"tabOrder\":1000}}],\"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.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 4000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"b780a99c90cc460f9869\",\"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\":\"c6b11b3f37a93a8cd363\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"bae427b1813573804072\",\"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\":\"c6b11b3f37a93a8cd363\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "config": "{\"name\":\"bc1475ab85c6e59bbda1\",\"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\":\"445dfe074517ad79f082\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"be1bd062a61c764d9d47\",\"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\":\"c6b11b3f37a93a8cd363\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "config": "{\"name\":\"bf1a9a28d265ad53e6a4\",\"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\":\"c6b11b3f37a93a8cd363\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "config": "{\"name\":\"c6b11b3f37a93a8cd363\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":216.00126878372978,\"y\":7.522749379008424,\"z\":1000,\"tabOrder\":4000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, + "height": 704.00, "width": 1048.09, - "x": 216.0, + "x": 216.00, "y": 7.52, - "z": 1000.0 + "z": 1000.00 }, { "config": "{\"name\":\"c8b1083b0a5d5cc8f97a\",\"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\":\"c6b11b3f37a93a8cd363\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "config": "{\"name\":\"ced8d80cdc608d39d13b\",\"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\":\"445dfe074517ad79f082\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "config": "{\"name\":\"d0a212294374d861475d\",\"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\":\"c6b11b3f37a93a8cd363\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"e15faac81e80093cc8b6\",\"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\":\"1b743dc33d3a3b80036c\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"e4382d4d6e585404063b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":982.5286821705427,\"y\":8,\"z\":8000,\"width\":184,\"height\":88,\"tabOrder\":9000}}],\"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.0, - "width": 184.0, + "height": 88.00, + "width": 184.00, "x": 982.53, - "y": 8.0, - "z": 8000.0 + "y": 8.00, + "z": 8000.00 }, { "config": "{\"name\":\"e68ce24fee1e83a5e406\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":2000}}],\"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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 5000.00 }, { "config": "{\"name\":\"e78cd1c3ba89b7990cd2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":790.5286821705427,\"y\":8,\"z\":9000,\"width\":184,\"height\":88,\"tabOrder\":8000}}],\"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.0, - "width": 184.0, + "height": 88.00, + "width": 184.00, "x": 790.53, - "y": 8.0, - "z": 9000.0 + "y": 8.00, + "z": 9000.00 }, { "config": "{\"name\":\"fc148c3dcc6dbe38d622\",\"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\":\"1b743dc33d3a3b80036c\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"fdc5eac3f8dde4402e67\",\"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\":\"c6b11b3f37a93a8cd363\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Summary", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "name": "ReportSection85de2b23d730d521bd94", "ordinal": 1, "visualContainers": [ { "config": "{\"name\":\"01279dd97cbd95b3d878\",\"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\":\"cc120260fef296dc0063\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"0240529871ec806659f1\",\"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\":\"5fdd081099286cc5515a\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"0dc66361af036438120a\",\"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\":\"885a146bb7266304213e\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "config": "{\"name\":\"1f80ba019aaa9feaa202\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104.00000000000001,\"z\":3000,\"width\":1048,\"height\":280,\"tabOrder\":3000}}],\"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_NegotiatedDiscountSavingsRunningTotal\"},\"Name\":\"CostDetails.x_NegotiatedDiscountSavingsRunningTotal\",\"NativeReferenceName\":\"Negotiated savings\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountSavingsRunningTotal\"},\"Name\":\"CostDetails.x_CommitmentDiscountSavingsRunningTotal\",\"NativeReferenceName\":\"Commitment savings\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_TotalSavingsRunningTotal\"},\"Name\":\"CostDetails.x_TotalSavingsRunningTotal\",\"NativeReferenceName\":\"Total savings\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"CostDetails.EffectiveCostRunningTotal\":{\"displayName\":\"Cost\"},\"CostDetails.x_NegotiatedDiscountSavingsRunningTotal\":{\"displayName\":\"Negotiated savings\"},\"CostDetails.x_CommitmentDiscountSavingsRunningTotal\":{\"displayName\":\"Commitment savings\"},\"CostDetails.x_TotalSavingsRunningTotal\":{\"displayName\":\"Total 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.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { "config": "{\"name\":\"23cc94f0e525abb4337b\",\"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\":\"885a146bb7266304213e\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "config": "{\"name\":\"3a7239113e39b819fd93\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":2000,\"width\":1048,\"height\":320,\"tabOrder\":1000}}],\"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.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 }, { "config": "{\"name\":\"3b9424aeb69d93d2abb6\",\"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\":\"885a146bb7266304213e\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "config": "{\"name\":\"3e8d2268219fdf39f6d2\",\"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\":\"885a146bb7266304213e\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "config": "{\"name\":\"4690d14312dae57f6407\",\"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\":\"885a146bb7266304213e\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"5129175b27b70396f0e2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":2500,\"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/CostSummary#services'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"cc120260fef296dc0063\"}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 2500.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 2500.00 }, { "config": "{\"name\":\"53756b7cb1bac0b2cd41\",\"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\":\"5fdd081099286cc5515a\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "config": "{\"name\":\"54d5b43a75f7bdcc26f7\",\"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\":\"885a146bb7266304213e\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"5627785dffc5a1b823d5\",\"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\":\"885a146bb7266304213e\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"5818da5988c0b0f587c6\",\"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\":\"885a146bb7266304213e\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "config": "{\"name\":\"5ce8f494a69fb417f23d\",\"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\":\"cc120260fef296dc0063\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"5fdd081099286cc5515a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":1937,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"cc120260fef296dc0063\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 1937.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 1937.00 }, { "config": "{\"name\":\"6f59e323bb2c4273125e\",\"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\":\"5fdd081099286cc5515a\"}", "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "config": "{\"name\":\"78ac8d0efeaa039bbe4c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":2000}}],\"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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 4000.00 }, { "config": "{\"name\":\"7ba3b7c84bda1f196039\",\"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\":\"885a146bb7266304213e\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"7d04342299e762f6e069\",\"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\":\"885a146bb7266304213e\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"87fba1b6853048ae009e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":1750,\"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\":\"cc120260fef296dc0063\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 1750.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 1750.00 }, { "config": "{\"name\":\"885a146bb7266304213e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":226,\"y\":16,\"z\":1000,\"tabOrder\":4000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, + "height": 704.00, "width": 1048.09, - "x": 226.0, - "y": 16.0, - "z": 1000.0 + "x": 226.00, + "y": 16.00, + "z": 1000.00 }, { "config": "{\"name\":\"890e99b1fb205ddd71b5\",\"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\":\"885a146bb7266304213e\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "config": "{\"name\":\"8a5ea361b0996ee400cd\",\"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\":\"885a146bb7266304213e\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { - "config": "{\"name\":\"a087c742450739de4a6f\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":1500,\"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%20Cost%20summary%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Cost%20summary%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.CostSummary/featureName/Storage.Summary'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"cc120260fef296dc0063\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"a087c742450739de4a6f\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":1500,\"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%20Cost%20summary%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Cost%20summary%20report%3F/surveyId/FTK$$ftkver$$/bladeName/PowerBI.CostSummary/featureName/Storage.Summary'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"cc120260fef296dc0063\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 1500.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 1500.00 }, { "config": "{\"name\":\"aba1f30d7c8a0f77ecf4\",\"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\":\"885a146bb7266304213e\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"b3e5f2ea540576275fac\",\"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\":\"885a146bb7266304213e\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"c4f79b542d1e0343db9e\",\"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\":\"cc120260fef296dc0063\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 2000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"c6106a31b9b655270593\",\"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\":\"885a146bb7266304213e\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"cb4c6981d3aa02566dca\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"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.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 6000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 6000.00 }, { "config": "{\"name\":\"cc120260fef296dc0063\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":5000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"cc7a98e2b22df663c952\",\"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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 5000.00 }, { "config": "{\"name\":\"cd1336c34d2d4b36400b\",\"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\":\"5fdd081099286cc5515a\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "config": "{\"name\":\"d2765b0adb44d25a2c9e\",\"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\":\"885a146bb7266304213e\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "config": "{\"name\":\"d3e6f00831dcc7fa8edb\",\"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\":\"5fdd081099286cc5515a\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "config": "{\"name\":\"deb8ee5c4f4a1febcf05\",\"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\":\"885a146bb7266304213e\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"f3a1c3af0e5f109d317f\",\"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\":\"885a146bb7266304213e\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Services", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "name": "ReportSectionb35903d610c9a37a4dcd", "ordinal": 3, "visualContainers": [ { "config": "{\"name\":\"00016be0b3ea089ab4f9\",\"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\":\"5b29afe810bddcec1eaf\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"04e7d5814bc5bd78f8e6\",\"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\":\"5b29afe810bddcec1eaf\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"0c61833c228027975cdb\",\"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\":\"5b29afe810bddcec1eaf\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"14923b4d5108889c1435\",\"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\":\"b4a932bf9f0620c9fbfe\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { - "config": "{\"name\":\"15c86a307bfa61308d37\",\"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.CostSummary/featureName/Storage.Services'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b4a932bf9f0620c9fbfe\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"15c86a307bfa61308d37\",\"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/FTK$$ftkver$$/bladeName/PowerBI.CostSummary/featureName/Storage.Services'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b4a932bf9f0620c9fbfe\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"2b379e1af6a3c0625523\",\"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\":\"b4a932bf9f0620c9fbfe\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"2fae0e3807576ff55f60\",\"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.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 }, { "config": "{\"name\":\"3ed1d00314de1f232e95\",\"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\":\"5b29afe810bddcec1eaf\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"43818c020cc4ead27151\",\"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\":\"5b29afe810bddcec1eaf\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "config": "{\"name\":\"449fe296229d6cd185c5\",\"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\":\"5b29afe810bddcec1eaf\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"493481e79b30080c9a8f\",\"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\":\"5b29afe810bddcec1eaf\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "config": "{\"name\":\"4da407716b263129f9f9\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":2000}}],\"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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 4000.00 }, { "config": "{\"name\":\"51e75d3f894bd18fd5f1\",\"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\":\"5b29afe810bddcec1eaf\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "config": "{\"name\":\"5b29afe810bddcec1eaf\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":226,\"y\":16,\"z\":1000,\"tabOrder\":3000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, + "height": 704.00, "width": 1048.09, - "x": 226.0, - "y": 16.0, - "z": 1000.0 + "x": 226.00, + "y": 16.00, + "z": 1000.00 }, { "config": "{\"name\":\"618db9dbf99b92a5c998\",\"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\":\"b4a932bf9f0620c9fbfe\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"6245c51cd01fc9a2b47f\",\"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\":\"5b29afe810bddcec1eaf\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "config": "{\"name\":\"726c2aa1befd1fd43868\",\"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\":\"5b29afe810bddcec1eaf\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "config": "{\"name\":\"72baa37899a9d8289f71\",\"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\":\"618db9dbf99b92a5c998\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "config": "{\"name\":\"72ec1af5dee91bfb8c3b\",\"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\":\"5b29afe810bddcec1eaf\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "config": "{\"name\":\"752aaf93d4dd82cc2530\",\"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\":\"5b29afe810bddcec1eaf\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"77fc4e9cb4aa02c89090\",\"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\":\"b4a932bf9f0620c9fbfe\"}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"7f546d2d06700b0b59bd\",\"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\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"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.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { "config": "{\"name\":\"810e56339fb253ff424c\",\"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\":\"b4a932bf9f0620c9fbfe\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"8c2c9070a7e67386577f\",\"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\":\"5b29afe810bddcec1eaf\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"92ed2aa609800d51a70e\",\"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\":\"618db9dbf99b92a5c998\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "config": "{\"name\":\"a6748c2d35328296ecb6\",\"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\":\"618db9dbf99b92a5c998\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "config": "{\"name\":\"aa57a2cca94528a23ff7\",\"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\":\"5b29afe810bddcec1eaf\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "config": "{\"name\":\"b4a932bf9f0620c9fbfe\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":4000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"b5fe0c4641bafb11f315\",\"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\":\"5b29afe810bddcec1eaf\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"bc900a76352147ec2a53\",\"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\":\"618db9dbf99b92a5c998\"}", "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "config": "{\"name\":\"c2f8e6ab8e6299a7d1a3\",\"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\":\"618db9dbf99b92a5c998\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"cc790a9c10cedf4eb39d\",\"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\":\"5b29afe810bddcec1eaf\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "config": "{\"name\":\"eb85491c344dea0aea71\",\"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\":\"b4a932bf9f0620c9fbfe\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "config": "{\"name\":\"eec82b784c0d07b75eb4\",\"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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 5000.00 }, { "config": "{\"name\":\"f0e050f3b1544e4e9f4e\",\"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\":\"5b29afe810bddcec1eaf\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"f1472a2f23db6c158508\",\"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.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 6000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 6000.00 }, { "config": "{\"name\":\"f56e486e15e74c5b7c69\",\"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\":\"5b29afe810bddcec1eaf\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Charge breakdown", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "name": "ReportSectiond60edbb046ba85e7aebe", "ordinal": 2, "visualContainers": [ { "config": "{\"name\":\"015945d0101e9f61472a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":887.9999999999999,\"y\":8,\"z\":3000,\"width\":376,\"height\":184,\"tabOrder\":1000}}],\"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 discounts\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"Commitment discounts\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(CostDetails.x_TotalSavings)\":{\"displayName\":\"Total savings\"},\"Sum(CostDetails.x_NegotiatedDiscountSavings)\":{\"displayName\":\"Negotiated discounts\"},\"Sum(CostDetails.x_CommitmentDiscountSavings)\":{\"displayName\":\"Commitment discounts\"}},\"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.0, - "width": 376.0, - "x": 888.0, - "y": 8.0, - "z": 3000.0 + "height": 184.00, + "width": 376.00, + "x": 888.00, + "y": 8.00, + "z": 3000.00 }, { - "config": "{\"name\":\"06b1c195e04fc014c629\",\"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.CostSummary/featureName/Storage.ChargeBreakdown'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"39b04690e327e192f081\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"06b1c195e04fc014c629\",\"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/FTK$$ftkver$$/bladeName/PowerBI.CostSummary/featureName/Storage.ChargeBreakdown'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"39b04690e327e192f081\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"087113499dba340bb57a\",\"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\":\"f6e9ea8c5e4d14a56200\"}", "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "config": "{\"name\":\"0cb3f78732f8a42b42a5\",\"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\":\"4206b02753da43656306\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"0ff5e3d0062f2d8742bd\",\"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\":\"f6e9ea8c5e4d14a56200\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "config": "{\"name\":\"1cf2b92879b1951c0831\",\"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\":\"4206b02753da43656306\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"1eb30d87ed3c45197de4\",\"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\":\"4206b02753da43656306\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"2c45d28edf258a263827\",\"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\":\"f6e9ea8c5e4d14a56200\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"36f95bb7619480ecb112\",\"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\":\"4206b02753da43656306\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"36fa5b95079a06ba6e0b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":503.99999999999994,\"y\":8,\"z\":4000,\"width\":376,\"height\":184,\"tabOrder\":2000}}],\"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.0, - "width": 376.0, - "x": 504.0, - "y": 8.0, - "z": 4000.0 + "height": 184.00, + "width": 376.00, + "x": 504.00, + "y": 8.00, + "z": 4000.00 }, { "config": "{\"name\":\"381426a583be348eee8e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":192,\"x\":0,\"y\":0,\"z\":0,\"tabOrder\":4000}}],\"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\":\"39b04690e327e192f081\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"38a73fc81e095db5335d\",\"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\":\"4206b02753da43656306\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "config": "{\"name\":\"39b04690e327e192f081\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":5000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"3b1d4a37f1061a44d567\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":192,\"x\":0,\"y\":0,\"z\":5000,\"tabOrder\":3000}}],\"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\":\"39b04690e327e192f081\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"4206b02753da43656306\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":226,\"y\":16,\"z\":1000,\"tabOrder\":4000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, + "height": 704.00, "width": 1048.09, - "x": 226.0, - "y": 16.0, - "z": 1000.0 + "x": 226.00, + "y": 16.00, + "z": 1000.00 }, { "config": "{\"name\":\"440ec27826587a376588\",\"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\":\"4206b02753da43656306\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"4461c044cab0945b3a01\",\"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.0, - "width": 184.0, - "x": 216.0, - "y": 104.0, - "z": 6000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 104.00, + "z": 6000.00 }, { "config": "{\"name\":\"4f6d2c8dc74151be9843\",\"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\":\"4206b02753da43656306\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "config": "{\"name\":\"5a3dbcac21449e858b11\",\"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\":\"4206b02753da43656306\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "config": "{\"name\":\"5ddb56ae2bc4d5119382\",\"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\":\"39b04690e327e192f081\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "config": "{\"name\":\"6acdcc2db6efbfe65f17\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":200,\"x\":0,\"y\":0,\"z\":1000,\"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\":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\":\"39b04690e327e192f081\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"6c806e74cb5d266e3697\",\"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\":\"4206b02753da43656306\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"89c03b2e5f9b2edd5767\",\"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\":\"f6e9ea8c5e4d14a56200\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "config": "{\"name\":\"9285a346e92e1660ca00\",\"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\":\"f6e9ea8c5e4d14a56200\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "config": "{\"name\":\"95ab034ed47e8139f799\",\"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\":\"4206b02753da43656306\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "config": "{\"name\":\"96b30652f2881edbe604\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":200,\"z\":2000,\"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\":\"null\"}}],\"isToggled\":true,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Analytics'\"}}],\"isToggled\":true,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Microsoft.Fabric'\"}}],\"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'\"}}}}}]}}]}}}", "filters": "[]", - "height": 512.0, - "width": 1048.0, - "x": 216.0, - "y": 200.0, - "z": 2000.0 + "height": 512.00, + "width": 1048.00, + "x": 216.00, + "y": 200.00, + "z": 2000.00 }, { "config": "{\"name\":\"9d5f09bb6a2906ee95e0\",\"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\":\"4206b02753da43656306\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"a9f30ddf6bbca1b0532d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":3000}}],\"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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 5000.00 }, { "config": "{\"name\":\"c1522bcd4d4b8034f11f\",\"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\":\"4206b02753da43656306\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "config": "{\"name\":\"c992b99509514278e040\",\"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\":\"4206b02753da43656306\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "config": "{\"name\":\"ca67fccd3638dfb37144\",\"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\":\"4206b02753da43656306\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "config": "{\"name\":\"d525fcaccf780b9b96ea\",\"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\":\"4206b02753da43656306\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"df010dc4a924d5d42be3\",\"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\":\"4206b02753da43656306\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "config": "{\"name\":\"ef233187b5fddbcfc86a\",\"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\":\"4206b02753da43656306\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "config": "{\"name\":\"f6e9ea8c5e4d14a56200\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"39b04690e327e192f081\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"fbad4415d5fa75292feb\",\"layouts\":[{\"id\":0,\"position\":{\"height\":40,\"width\":40,\"x\":160,\"y\":0,\"z\":6000,\"tabOrder\":2000}}],\"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\":\"39b04690e327e192f081\"}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"feeac0bf6d249feb095e\",\"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\":\"4206b02753da43656306\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Resources", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "name": "ReportSectionef6b9d8f58d421ca021e", "ordinal": 6, "visualContainers": [ { "config": "{\"name\":\"0adbeea581c6e72d0f2d\",\"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\":\"aa5adaef267afc3007df\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { - "config": "{\"name\":\"0da3ca30cbe96f93742f\",\"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.CostSummary/featureName/Storage.Resources'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"5ecc1cba6a2687de72ff\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"0da3ca30cbe96f93742f\",\"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/FTK$$ftkver$$/bladeName/PowerBI.CostSummary/featureName/Storage.Resources'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"5ecc1cba6a2687de72ff\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"103a73591c6979423fff\",\"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\":\"3222d5bd18dd4780e14d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "config": "{\"name\":\"1bc6456e28cdc5f37ddd\",\"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\":\"3222d5bd18dd4780e14d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "config": "{\"name\":\"289ac7c4ae682071af70\",\"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\":\"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\"}],\"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\"}},\"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\"}}],\"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.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 }, { "config": "{\"name\":\"28c3ea9e2ad6bd39aa06\",\"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\":\"3222d5bd18dd4780e14d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "config": "{\"name\":\"2a2a1504711809769305\",\"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\":\"3222d5bd18dd4780e14d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"2aac30a402aca123c6ae\",\"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\":\"3222d5bd18dd4780e14d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "config": "{\"name\":\"3222d5bd18dd4780e14d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":216.00126878372978,\"y\":7.522749379008424,\"z\":1000,\"tabOrder\":3000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, + "height": 704.00, "width": 1048.09, - "x": 216.0, + "x": 216.00, "y": 7.52, - "z": 1000.0 + "z": 1000.00 }, { "config": "{\"name\":\"3c1e977a468b8068cb25\",\"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\":\"5ecc1cba6a2687de72ff\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"43d8df12dd3bd3c83506\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104.00000000000001,\"z\":3000,\"width\":1048,\"height\":280,\"tabOrder\":1000}}],\"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.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { "config": "{\"name\":\"484380a384c3fca397e1\",\"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\":\"3222d5bd18dd4780e14d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"4a4226c9f0cb01e1c4a5\",\"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\":\"3222d5bd18dd4780e14d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "config": "{\"name\":\"4df3f373728c60f7eb3c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":2000}}],\"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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 4000.00 }, { "config": "{\"name\":\"566e6d349be9adf4a4bf\",\"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\":\"3222d5bd18dd4780e14d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "config": "{\"name\":\"5e91f5d2f7dfb15bdd6c\",\"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\":\"aa5adaef267afc3007df\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "config": "{\"name\":\"5ecc1cba6a2687de72ff\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":4000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"5f32b55e40d83ad02290\",\"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\":\"3222d5bd18dd4780e14d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"6236dc0c4d75d1359002\",\"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\":\"3222d5bd18dd4780e14d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"69306a2659c59c8a7379\",\"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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 5000.00 }, { "config": "{\"name\":\"69b58c3b2e4f67e66c86\",\"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\":\"aa5adaef267afc3007df\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "config": "{\"name\":\"6a61756091be09e9840f\",\"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\":\"3222d5bd18dd4780e14d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "config": "{\"name\":\"6eb2ca06efa41db48cca\",\"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\":\"5ecc1cba6a2687de72ff\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"700b6bc93f97e4880034\",\"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\":\"aa5adaef267afc3007df\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"72f44434a1b1fc4f80ce\",\"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\":\"5ecc1cba6a2687de72ff\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"7ae645199ad2ae46333a\",\"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\":\"3222d5bd18dd4780e14d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "config": "{\"name\":\"7f4111659a282e57a5b4\",\"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\":\"3222d5bd18dd4780e14d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"86b5e4052958b01adbfc\",\"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\":\"3222d5bd18dd4780e14d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "config": "{\"name\":\"8bc859b81cc83144d37c\",\"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.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 6000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 6000.00 }, { "config": "{\"name\":\"a6e93bdc574959d2362d\",\"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\":\"3222d5bd18dd4780e14d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"aa5adaef267afc3007df\",\"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\":\"5ecc1cba6a2687de72ff\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"aaca95ddfac2ab075ac0\",\"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\":\"aa5adaef267afc3007df\"}", "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "config": "{\"name\":\"ab54c521d6724cfe28ac\",\"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\":\"5ecc1cba6a2687de72ff\"}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"ac292d4eb4d67eb7a765\",\"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\":\"3222d5bd18dd4780e14d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"b44b02cba4e9ed0e88bc\",\"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\":\"3222d5bd18dd4780e14d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"d97292281e470e69988f\",\"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\":\"5ecc1cba6a2687de72ff\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "config": "{\"name\":\"fbcd856044efd14bb27c\",\"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\":\"3222d5bd18dd4780e14d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 } ], - "width": 1280.0 + "width": 1280.00 } ], "theme": "Microsoft_FinOps_light_theme275074610812726.json" -} +} \ No newline at end of file diff --git a/src/power-bi/storage/DataIngestion.Report/report.json b/src/power-bi/storage/DataIngestion.Report/report.json index 459d7a7cc..b7e740c86 100644 --- a/src/power-bi/storage/DataIngestion.Report/report.json +++ b/src/power-bi/storage/DataIngestion.Report/report.json @@ -317,7 +317,7 @@ "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.DataIngestion/featureName/Storage.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.DataIngestion/featureName/Storage.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.0, "width": 192.0, @@ -666,7 +666,7 @@ "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\"}", + "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/surveyId/FTK$$ftkver$$/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'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Clear filters'\"}}}}}]}},\"parentGroupName\":\"89c2013b1e0dcd8ca4d7\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", "height": 32.0, "width": 88.0, @@ -684,7 +684,7 @@ "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\"}", + "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/surveyId/FTK$$ftkver$$/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'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'17221f44c9a09057e62a'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", "height": 32.0, "width": 88.0, @@ -720,7 +720,7 @@ "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.DataIngestion/featureName/Storage.GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.DataIngestion/featureName/Storage.GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", "height": 32.0, "width": 112.0, @@ -924,7 +924,7 @@ "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-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\"}}}}}]}}}", + "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\":\"$$ftkver$$ · $$build-date$$ · 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.0, "width": 240.0, @@ -1159,7 +1159,7 @@ "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.DataIngestion/featureName/Storage.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.DataIngestion/featureName/Storage.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.0, "width": 192.0, @@ -1591,7 +1591,7 @@ "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.DataIngestion/featureName/Storage.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.DataIngestion/featureName/Storage.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.0, "width": 192.0, @@ -1941,7 +1941,7 @@ "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.DataIngestion/featureName/Storage.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.DataIngestion/featureName/Storage.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.0, "width": 192.0, diff --git a/src/power-bi/storage/Governance.Report/report.json b/src/power-bi/storage/Governance.Report/report.json index 79a653060..44ede4603 100644 --- a/src/power-bi/storage/Governance.Report/report.json +++ b/src/power-bi/storage/Governance.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_theme42364535749146226.json\",\"version\":\"5.61\",\"type\":1}},\"activeSectionIndex\":0,\"bookmarks\":[{\"displayName\":\"Get started\",\"name\":\"edcfcfcccda883d64d08\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"ReportSection04cb7247170034c13d74\",\"filters\":{\"byExpr\":[{\"name\":\"Filter077be543c5f39dd293aa\",\"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\":{\"343341e97b7308150de2\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"2f88fe1f9d6d506d0508\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d29000df9b0a2abc5015\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"7f45b86e304dcd91ca9b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"d184e5815389da951190\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ad133cfd2c0beb1ab921\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"99e94f2cdd163005c3e4\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"93c0a75fe687ca16c769\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"2d22308cb10dcc087c63\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"91f16ff5c81c3580d54c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1b9ac75fc3c3e096207d\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"e4a948d409b3b9e253db\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"08c50a4ebb0358a973a2\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"95af8eb7934776184738\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"bc04f2868305b29d0239\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d421a92f1e0c1dc52044\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e57ba4720d4adadd0dd1\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"572fa2574ac8093dccb0\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"c20c255b395a4d402a98\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"81f3ad399001b121980c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"bfbf6374780bb9645700\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c2c6189071b5d7c6ec49\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e2c1f687e750d62d5c8a\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"9a69c8906862d324b003\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"f84d3940511b3d884294\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"625f0f2c3e3e50817073\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b8bdafac732b5c3dce37\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"5d4774a7237bab6e6e0e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d326a07aa710a27b75d1\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"17da4f869475d0c73352\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d0270bd10c5085d9d33c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"61b99c161600bcd08049\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1e0db69966960a28002e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"0951dca0791289048511\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9d51a450010690e38e14\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"cee7ae10bd05778784c2\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d7d7744d98ca90a96c22\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"95bfe3b3d6e6574c04b7\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b076d0dac3128804a7e5\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"efa6512eb467ee44dccb\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"77d17cb466cc547d7be1\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b4453dbc0604700e40d3\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"16824f1e8675d7b18849\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"49386d54185a9d091d60\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2d516cf0461a0900c710\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"794cf1e679ecc0b6a290\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c811028bc0ca12a83420\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"d3eafe8b0066d48e586c\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"f7fbd0f998d7d74e1a9d\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"4f37542549a00a0d0567\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}}},\"visualContainerGroups\":{\"d8bddd557d31b4bca135\":{\"isHidden\":true},\"b9a0d0b56d88e89400b7\":{\"isHidden\":false},\"96a699bca9168a144165\":{\"isHidden\":true},\"9ffcacc4c0d19818e9e1\":{\"isHidden\":false},\"3dbd558f332ccbe8d271\":{\"isHidden\":true},\"6c5d8dc299e02d8c4c04\":{\"isHidden\":false}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[]}},{\"displayName\":\"Get started - Connect\",\"name\":\"3b34c72ea115d83ce03e\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"ReportSection04cb7247170034c13d74\",\"filters\":{\"byExpr\":[{\"name\":\"Filter077be543c5f39dd293aa\",\"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\":{\"343341e97b7308150de2\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"2f88fe1f9d6d506d0508\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d29000df9b0a2abc5015\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"7f45b86e304dcd91ca9b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"d184e5815389da951190\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ad133cfd2c0beb1ab921\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"99e94f2cdd163005c3e4\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"93c0a75fe687ca16c769\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"2d22308cb10dcc087c63\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"91f16ff5c81c3580d54c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1b9ac75fc3c3e096207d\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"e4a948d409b3b9e253db\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"08c50a4ebb0358a973a2\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"95af8eb7934776184738\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"bc04f2868305b29d0239\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d421a92f1e0c1dc52044\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e57ba4720d4adadd0dd1\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"572fa2574ac8093dccb0\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"c20c255b395a4d402a98\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"81f3ad399001b121980c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"bfbf6374780bb9645700\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c2c6189071b5d7c6ec49\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e2c1f687e750d62d5c8a\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"9a69c8906862d324b003\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"f84d3940511b3d884294\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"625f0f2c3e3e50817073\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b8bdafac732b5c3dce37\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"5d4774a7237bab6e6e0e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d326a07aa710a27b75d1\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"17da4f869475d0c73352\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d0270bd10c5085d9d33c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"61b99c161600bcd08049\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1e0db69966960a28002e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"0951dca0791289048511\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9d51a450010690e38e14\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"cee7ae10bd05778784c2\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d7d7744d98ca90a96c22\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"95bfe3b3d6e6574c04b7\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b076d0dac3128804a7e5\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"efa6512eb467ee44dccb\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"77d17cb466cc547d7be1\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b4453dbc0604700e40d3\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"16824f1e8675d7b18849\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"49386d54185a9d091d60\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2d516cf0461a0900c710\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"794cf1e679ecc0b6a290\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c811028bc0ca12a83420\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"d3eafe8b0066d48e586c\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"f7fbd0f998d7d74e1a9d\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"4f37542549a00a0d0567\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}}},\"visualContainerGroups\":{\"d8bddd557d31b4bca135\":{\"isHidden\":false},\"b9a0d0b56d88e89400b7\":{\"isHidden\":true},\"96a699bca9168a144165\":{\"isHidden\":true},\"9ffcacc4c0d19818e9e1\":{\"isHidden\":true},\"3dbd558f332ccbe8d271\":{\"isHidden\":true},\"6c5d8dc299e02d8c4c04\":{\"isHidden\":true}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[]}},{\"displayName\":\"Get started - Help\",\"name\":\"2f08f03f1c17a4448378\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"ReportSection04cb7247170034c13d74\",\"filters\":{\"byExpr\":[{\"name\":\"Filter077be543c5f39dd293aa\",\"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\":{\"343341e97b7308150de2\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"2f88fe1f9d6d506d0508\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d29000df9b0a2abc5015\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"7f45b86e304dcd91ca9b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"d184e5815389da951190\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ad133cfd2c0beb1ab921\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"99e94f2cdd163005c3e4\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"93c0a75fe687ca16c769\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"2d22308cb10dcc087c63\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"91f16ff5c81c3580d54c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1b9ac75fc3c3e096207d\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"e4a948d409b3b9e253db\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"08c50a4ebb0358a973a2\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"95af8eb7934776184738\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"bc04f2868305b29d0239\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d421a92f1e0c1dc52044\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e57ba4720d4adadd0dd1\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"572fa2574ac8093dccb0\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"c20c255b395a4d402a98\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"81f3ad399001b121980c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"bfbf6374780bb9645700\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c2c6189071b5d7c6ec49\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e2c1f687e750d62d5c8a\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"9a69c8906862d324b003\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"f84d3940511b3d884294\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"625f0f2c3e3e50817073\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b8bdafac732b5c3dce37\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"5d4774a7237bab6e6e0e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d326a07aa710a27b75d1\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"17da4f869475d0c73352\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d0270bd10c5085d9d33c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"61b99c161600bcd08049\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1e0db69966960a28002e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"0951dca0791289048511\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9d51a450010690e38e14\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"cee7ae10bd05778784c2\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d7d7744d98ca90a96c22\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"95bfe3b3d6e6574c04b7\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b076d0dac3128804a7e5\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"efa6512eb467ee44dccb\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"77d17cb466cc547d7be1\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b4453dbc0604700e40d3\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"16824f1e8675d7b18849\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"49386d54185a9d091d60\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2d516cf0461a0900c710\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"794cf1e679ecc0b6a290\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c811028bc0ca12a83420\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"d3eafe8b0066d48e586c\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"f7fbd0f998d7d74e1a9d\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"4f37542549a00a0d0567\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}}},\"visualContainerGroups\":{\"d8bddd557d31b4bca135\":{\"isHidden\":true},\"b9a0d0b56d88e89400b7\":{\"isHidden\":true},\"96a699bca9168a144165\":{\"isHidden\":false},\"9ffcacc4c0d19818e9e1\":{\"isHidden\":true},\"3dbd558f332ccbe8d271\":{\"isHidden\":true},\"6c5d8dc299e02d8c4c04\":{\"isHidden\":true}}}},\"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.62\",\"themeCollection\":{\"baseTheme\":{\"name\":\"CY19SU06\",\"version\":\"5.5\",\"type\":2},\"customTheme\":{\"name\":\"Microsoft_FinOps_light_theme42364535749146226.json\",\"version\":\"5.61\",\"type\":1}},\"activeSectionIndex\":0,\"bookmarks\":[{\"displayName\":\"Get started\",\"name\":\"edcfcfcccda883d64d08\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"ReportSection04cb7247170034c13d74\",\"filters\":{\"byExpr\":[{\"name\":\"Filter077be543c5f39dd293aa\",\"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\":{\"343341e97b7308150de2\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"2f88fe1f9d6d506d0508\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d29000df9b0a2abc5015\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"7f45b86e304dcd91ca9b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"d184e5815389da951190\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ad133cfd2c0beb1ab921\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"99e94f2cdd163005c3e4\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"93c0a75fe687ca16c769\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"2d22308cb10dcc087c63\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"91f16ff5c81c3580d54c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1b9ac75fc3c3e096207d\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"e4a948d409b3b9e253db\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"08c50a4ebb0358a973a2\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"95af8eb7934776184738\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"bc04f2868305b29d0239\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d421a92f1e0c1dc52044\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e57ba4720d4adadd0dd1\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"572fa2574ac8093dccb0\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"c20c255b395a4d402a98\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"81f3ad399001b121980c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"bfbf6374780bb9645700\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c2c6189071b5d7c6ec49\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e2c1f687e750d62d5c8a\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"9a69c8906862d324b003\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"f84d3940511b3d884294\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"625f0f2c3e3e50817073\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b8bdafac732b5c3dce37\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"5d4774a7237bab6e6e0e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d326a07aa710a27b75d1\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"17da4f869475d0c73352\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d0270bd10c5085d9d33c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"61b99c161600bcd08049\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1e0db69966960a28002e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"0951dca0791289048511\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9d51a450010690e38e14\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"cee7ae10bd05778784c2\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d7d7744d98ca90a96c22\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"95bfe3b3d6e6574c04b7\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b076d0dac3128804a7e5\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"efa6512eb467ee44dccb\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"77d17cb466cc547d7be1\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b4453dbc0604700e40d3\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"16824f1e8675d7b18849\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"49386d54185a9d091d60\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2d516cf0461a0900c710\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"794cf1e679ecc0b6a290\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c811028bc0ca12a83420\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"d3eafe8b0066d48e586c\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"f7fbd0f998d7d74e1a9d\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"4f37542549a00a0d0567\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}}},\"visualContainerGroups\":{\"d8bddd557d31b4bca135\":{\"isHidden\":true},\"b9a0d0b56d88e89400b7\":{\"isHidden\":false},\"96a699bca9168a144165\":{\"isHidden\":true},\"9ffcacc4c0d19818e9e1\":{\"isHidden\":false},\"3dbd558f332ccbe8d271\":{\"isHidden\":true},\"6c5d8dc299e02d8c4c04\":{\"isHidden\":false}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[]}},{\"displayName\":\"Get started - Connect\",\"name\":\"3b34c72ea115d83ce03e\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"ReportSection04cb7247170034c13d74\",\"filters\":{\"byExpr\":[{\"name\":\"Filter077be543c5f39dd293aa\",\"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\":{\"343341e97b7308150de2\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"2f88fe1f9d6d506d0508\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d29000df9b0a2abc5015\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"7f45b86e304dcd91ca9b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"d184e5815389da951190\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ad133cfd2c0beb1ab921\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"99e94f2cdd163005c3e4\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"93c0a75fe687ca16c769\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"2d22308cb10dcc087c63\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"91f16ff5c81c3580d54c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1b9ac75fc3c3e096207d\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"e4a948d409b3b9e253db\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"08c50a4ebb0358a973a2\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"95af8eb7934776184738\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"bc04f2868305b29d0239\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d421a92f1e0c1dc52044\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e57ba4720d4adadd0dd1\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"572fa2574ac8093dccb0\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"c20c255b395a4d402a98\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"81f3ad399001b121980c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"bfbf6374780bb9645700\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c2c6189071b5d7c6ec49\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e2c1f687e750d62d5c8a\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"9a69c8906862d324b003\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"f84d3940511b3d884294\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"625f0f2c3e3e50817073\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b8bdafac732b5c3dce37\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"5d4774a7237bab6e6e0e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d326a07aa710a27b75d1\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"17da4f869475d0c73352\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d0270bd10c5085d9d33c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"61b99c161600bcd08049\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1e0db69966960a28002e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"0951dca0791289048511\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9d51a450010690e38e14\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"cee7ae10bd05778784c2\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d7d7744d98ca90a96c22\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"95bfe3b3d6e6574c04b7\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b076d0dac3128804a7e5\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"efa6512eb467ee44dccb\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"77d17cb466cc547d7be1\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b4453dbc0604700e40d3\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"16824f1e8675d7b18849\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"49386d54185a9d091d60\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2d516cf0461a0900c710\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"794cf1e679ecc0b6a290\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c811028bc0ca12a83420\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"d3eafe8b0066d48e586c\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"f7fbd0f998d7d74e1a9d\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"4f37542549a00a0d0567\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}}},\"visualContainerGroups\":{\"d8bddd557d31b4bca135\":{\"isHidden\":false},\"b9a0d0b56d88e89400b7\":{\"isHidden\":true},\"96a699bca9168a144165\":{\"isHidden\":true},\"9ffcacc4c0d19818e9e1\":{\"isHidden\":true},\"3dbd558f332ccbe8d271\":{\"isHidden\":true},\"6c5d8dc299e02d8c4c04\":{\"isHidden\":true}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[]}},{\"displayName\":\"Get started - Help\",\"name\":\"2f08f03f1c17a4448378\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"ReportSection04cb7247170034c13d74\",\"filters\":{\"byExpr\":[{\"name\":\"Filter077be543c5f39dd293aa\",\"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\":{\"343341e97b7308150de2\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"2f88fe1f9d6d506d0508\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d29000df9b0a2abc5015\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"7f45b86e304dcd91ca9b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"d184e5815389da951190\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ad133cfd2c0beb1ab921\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"99e94f2cdd163005c3e4\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"93c0a75fe687ca16c769\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"2d22308cb10dcc087c63\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"91f16ff5c81c3580d54c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1b9ac75fc3c3e096207d\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"e4a948d409b3b9e253db\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"08c50a4ebb0358a973a2\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"95af8eb7934776184738\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"bc04f2868305b29d0239\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"d421a92f1e0c1dc52044\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e57ba4720d4adadd0dd1\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"572fa2574ac8093dccb0\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"c20c255b395a4d402a98\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"81f3ad399001b121980c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"bfbf6374780bb9645700\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c2c6189071b5d7c6ec49\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e2c1f687e750d62d5c8a\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"9a69c8906862d324b003\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"f84d3940511b3d884294\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"625f0f2c3e3e50817073\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b8bdafac732b5c3dce37\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"5d4774a7237bab6e6e0e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d326a07aa710a27b75d1\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"17da4f869475d0c73352\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d0270bd10c5085d9d33c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"61b99c161600bcd08049\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1e0db69966960a28002e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"0951dca0791289048511\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9d51a450010690e38e14\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"cee7ae10bd05778784c2\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d7d7744d98ca90a96c22\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"95bfe3b3d6e6574c04b7\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b076d0dac3128804a7e5\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"efa6512eb467ee44dccb\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"77d17cb466cc547d7be1\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b4453dbc0604700e40d3\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"16824f1e8675d7b18849\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"49386d54185a9d091d60\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2d516cf0461a0900c710\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"794cf1e679ecc0b6a290\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c811028bc0ca12a83420\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"d3eafe8b0066d48e586c\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"f7fbd0f998d7d74e1a9d\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"4f37542549a00a0d0567\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}}},\"visualContainerGroups\":{\"d8bddd557d31b4bca135\":{\"isHidden\":true},\"b9a0d0b56d88e89400b7\":{\"isHidden\":true},\"96a699bca9168a144165\":{\"isHidden\":false},\"9ffcacc4c0d19818e9e1\":{\"isHidden\":true},\"3dbd558f332ccbe8d271\":{\"isHidden\":true},\"6c5d8dc299e02d8c4c04\":{\"isHidden\":true}}}},\"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\":\"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\":{}}]", "layoutOptimization": 0, "pods": [ @@ -116,1456 +116,1457 @@ "displayName": "Managed disks", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "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\"}}}}}]}}}", + "config": "{\"name\":\"08d230f2800db021e877\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":5000,\"width\":1048,\"height\":280,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.ChargePeriodStart\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}],\"Series\":[{\"queryRef\":\"Disks (2).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 (2).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.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 5000.00 }, { - "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.0, - "width": 192.0, - "x": 0.0, - "y": 120.0, - "z": 1500.0 + "config": "{\"name\":\"0a349af0be7040700492\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":111.81863979848859,\"z\":0,\"width\":200.40302267002517,\"height\":56.22166246851385,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Disks.skuName\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"skuName\"},\"Name\":\"Disks.skuName\",\"NativeReferenceName\":\"SKU\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Disks.skuName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Disks.skuName\":{\"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\":\"12c304eb37642826eca5\"}", + "filters": "[{\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"skuName\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"skuName\"}},\"Right\":{\"Literal\":{\"Value\":\"null\"}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false}]", + "height": 56.22, + "width": 200.40, + "x": 0.00, + "y": 111.82, + "z": 0.00 }, { "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.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 + }, + { + "config": "{\"name\":\"12c304eb37642826eca5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":224.2619647355163,\"width\":200.40302267002517,\"x\":0,\"y\":104.00000000000006,\"z\":16000,\"tabOrder\":16000}}],\"singleVisualGroup\":{\"displayName\":\"Group 1\",\"groupMode\":0}}", + "height": 224.26, + "width": 200.40, + "x": 0.00, + "y": 104.00, + "z": 16000.00 }, { "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.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { - "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.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.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "config": "{\"name\":\"255abdf2eec605304388\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":3000,\"width\":1048,\"height\":320,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Disks (2).name\"},{\"queryRef\":\"Disks (2).resourceGroup\"},{\"queryRef\":\"Disks (2).location\"},{\"queryRef\":\"Disks (2).skuTier\"},{\"queryRef\":\"Disks (2).Redundancy\"},{\"queryRef\":\"Disks (2).diskState\"},{\"queryRef\":\"Disks (2).LastOwnershipUpdateTime\"},{\"queryRef\":\"Sum(Disks (2).diskSizeGB)\"},{\"queryRef\":\"Disks (2).diskType\"},{\"queryRef\":\"Costs.ChargePeriod\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.BilledCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0},{\"Name\":\"d1\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"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\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d1\"}},\"Property\":\"name\"},\"Name\":\"Disks (2).name\",\"NativeReferenceName\":\"Disk name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d1\"}},\"Property\":\"resourceGroup\"},\"Name\":\"Disks (2).resourceGroup\",\"NativeReferenceName\":\"Resource group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d1\"}},\"Property\":\"location\"},\"Name\":\"Disks (2).location\",\"NativeReferenceName\":\"Region\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d1\"}},\"Property\":\"skuTier\"},\"Name\":\"Disks (2).skuTier\",\"NativeReferenceName\":\"Tier\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d1\"}},\"Property\":\"Redundancy\"},\"Name\":\"Disks (2).Redundancy\",\"NativeReferenceName\":\"Redundancy\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d1\"}},\"Property\":\"diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks (2).diskSizeGB)\",\"NativeReferenceName\":\"Disk size GB1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d1\"}},\"Property\":\"diskType\"},\"Name\":\"Disks (2).diskType\",\"NativeReferenceName\":\"Disk type1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d1\"}},\"Property\":\"diskState\"},\"Name\":\"Disks (2).diskState\",\"NativeReferenceName\":\"Disk state\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d1\"}},\"Property\":\"LastOwnershipUpdateTime\"},\"Name\":\"Disks (2).LastOwnershipUpdateTime\",\"NativeReferenceName\":\"Last state update\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BilledCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Disks (2).name\":{\"displayName\":\"Disk name\"},\"Disks (2).resourceGroup\":{\"displayName\":\"Resource group\"},\"Disks (2).location\":{\"displayName\":\"Region\"},\"Disks (2).skuTier\":{\"displayName\":\"Tier\"},\"Sum(Disks (2).diskSizeGB)\":{\"displayName\":\"Disk size GB\"},\"Disks (2).diskType\":{\"displayName\":\"Disk type\"},\"Disks (2).diskState\":{\"displayName\":\"Disk state\"},\"Disks (2).LastOwnershipUpdateTime\":{\"displayName\":\"Last state update\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"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\":\"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\":\"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\":\"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\":\"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 (2).name\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Compute disks'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}", + "filters": "[{\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"name\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"d1\",\"Entity\":\"Disks\",\"Type\":0}],\"Where\":[{\"Condition\":{\"And\":{\"Left\":{\"Not\":{\"Expression\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d1\"}},\"Property\":\"name\"}},\"Right\":{\"Literal\":{\"Value\":\"''\"}}}}}},\"Right\":{\"Not\":{\"Expression\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d1\"}},\"Property\":\"name\"}},\"Right\":{\"Literal\":{\"Value\":\"null\"}}}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false}]", + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 3000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { - "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\"}}}}}]}}}", + "config": "{\"name\":\"37214c1d775deca4890c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":8,\"z\":14000,\"width\":224,\"height\":88,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"treemap\",\"projections\":{\"Group\":[{\"queryRef\":\"Disks (2).skuName\",\"active\":true}],\"Values\":[{\"queryRef\":\"Sum(Disks (2).diskSizeGB)\"}],\"Tooltips\":[{\"queryRef\":\"Sum(Disks (2).diskSizeGB)1\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d1\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d1\"}},\"Property\":\"skuName\"},\"Name\":\"Disks (2).skuName\",\"NativeReferenceName\":\"SKU\"},{\"Arithmetic\":{\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d1\"}},\"Property\":\"diskSizeGB\"}},\"Function\":0}},\"Right\":{\"ScopedEval\":{\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d1\"}},\"Property\":\"diskSizeGB\"}},\"Function\":0}},\"Scope\":[]}},\"Operator\":3},\"Name\":\"Sum(Disks (2).diskSizeGB)\",\"NativeReferenceName\":\"%GT diskSizeGB\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d1\"}},\"Property\":\"diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks (2).diskSizeGB)1\",\"NativeReferenceName\":\"Disk size GB\"}]},\"columnProperties\":{\"Disks (2).skuName\":{\"displayName\":\"SKU\"},\"Sum(Disks (2).diskSizeGB)\":{\"displayName\":\"Percent\"},\"Sum(Disks (2).diskSizeGB)1\":{\"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\":\"'Disk size (GB) by SKU'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}", "filters": "[]", - "height": 88.0, - "width": 224.0, - "x": 792.0, - "y": 8.0, - "z": 7000.0 + "height": 88.00, + "width": 224.00, + "x": 792.00, + "y": 8.00, + "z": 14000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { - "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\"}", + "config": "{\"name\":\"40533e45e2944ce55dad\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":200,\"height\":720,\"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\":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'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 }, { - "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\"}", + "config": "{\"name\":\"4563a997120200c62e3d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":8000,\"width\":192,\"height\":32,\"tabOrder\":15000}}],\"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\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 624.0, - "z": 3750.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 624.00, + "z": 8000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { - "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\"}}}}}]}}}", + "config": "{\"name\":\"4fd02f90920b3496700e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":168.04030226700246,\"z\":1000,\"width\":200.40302267002517,\"height\":56.22166246851385,\"tabOrder\":17002}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Disks.diskState\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskState\"},\"Name\":\"Disks.diskState\",\"NativeReferenceName\":\"Disk state\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Disks.diskState\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Disks.diskState\":{\"displayName\":\"Disk state\"}},\"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\":\"'Disk state'\"}}},\"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\":\"12c304eb37642826eca5\"}", + "filters": "[{\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"diskState\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskState\"}},\"Right\":{\"Literal\":{\"Value\":\"null\"}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false}]", + "height": 56.22, + "width": 200.40, + "x": 0.00, + "y": 168.04, + "z": 1000.00 + }, + { + "config": "{\"name\":\"562b5e0a91608ae97247\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1024,\"y\":8,\"z\":15000,\"width\":240.00000000000003,\"height\":88,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"treemap\",\"projections\":{\"Group\":[{\"queryRef\":\"Disks (2).diskState\",\"active\":true}],\"Values\":[{\"queryRef\":\"Divide(Sum(Disks (2).diskSizeGB), ScopedEval(Sum(Disks (2).diskSizeGB), []))\"}],\"Tooltips\":[{\"queryRef\":\"Sum(Disks (2).diskSizeGB)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d1\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d1\"}},\"Property\":\"diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks (2).diskSizeGB)\",\"NativeReferenceName\":\"Disk size GB1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d1\"}},\"Property\":\"diskState\"},\"Name\":\"Disks (2).diskState\",\"NativeReferenceName\":\"State\"},{\"Arithmetic\":{\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d1\"}},\"Property\":\"diskSizeGB\"}},\"Function\":0}},\"Right\":{\"ScopedEval\":{\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d1\"}},\"Property\":\"diskSizeGB\"}},\"Function\":0}},\"Scope\":[]}},\"Operator\":3},\"Name\":\"Divide(Sum(Disks (2).diskSizeGB), ScopedEval(Sum(Disks (2).diskSizeGB), []))\",\"NativeReferenceName\":\"Percent\"}]},\"columnProperties\":{\"Sum(Disks (2).diskSizeGB)\":{\"displayName\":\"Disk size GB\"},\"Disks (2).diskState\":{\"displayName\":\"State\"},\"Divide(Sum(Disks (2).diskSizeGB), ScopedEval(Sum(Disks (2).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'\"}}}}}]}},{\"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.0, - "width": 240.0, - "x": 1024.0, - "y": 8.0, - "z": 8000.0 + "height": 88.00, + "width": 240.00, + "x": 1024.00, + "y": 8.00, + "z": 15000.00 }, { - "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.Governance/featureName/Storage.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\"}", + "config": "{\"name\":\"58dd0210584ae7340d4d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":4000,\"width\":192,\"height\":32,\"tabOrder\":8000}}],\"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/FTK$$ftkver$$/bladeName/PowerBI.Governance/featureName/Storage.ManagedDisks'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 4000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { - "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\"}}}}}]}}}", + "config": "{\"name\":\"61bac6156218a7208103\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":9000,\"width\":184,\"height\":88,\"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\":\"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.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 9000.00 }, { - "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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 6000.0 + "config": "{\"name\":\"6365ac31ccbec60070bd\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":8,\"z\":12000,\"width\":184,\"height\":88,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(Disks (2).id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d1\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d1\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Min(Disks (2).id)\",\"NativeReferenceName\":\"Count of id\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d1\"}},\"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\":\"'Unattached disks'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}", + "filters": "[{\"name\":\"b981133c401d76a7136e\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"diskState\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskState\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Unattached'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 12000.00 }, { - "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.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 2000.0 + "config": "{\"name\":\"653663e0d015668c277e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":55.99999999999994,\"z\":2000,\"width\":200,\"height\":56,\"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\":\"12c304eb37642826eca5\"}", + "filters": "[{\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Resources\"}},\"Property\":\"location\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"location\"}},\"Right\":{\"Literal\":{\"Value\":\"null\"}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false}]", + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 2000.00 }, { - "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\"}", + "config": "{\"name\":\"6f374c92d60b90a6cb1a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":7000,\"width\":192,\"height\":32,\"tabOrder\":13000}}],\"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\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 624.0, - "z": 3500.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 624.00, + "z": 7000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { - "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\"}", + "config": "{\"name\":\"a594380691909a5de897\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":13000,\"width\":40,\"height\":40,\"tabOrder\":12000}}],\"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'\"}}}}}]}}}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 13000.00 }, { - "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 3000.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\":\"12c304eb37642826eca5\"}", + "filters": "[{\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Subscriptions\"}},\"Property\":\"name\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"}},\"Right\":{\"Literal\":{\"Value\":\"null\"}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false}]", + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { - "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\"}", + "config": "{\"name\":\"b7a20920765047860b6a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":3000}}],\"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}}}}}}}]}}}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { - "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\"}", + "config": "{\"name\":\"cebb9d40949880dca743\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":10000,\"width\":192,\"height\":104,\"tabOrder\":2000}}],\"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\"}}}}}]}}}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { - "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\"}}}}}]}}}", + "config": "{\"name\":\"d34b297e1d3d5ee01b93\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":11000,\"width\":184,\"height\":88,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Disks (2).diskSizeGB)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d1\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d1\"}},\"Property\":\"diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks (2).diskSizeGB)\",\"NativeReferenceName\":\"diskSizeGB\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d1\"}},\"Property\":\"diskSizeGB\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"1000D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}]},\"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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 11000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { - "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.0, + "config": "{\"name\":\"e18c3e54ca1451a6e58a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":1000,\"tabOrder\":14000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", + "height": 704.00, "width": 1048.09, "x": 215.79, - "y": 8.0, - "z": 0.0 + "y": 8.00, + "z": 1000.00 }, { - "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\"}", + "config": "{\"name\":\"f155a7d04d1dc05ee00c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":6000,\"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\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 6000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Policy compliance", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "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.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 8000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 8000.00 }, { - "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.Governance/featureName/Storage.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.Governance/featureName/Storage.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.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 6000.0 + "height": 120.00, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 6000.00 }, { "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.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 624.0, - "z": 4000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 624.00, + "z": 4000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 4000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 4000.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 624.0, - "z": 5000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 624.00, + "z": 5000.00 }, { "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.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 3000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 3000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 7000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 7000.00 }, { "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.0, + "height": 704.00, "width": 1048.09, "x": 215.79, - "y": 8.0, - "z": 0.0 + "y": 8.00, + "z": 0.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 0.0 + "height": 64.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 0.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "SQL databases", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "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.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 2000.0 + "height": 64.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 2000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 296.0, - "z": 2000.0 + "height": 416.00, + "width": 1048.00, + "x": 216.00, + "y": 296.00, + "z": 2000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 4000.00 }, { "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.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 8000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 624.0, - "z": 5000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 624.00, + "z": 5000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 7000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "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.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "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.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 6000.0 + "height": 184.00, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 6000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 184.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { "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.0, + "height": 704.00, "width": 1048.09, "x": 215.79, - "y": 8.0, - "z": 0.0 + "y": 8.00, + "z": 0.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 624.0, - "z": 4000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 624.00, + "z": 4000.00 }, { - "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.Governance/featureName/Storage.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.Governance/featureName/Storage.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.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 120.0, - "z": 1000.0 + "height": 64.00, + "width": 200.00, + "x": 0.00, + "y": 120.00, + "z": 1000.00 }, { "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.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Summary", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "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.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "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.0, - "width": 568.0, - "x": 216.0, - "y": 296.0, - "z": 3000.0 + "height": 184.00, + "width": 568.00, + "x": 216.00, + "y": 296.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 568.0, - "x": 216.0, - "y": 104.0, - "z": 2000.0 + "height": 184.00, + "width": 568.00, + "x": 216.00, + "y": 104.00, + "z": 2000.00 }, { "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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 9000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 9000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 472.0, - "x": 792.0, - "y": 104.0, - "z": 4000.0 + "height": 376.00, + "width": 472.00, + "x": 792.00, + "y": 104.00, + "z": 4000.00 }, { "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.0, + "height": 704.00, "width": 1048.09, "x": 215.79, - "y": 8.0, - "z": 0.0 + "y": 8.00, + "z": 0.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 6000.0 + "height": 184.00, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 6000.00 }, { "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.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 0.0 + "height": 64.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 0.00 }, { "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.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, - "width": 184.0, - "x": 1080.0, - "y": 488.0, - "z": 5000.0 + "height": 224.00, + "width": 184.00, + "x": 1080.00, + "y": 488.00, + "z": 5000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 7000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 8000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 8000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 624.0, - "z": 4000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 624.00, + "z": 4000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "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.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 8000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 624.0, - "z": 5000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 624.00, + "z": 5000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 184.0, - "x": 792.0, - "y": 8.0, - "z": 7000.0 + "height": 88.00, + "width": 184.00, + "x": 792.00, + "y": 8.00, + "z": 7000.00 }, { "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.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 120.0, - "z": 1000.0 + "height": 64.00, + "width": 200.00, + "x": 0.00, + "y": 120.00, + "z": 1000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { - "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.Governance/featureName/Storage.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.Governance/featureName/Storage.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.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "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.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 10000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 10000.00 }, { "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.0, - "width": 856.0, - "x": 216.0, - "y": 488.0, - "z": 6000.0 + "height": 224.00, + "width": 856.00, + "x": 216.00, + "y": 488.00, + "z": 6000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Get started", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "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.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 2000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 80.0, - "x": 576.0, - "y": 0.0, - "z": 6000.0 + "height": 696.00, + "width": 80.00, + "x": 576.00, + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 1232.0, - "x": 0.0, - "y": 192.0, - "z": 17000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 192.00, + "z": 17000.00 }, { "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.0, - "width": 80.0, - "x": 1056.0, - "y": 0.0, - "z": 1000.0 + "height": 696.00, + "width": 80.00, + "x": 1056.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 776.0, - "x": 40.0, - "y": 96.0, - "z": 1000.0 + "height": 424.00, + "width": 776.00, + "x": 40.00, + "y": 96.00, + "z": 1000.00 }, { "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.0, - "width": 80.0, - "x": 288.0, - "y": 0.0, - "z": 9000.0 + "height": 696.00, + "width": 80.00, + "x": 288.00, + "y": 0.00, + "z": 9000.00 }, { "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.0, - "width": 32.0, - "x": 784.0, - "y": 48.0, - "z": 2000.0 + "height": 32.00, + "width": 32.00, + "x": 784.00, + "y": 48.00, + "z": 2000.00 }, { "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.0, - "width": 80.0, - "x": 384.0, - "y": 0.0, - "z": 8000.0 + "height": 696.00, + "width": 80.00, + "x": 384.00, + "y": 0.00, + "z": 8000.00 }, { "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 +1575,1191 @@ "width": 194.17, "x": 213.33, "y": 8.33, - "z": 10000.0 + "z": 10000.00 }, { "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.0, - "width": 848.0, - "x": 216.0, - "y": 112.0, - "z": 8000.0 + "height": 176.00, + "width": 848.00, + "x": 216.00, + "y": 112.00, + "z": 8000.00 }, { "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.0, - "width": 1232.0, - "x": 24.0, - "y": 16.0, - "z": 0.0 + "height": 696.00, + "width": 1232.00, + "x": 24.00, + "y": 16.00, + "z": 0.00 }, { "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.0, - "width": 80.0, - "x": 768.0, - "y": 0.0, - "z": 4000.0 + "height": 696.00, + "width": 80.00, + "x": 768.00, + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 2000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 736.0, - "x": 40.0, - "y": 40.0, - "z": 6000.0 + "height": 48.00, + "width": 736.00, + "x": 40.00, + "y": 40.00, + "z": 6000.00 }, { "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.0, - "width": 1232.0, - "x": 0.0, - "y": 0.0, - "z": 19000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 0.00, + "z": 19000.00 }, { "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.0, - "width": 80.0, - "x": 480.0, - "y": 0.0, - "z": 7000.0 + "height": 696.00, + "width": 80.00, + "x": 480.00, + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 152.0, - "x": 0.0, - "y": 288.0, - "z": 1000.0 + "height": 24.00, + "width": 152.00, + "x": 0.00, + "y": 288.00, + "z": 1000.00 }, { "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.0, - "width": 272.0, - "x": 216.0, - "y": 304.0, - "z": 7000.0 + "height": 368.00, + "width": 272.00, + "x": 216.00, + "y": 304.00, + "z": 7000.00 }, { "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.0, - "width": 80.0, - "x": 0.0, - "y": 0.0, - "z": 12000.0 + "height": 696.00, + "width": 80.00, + "x": 0.00, + "y": 0.00, + "z": 12000.00 }, { "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.0, - "width": 1232.0, - "x": 0.0, - "y": 480.0, - "z": 14000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 480.00, + "z": 14000.00 }, { - "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\"}", + "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/FTK$$ftkver$$'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'2f08f03f1c17a4448378'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 88.0, - "x": 1064.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 88.00, + "x": 1064.00, + "y": 688.00, + "z": 2000.00 }, { - "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\"}", + "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/FTK$$ftkver$$'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Clear filters'\"}}}}}]}},\"parentGroupName\":\"96a699bca9168a144165\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 88.0, + "height": 32.00, + "width": 88.00, "x": 41.13, - "y": 488.0, - "z": 3000.0 + "y": 488.00, + "z": 3000.00 }, { "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.0, - "y": 0.0, - "z": 0.0 + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 736.0, - "x": 40.0, - "y": 40.0, - "z": 3000.0 + "height": 48.00, + "width": 736.00, + "x": 40.00, + "y": 40.00, + "z": 3000.00 }, { "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.0, - "width": 160.0, - "x": 0.0, - "y": 288.0, - "z": 1000.0 + "height": 24.00, + "width": 160.00, + "x": 0.00, + "y": 288.00, + "z": 1000.00 }, { "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.0, - "width": 80.0, - "x": 192.0, - "y": 0.0, - "z": 10000.0 + "height": 696.00, + "width": 80.00, + "x": 192.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, - "z": 11000.0 + "y": 112.00, + "z": 11000.00 }, { "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.0, - "width": 96.0, - "x": 8.0, - "y": 688.0, - "z": 4000.0 + "height": 32.00, + "width": 96.00, + "x": 8.00, + "y": 688.00, + "z": 4000.00 }, { "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.0, - "width": 272.0, - "x": 0.0, - "y": 192.0, - "z": 0.0 + "height": 96.00, + "width": 272.00, + "x": 0.00, + "y": 192.00, + "z": 0.00 }, { "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.0, - "width": 1232.0, - "x": 0.0, - "y": 384.0, - "z": 15000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 384.00, + "z": 15000.00 }, { "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.0, - "width": 272.0, - "x": 792.0, - "y": 304.0, - "z": 5000.0 + "height": 312.00, + "width": 272.00, + "x": 792.00, + "y": 304.00, + "z": 5000.00 }, { - "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.Governance/featureName/Storage.GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.Governance/featureName/Storage.GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 112.0, - "x": 1160.0, - "y": 688.0, - "z": 1000.0 + "height": 32.00, + "width": 112.00, + "x": 1160.00, + "y": 688.00, + "z": 1000.00 }, { "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.0, - "width": 1232.0, - "x": 0.0, - "y": 576.0, - "z": 13000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 576.00, + "z": 13000.00 }, { "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.0, - "width": 80.0, - "x": 672.0, - "y": 0.0, - "z": 5000.0 + "height": 696.00, + "width": 80.00, + "x": 672.00, + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 80.0, - "x": 960.0, - "y": 0.0, - "z": 2000.0 + "height": 696.00, + "width": 80.00, + "x": 960.00, + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 272.0, - "x": 504.0, - "y": 304.0, - "z": 6000.0 + "height": 368.00, + "width": 272.00, + "x": 504.00, + "y": 304.00, + "z": 6000.00 }, { "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.0, - "width": 248.0, - "x": 0.0, - "y": 192.0, - "z": 0.0 + "height": 176.00, + "width": 248.00, + "x": 0.00, + "y": 192.00, + "z": 0.00 }, { "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.0, - "y": 0.0, - "z": 0.0 + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 776.0, - "x": 40.0, - "y": 96.0, - "z": 4000.0 + "height": 384.00, + "width": 776.00, + "x": 40.00, + "y": 96.00, + "z": 4000.00 }, { "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.0, - "width": 32.0, - "x": 784.0, - "y": 48.0, - "z": 5000.0 + "height": 32.00, + "width": 32.00, + "x": 784.00, + "y": 48.00, + "z": 5000.00 }, { "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.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 3000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 1232.0, - "x": 0.0, - "y": 288.0, - "z": 16000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 288.00, + "z": 16000.00 }, { "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.0, - "width": 80.0, - "x": 864.0, - "y": 0.0, - "z": 3000.0 + "height": 696.00, + "width": 80.00, + "x": 864.00, + "y": 0.00, + "z": 3000.00 }, { "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.5, + "width": 852.50, "x": 211.67, "y": 24.17, - "z": 9000.0 + "z": 9000.00 }, { - "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\"}}}}}]}}}", + "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\":\"$$ftkver$$ · $$build-date$$ · 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.0, - "width": 240.0, - "x": 104.0, - "y": 688.0, - "z": 3000.0 + "height": 32.00, + "width": 240.00, + "x": 104.00, + "y": 688.00, + "z": 3000.00 }, { "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.0, - "width": 1232.0, - "x": 0.0, - "y": 96.0, - "z": 18000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 96.00, + "z": 18000.00 }, { "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.0, - "width": 256.0, + "height": 176.00, + "width": 256.00, "x": 0.04, - "y": 192.0, - "z": 0.0 + "y": 192.00, + "z": 0.00 }, { "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.0, - "width": 96.0, + "height": 32.00, + "width": 96.00, "x": 137.13, - "y": 488.0, - "z": 2000.0 + "y": 488.00, + "z": 2000.00 }, { "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.0, - "width": 80.0, - "x": 96.0, - "y": 0.0, - "z": 11000.0 + "height": 696.00, + "width": 80.00, + "x": 96.00, + "y": 0.00, + "z": 11000.00 }, { "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.0, - "y": 113.0, - "z": 12000.0 + "x": 216.00, + "y": 113.00, + "z": 12000.00 }, { "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.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 3000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 3000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 96.0, + "height": 32.00, + "width": 96.00, "x": 241.13, - "y": 488.0, - "z": 1000.0 + "y": 488.00, + "z": 1000.00 }, { "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.0, - "width": 80.0, - "x": 1152.0, - "y": 0.0, - "z": 0.0 + "height": 696.00, + "width": 80.00, + "x": 1152.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 144.0, + "height": 24.00, + "width": 144.00, "x": 0.22, - "y": 288.0, - "z": 1000.0 + "y": 288.00, + "z": 1000.00 }, { "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.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 2000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Network security groups", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "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.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 7000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 624.0, - "z": 5000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 624.00, + "z": 5000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 2000.0 + "height": 64.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 2000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, + "height": 64.00, + "width": 200.00, + "x": 0.00, "y": 247.79, - "z": 625.0 + "z": 625.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 624.0, - "z": 4000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 624.00, + "z": 4000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, + "height": 64.00, + "width": 200.00, + "x": 0.00, "y": 311.79, - "z": 562.0 + "z": 562.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "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.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 488.0, - "z": 3000.0 + "height": 224.00, + "width": 1048.00, + "x": 216.00, + "y": 488.00, + "z": 3000.00 }, { "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.0, - "width": 184.0, - "x": 216.0, - "y": 104.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 104.00, + "z": 4000.00 }, { "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.0, + "height": 704.00, "width": 1048.09, "x": 215.79, - "y": 8.0, - "z": 0.0 + "y": 8.00, + "z": 0.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 8000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 6000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 6000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "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.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "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 (for example, 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.0, - "width": 856.0, - "x": 408.0, - "y": 8.0, - "z": 5000.0 + "height": 184.00, + "width": 856.00, + "x": 408.00, + "y": 8.00, + "z": 5000.00 }, { "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.0, - "x": 0.0, - "y": 104.0, - "z": 6000.0 + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 6000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { - "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.Governance/featureName/Storage.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.Governance/featureName/Storage.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.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 120.0, - "z": 1000.0 + "height": 64.00, + "width": 200.00, + "x": 0.00, + "y": 120.00, + "z": 1000.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 200.0, - "z": 2000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 200.00, + "z": 2000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 184.0, - "z": 750.0 + "height": 64.00, + "width": 200.00, + "x": 0.00, + "y": 184.00, + "z": 750.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Virtual machines", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "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.0, + "height": 704.00, "width": 1048.09, "x": 215.79, - "y": 8.0, - "z": 0.0 + "y": 8.00, + "z": 0.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 280.0, - "x": 216.0, - "y": 104.0, - "z": 2000.0 + "height": 184.00, + "width": 280.00, + "x": 216.00, + "y": 104.00, + "z": 2000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "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.0, - "width": 568.0, - "x": 696.0, - "y": 488.0, - "z": 6000.0 + "height": 224.00, + "width": 568.00, + "x": 696.00, + "y": 488.00, + "z": 6000.00 }, { "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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 10000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 10000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 624.0, - "z": 5000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 624.00, + "z": 5000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 6000.0 + "height": 248.00, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 6000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { - "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.Governance/featureName/Storage.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.Governance/featureName/Storage.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.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "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.0, - "width": 280.0, - "x": 504.0, - "y": 104.0, - "z": 5000.0 + "height": 184.00, + "width": 280.00, + "x": 504.00, + "y": 104.00, + "z": 5000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "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.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { - "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\"}}}}}]}}}", + "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.skuName\"},{\"queryRef\":\"Sum(Disks.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\":\"diskType\"},\"Name\":\"Disks.diskType\",\"NativeReferenceName\":\"Disk type\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"skuName\"},\"Name\":\"Disks.skuName\",\"NativeReferenceName\":\"SKU\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks.diskSizeGB)\",\"NativeReferenceName\":\"Disk size GB1\"}],\"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.diskType\":{\"displayName\":\"Disk type\"},\"Disks.skuName\":{\"displayName\":\"SKU\"},\"Sum(Disks.diskSizeGB)\":{\"displayName\":\"Disk size GB\"}},\"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.0, - "width": 472.0, - "x": 216.0, - "y": 488.0, - "z": 7000.0 + "height": 224.00, + "width": 472.00, + "x": 216.00, + "y": 488.00, + "z": 7000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 624.0, - "z": 4000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 624.00, + "z": 4000.00 }, { "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.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 8000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 8000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 7000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 7000.00 }, { "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.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 120.0, - "z": 1000.0 + "height": 64.00, + "width": 192.00, + "x": 0.00, + "y": 120.00, + "z": 1000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { - "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\"}}}}}]}}}", + "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.diskSizeGB)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks.diskSizeGB)\",\"NativeReferenceName\":\"diskSizeGB\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskSizeGB\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"1000D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}]},\"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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 9000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 9000.00 }, { "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.0, - "width": 184.0, - "x": 792.0, - "y": 8.0, - "z": 11000.0 + "height": 88.00, + "width": 184.00, + "x": 792.00, + "y": 8.00, + "z": 11000.00 }, { "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.0, - "width": 192.0, - "x": 0.0, - "y": 184.0, - "z": 0.0 + "height": 64.00, + "width": 192.00, + "x": 0.00, + "y": 184.00, + "z": 0.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "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.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "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.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "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.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "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.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 1048.0, - "x": 216.0, - "y": 296.0, - "z": 3000.0 + "height": 184.00, + "width": 1048.00, + "x": 216.00, + "y": 296.00, + "z": 3000.00 }, { "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.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 8000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 472.0, - "x": 792.0, - "y": 104.0, - "z": 4000.0 + "height": 184.00, + "width": 472.00, + "x": 792.00, + "y": 104.00, + "z": 4000.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 2000.0 + "height": 64.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 2000.00 } ], - "width": 1280.0 + "width": 1280.00 } ], "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 7eb03abeb..73a450d3b 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\":\"false\"}}}}}]}}", + "config": "{\"version\":\"5.62\",\"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": [ @@ -116,448 +116,448 @@ "displayName": "Total savings", "displayOption": 1, "filters": "[{\"name\":\"3b3d5c479975e70beae9\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_AmortizationCategory\"}},\"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_AmortizationCategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Principal'\"}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]", - "height": 720.0, + "height": 720.00, "name": "277e0f563ceceb837a00", "ordinal": 2, "visualContainers": [ { "config": "{\"name\":\"011bd9701904086504d5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":40,\"width\":40,\"x\":160,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"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#total-savings'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"1a1963d08e14156dc5bc\"}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"026614f4505162300c03\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1080,\"y\":8,\"z\":11000,\"width\":184,\"height\":88,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"ℹ️ If you see 0 savings for reservations, export prices from Cost Management and re-ingest costs in Data Factory.\",\"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.0, - "width": 184.0, - "x": 1080.0, - "y": 8.0, - "z": 11000.0 + "height": 88.00, + "width": 184.00, + "x": 1080.00, + "y": 8.00, + "z": 11000.00 }, { "config": "{\"name\":\"082f57b09740c26503b3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.39572239294395,\"y\":8.005493854933814,\"z\":0,\"tabOrder\":16000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, + "height": 704.00, "width": 1048.09, - "x": 215.4, + "x": 215.40, "y": 8.01, - "z": 0.0 + "z": 0.00 }, { "config": "{\"name\":\"11f566dc4658d6249173\",\"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\":\"082f57b09740c26503b3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"12914480970527ca6442\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":192,\"x\":0,\"y\":0,\"z\":5000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Total savings\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Track cost savings from negotiated and commitment discounts over time.\",\"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\":\"1a1963d08e14156dc5bc\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"168612a5bea0ed4d3d9c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":200,\"x\":0,\"y\":0,\"z\":1000,\"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\":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\":\"1a1963d08e14156dc5bc\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"1a1963d08e14156dc5bc\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":17000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"1d59633f9e2a6d46e789\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":4000}}],\"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\":\"aa1106fd15196e62eca0\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"26695dfce13502b4b910\",\"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\":\"082f57b09740c26503b3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "config": "{\"name\":\"27a61c1783bb460deee6\",\"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\":\"082f57b09740c26503b3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "config": "{\"name\":\"3170f0d54c0144631e81\",\"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\":\"082f57b09740c26503b3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "config": "{\"name\":\"3c8e0e6f40049399155a\",\"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\":\"1a1963d08e14156dc5bc\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "config": "{\"name\":\"526426f004ec044b8094\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1079.9999954377045,\"y\":432.58416663418336,\"z\":13000,\"width\":184,\"height\":72,\"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\":\"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\":\"24D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Spot cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", "filters": "[{\"name\":\"0ae31a59c0136927c7a8\",\"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\":\"'Dynamic'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 72.0, - "width": 184.0, - "x": 1080.0, + "height": 72.00, + "width": 184.00, + "x": 1080.00, "y": 432.58, - "z": 13000.0 + "z": 13000.00 }, { "config": "{\"name\":\"6345893a3509c9b300d5\",\"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\":\"aa1106fd15196e62eca0\"}", "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "config": "{\"name\":\"69b2f671274ce0358255\",\"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\":\"1a1963d08e14156dc5bc\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"69f5baec608d032db9c0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":888.0000022434344,\"y\":515.2421122161733,\"z\":14000,\"width\":184,\"height\":72,\"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\":\"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\":\"24D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Committed usage'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", "filters": "[{\"name\":\"0ae31a59c0136927c7a8\",\"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\":{}},{\"name\":\"477f0c34056077677660\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountCategory\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Usage'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 72.0, - "width": 184.0, - "x": 888.0, + "height": 72.00, + "width": 184.00, + "x": 888.00, "y": 515.24, - "z": 14000.0 + "z": 14000.00 }, { - "config": "{\"name\":\"6fdc036a03e42c76e4a3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":2000,\"width\":664,\"height\":320,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"pivotTable\",\"projections\":{\"Rows\":[{\"queryRef\":\"Costs.x_ChargeMonth\",\"active\":true},{\"queryRef\":\"Costs.BillingAccountName\"}],\"Values\":[{\"queryRef\":\"Sum(Costs.ListCost)\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.x_CommitmentDiscountSavings)\"},{\"queryRef\":\"Costs.x_EffectiveSavingsRate\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ChargeMonth\"},\"Name\":\"Costs.x_ChargeMonth\",\"NativeReferenceName\":\"Month\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"List cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"Contracted cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"Savings\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveSavingsRate\"},\"Name\":\"Costs.x_EffectiveSavingsRate\",\"NativeReferenceName\":\"ESR\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BillingAccountName\"},\"Name\":\"Costs.BillingAccountName\",\"NativeReferenceName\":\"Billing account\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ChargeMonth\"}}}]},\"expansionStates\":[{\"roles\":[\"Rows\"],\"levels\":[{\"queryRefs\":[\"Costs.x_ChargeMonth\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_ChargeMonth\"}}],\"isPinned\":true},{\"queryRefs\":[\"Costs.BillingAccountName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"Sum(Costs.ContractedCost)\":{\"displayName\":\"Contracted cost\"},\"Sum(Costs.x_CommitmentDiscountSavings)\":{\"displayName\":\"Savings\"},\"Costs.x_EffectiveSavingsRate\":{\"displayName\":\"ESR\"},\"Costs.x_ChargeMonth\":{\"displayName\":\"Month\"},\"Sum(Costs.ListCost)\":{\"displayName\":\"List cost\"},\"Costs.BillingAccountName\":{\"displayName\":\"Billing account\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"values\":[{\"properties\":{\"wordWrap\":{\"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\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", + "config": "{\"name\":\"6fdc036a03e42c76e4a3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":2000,\"width\":664,\"height\":320,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"pivotTable\",\"projections\":{\"Rows\":[{\"queryRef\":\"Costs.x_ChargeMonth\",\"active\":true},{\"queryRef\":\"Costs.BillingAccountName\"}],\"Values\":[{\"queryRef\":\"Sum(Costs.ListCost)\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.x_TotalSavings)\"},{\"queryRef\":\"Costs.x_EffectiveSavingsRate\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ChargeMonth\"},\"Name\":\"Costs.x_ChargeMonth\",\"NativeReferenceName\":\"Month\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"List cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"Contracted cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveSavingsRate\"},\"Name\":\"Costs.x_EffectiveSavingsRate\",\"NativeReferenceName\":\"ESR\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BillingAccountName\"},\"Name\":\"Costs.BillingAccountName\",\"NativeReferenceName\":\"Billing account\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_TotalSavings)\",\"NativeReferenceName\":\"Savings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ChargeMonth\"}}}]},\"expansionStates\":[{\"roles\":[\"Rows\"],\"levels\":[{\"queryRefs\":[\"Costs.x_ChargeMonth\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_ChargeMonth\"}}],\"isPinned\":true},{\"queryRefs\":[\"Costs.BillingAccountName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"Sum(Costs.ContractedCost)\":{\"displayName\":\"Contracted cost\"},\"Costs.x_EffectiveSavingsRate\":{\"displayName\":\"ESR\"},\"Costs.x_ChargeMonth\":{\"displayName\":\"Month\"},\"Sum(Costs.ListCost)\":{\"displayName\":\"List cost\"},\"Costs.BillingAccountName\":{\"displayName\":\"Billing account\"},\"Sum(Costs.x_TotalSavings)\":{\"displayName\":\"Savings\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"values\":[{\"properties\":{\"wordWrap\":{\"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\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[]", - "height": 320.0, - "width": 664.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 320.00, + "width": 664.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 }, { "config": "{\"name\":\"71ad240f4a4ac51d3bbc\",\"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\":\"082f57b09740c26503b3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "config": "{\"name\":\"7850f4e8cce0d8ca8b28\",\"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\":\"082f57b09740c26503b3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"887cff0a41d775310cdc\",\"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\":\"082f57b09740c26503b3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "config": "{\"name\":\"8f7e039b2300069a9935\",\"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\":\"082f57b09740c26503b3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"90ab8bede6916ccbeac4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":576,\"y\":40,\"z\":9000,\"width\":40,\"height\":56,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"20pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Equals'\"}}}}}]}}}", "filters": "[]", - "height": 56.0, - "width": 40.0, - "x": 576.0, - "y": 40.0, - "z": 9000.0 + "height": 56.00, + "width": 40.00, + "x": 576.00, + "y": 40.00, + "z": 9000.00 }, { "config": "{\"name\":\"96f2a7a8e005ad75ed95\",\"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\":\"082f57b09740c26503b3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"9a7f97ab4b9b8bc80bc8\",\"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\":\"082f57b09740c26503b3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "config": "{\"name\":\"9bb8902c71575c9a22e9\",\"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\":\"082f57b09740c26503b3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"9f5fee044ba316d50215\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":0}}],\"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\":\"aa1106fd15196e62eca0\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "config": "{\"name\":\"a1cf98747c56454a61c5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":8,\"z\":4000,\"width\":176,\"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.0, - "width": 176.0, - "x": 792.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 176.00, + "x": 792.00, + "y": 8.00, + "z": 4000.00 }, { "config": "{\"name\":\"a8e9b06d4d2220503c7e\",\"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\":\"082f57b09740c26503b3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"aa1106fd15196e62eca0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1a1963d08e14156dc5bc\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"acaa00292a29948e5910\",\"layouts\":[{\"id\":0,\"position\":{\"x\":887.9999999999991,\"y\":599.6732676973897,\"z\":16000,\"width\":184,\"height\":72,\"tabOrder\":13000}}],\"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\":\"24D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Unused usage commit'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", "filters": "[{\"name\":\"0ae31a59c0136927c7a8\",\"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\":{}},{\"name\":\"477f0c34056077677660\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountCategory\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Usage'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"897a8dbb0a34d3aeeaea\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'Unused'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 72.0, - "width": 184.0, - "x": 888.0, + "height": 72.00, + "width": 184.00, + "x": 888.00, "y": 599.67, - "z": 16000.0 + "z": 16000.00 }, { "config": "{\"name\":\"ae25232be42074ebb0ee\",\"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\":\"082f57b09740c26503b3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "config": "{\"name\":\"af4c1b40455711d698c4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":3000}}],\"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.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 5000.00 }, { "config": "{\"name\":\"b3d4d0907e0be0233c64\",\"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\":\"082f57b09740c26503b3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"bd2bfcb6a667de09dedb\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1080.0000022434344,\"y\":515.9807378663684,\"z\":15000,\"width\":184,\"height\":72,\"tabOrder\":12000}}],\"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\":\"24D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Committed spend'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", "filters": "[{\"name\":\"0ae31a59c0136927c7a8\",\"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\":{}},{\"name\":\"477f0c34056077677660\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountCategory\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Spend'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 72.0, - "width": 184.0, - "x": 1080.0, + "height": 72.00, + "width": 184.00, + "x": 1080.00, "y": 515.98, - "z": 15000.0 + "z": 15000.00 }, { "config": "{\"name\":\"c078225c08a509163560\",\"layouts\":[{\"id\":0,\"position\":{\"x\":887.9999999999999,\"y\":432,\"z\":12000,\"width\":184,\"height\":72,\"tabOrder\":9000}}],\"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\":\"24D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'On-demand cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", "filters": "[{\"name\":\"0ae31a59c0136927c7a8\",\"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\":\"'Standard'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 72.0, - "width": 184.0, - "x": 888.0, - "y": 432.0, - "z": 12000.0 + "height": 72.00, + "width": 184.00, + "x": 888.00, + "y": 432.00, + "z": 12000.00 }, { "config": "{\"name\":\"c1a32404475e83ba4e0d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":8000,\"width\":184,\"height\":88,\"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}}}]},\"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\":\"'List cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[]", - "height": 88.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 8000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 8000.00 }, { "config": "{\"name\":\"c22c1708a8bc777779e2\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":2000}}],\"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\":\"aa1106fd15196e62eca0\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "config": "{\"name\":\"c6ea54a1a4eca05195b2\",\"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\":\"082f57b09740c26503b3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "config": "{\"name\":\"c8dc2a4880ced810a67a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":7000,\"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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 7000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 7000.00 }, { "config": "{\"name\":\"cc3ccd349c9908d77cc0\",\"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\":\"082f57b09740c26503b3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { - "config": "{\"name\":\"cc45837ac84ce3aa0bd1\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.RateOptimization/featureName/KQL.TotalSavings'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1a1963d08e14156dc5bc\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"cc45837ac84ce3aa0bd1\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK$$ftkver$$/bladeName/PowerBI.RateOptimization/featureName/KQL.TotalSavings'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1a1963d08e14156dc5bc\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"d5683e4585cd4d3c2be8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1080,\"y\":600.4118933475849,\"z\":17000,\"width\":184,\"height\":72,\"tabOrder\":14000}}],\"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\":\"24D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Unused spend commit'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", "filters": "[{\"name\":\"0ae31a59c0136927c7a8\",\"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\":{}},{\"name\":\"477f0c34056077677660\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountCategory\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Spend'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"e53402c30c72a50e8645\",\"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\":{}}]", - "height": 72.0, - "width": 184.0, - "x": 1080.0, + "height": 72.00, + "width": 184.00, + "x": 1080.00, "y": 600.41, - "z": 17000.0 + "z": 17000.00 }, { "config": "{\"name\":\"dc1a2c5703663415d6bd\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":3000,\"width\":1048,\"height\":280,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"lineStackedColumnComboChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.x_ReportingDate\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.x_TotalSavings)\"}],\"Y2\":[{\"queryRef\":\"Costs.x_EffectiveSavingsRate\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"},\"Name\":\"Costs.x_ReportingDate\",\"NativeReferenceName\":\"x_ReportingDate\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_TotalSavings)\",\"NativeReferenceName\":\"Discount\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveSavingsRate\"},\"Name\":\"Costs.x_EffectiveSavingsRate\",\"NativeReferenceName\":\"Effective Savings Rate\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"}}}]},\"columnProperties\":{\"Sum(Costs.x_TotalSavings)\":{\"displayName\":\"Discount\"},\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Cost\"},\"Costs.x_EffectiveSavingsRate\":{\"displayName\":\"Effective Savings Rate\"},\"Sum(Costs.x_TotalDiscountPercent)\":{\"displayName\":\"Discount %\"}},\"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'\"}}},\"showTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"zoom\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountProgram\"}},\"Right\":{\"Literal\":{\"Value\":\"'Reservation'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountProgram\"}},\"Right\":{\"Literal\":{\"Value\":\"'Savings plan'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":6,\"Percent\":0}}}}}},\"selector\":{\"metadata\":\"Sum(Costs.EffectiveCost)\"}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":4,\"Percent\":0}}}}}},\"selector\":{\"metadata\":\"Sum(Costs.x_TotalSavings)\"}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}},\"selector\":{\"metadata\":\"Costs.x_EffectiveSavingsRate\"}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", "filters": "[]", - "height": 280.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { "config": "{\"name\":\"ea3afeb83713d0b0a02e\",\"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\":\"082f57b09740c26503b3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"f0a2f7b1e8100b848741\",\"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\":\"aa1106fd15196e62eca0\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "config": "{\"name\":\"f55b8419d43b976d0e51\",\"layouts\":[{\"id\":0,\"position\":{\"x\":887.9999999999999,\"y\":392,\"z\":6000,\"width\":376,\"height\":320,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Effective cost breakdown\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"color\":\"#000000\"}}],\"horizontalTextAlignment\":\"center\"},{\"textRuns\":[{\"value\":\" \",\"textStyle\":{\"fontSize\":\"32pt\"}}],\"horizontalTextAlignment\":\"center\"},{\"textRuns\":[{\"value\":\" \",\"textStyle\":{\"fontSize\":\"32pt\"}}],\"horizontalTextAlignment\":\"center\"},{\"textRuns\":[{\"value\":\" \",\"textStyle\":{\"fontSize\":\"32pt\"}}],\"horizontalTextAlignment\":\"center\"},{\"textRuns\":[{\"value\":\" \",\"textStyle\":{\"fontSize\":\"32pt\"}}],\"horizontalTextAlignment\":\"center\"},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"←\",\"textStyle\":{\"fontFamily\":\"Calibri\",\"fontSize\":\"8pt\",\"color\":\"#808080\"}},{\"value\":\" Select a row to view the breakdown per month\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#808080\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"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\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}]}}}", "filters": "[]", - "height": 320.0, - "width": 376.0, - "x": 888.0, - "y": 392.0, - "z": 6000.0 + "height": 320.00, + "width": 376.00, + "x": 888.00, + "y": 392.00, + "z": 6000.00 }, { "config": "{\"name\":\"f7b77f82004b4b19dcc4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":384,\"y\":40,\"z\":10000,\"width\":40,\"height\":56,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"−\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"20pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Minus'\"}}}}}]}}}", "filters": "[]", - "height": 56.0, - "width": 40.0, - "x": 384.0, - "y": 40.0, - "z": 10000.0 + "height": 56.00, + "width": 40.00, + "x": 384.00, + "y": 40.00, + "z": 10000.00 }, { "config": "{\"name\":\"fe9fa32a9e783060a4d9\",\"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\":\"082f57b09740c26503b3\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Get started", "displayOption": 1, "filters": "[]", - "height": 720.0, + "height": 720.00, "name": "ReportSection04cb7247170034c13d74", "visualContainers": [ { @@ -567,4456 +567,4492 @@ "width": 194.17, "x": 213.33, "y": 8.33, - "z": 10000.0 + "z": 10000.00 }, { "config": "{\"name\":\"03c87bb075441076ab92\",\"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\":\"c4e1c9a492ab70b2e3b4\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 96.0, + "height": 32.00, + "width": 96.00, "x": 137.13, - "y": 488.0, - "z": 2000.0 + "y": 488.00, + "z": 2000.00 }, { "config": "{\"name\":\"05856180928343b2d0c4\",\"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\":\"b603a1000a76ecc4e046\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 192.0, - "y": 0.0, - "z": 10000.0 + "height": 696.00, + "width": 80.00, + "x": 192.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"09fcc10359aade2ba483\",\"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\":\"b603a1000a76ecc4e046\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 0.0, - "y": 0.0, - "z": 12000.0 + "height": 696.00, + "width": 80.00, + "x": 0.00, + "y": 0.00, + "z": 12000.00 }, { "config": "{\"name\":\"0a864fd2a7ce412989c8\",\"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.0, - "width": 272.0, - "x": 504.0, - "y": 304.0, - "z": 6000.0 + "height": 368.00, + "width": 272.00, + "x": 504.00, + "y": 304.00, + "z": 6000.00 }, { "config": "{\"name\":\"1171007a43d77507b0ae\",\"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\":\"0a864fd2a7ce412989c8\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 176.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 2000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"1f83a1f502cc7935b715\",\"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\":\"0a864fd2a7ce412989c8\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 176.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 3000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"28b3fe3cc7e987cdbb43\",\"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\":\"b603a1000a76ecc4e046\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 288.0, - "y": 0.0, - "z": 9000.0 + "height": 696.00, + "width": 80.00, + "x": 288.00, + "y": 0.00, + "z": 9000.00 }, { "config": "{\"name\":\"2f0882f7ca0070d0169c\",\"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\":\"b603a1000a76ecc4e046\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 864.0, - "y": 0.0, - "z": 3000.0 + "height": 696.00, + "width": 80.00, + "x": 864.00, + "y": 0.00, + "z": 3000.00 }, { - "config": "{\"name\":\"313482e7195b2ed18129\",\"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\":\"'97ec54e0221e05615330'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"313482e7195b2ed18129\",\"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/FTK$$ftkver$$'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'97ec54e0221e05615330'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 88.0, - "x": 1064.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 88.00, + "x": 1064.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"331b6fc06aa92a0e83a0\",\"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\":\"'1a7083923871d04da2b3'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Close button'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"9fbd72ff5a9e09868003\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 32.0, - "x": 784.0, - "y": 48.0, - "z": 2000.0 + "height": 32.00, + "width": 32.00, + "x": 784.00, + "y": 48.00, + "z": 2000.00 }, { "config": "{\"name\":\"4078cb61e9b049519a12\",\"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\":\"b603a1000a76ecc4e046\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 768.0, - "y": 0.0, - "z": 4000.0 + "height": 696.00, + "width": 80.00, + "x": 768.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"40c8523d8a2030d8842b\",\"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\":\"c4e1c9a492ab70b2e3b4\"}", "filters": "[]", - "height": 48.0, - "width": 736.0, - "x": 40.0, - "y": 40.0, - "z": 6000.0 + "height": 48.00, + "width": 736.00, + "x": 40.00, + "y": 40.00, + "z": 6000.00 }, { "config": "{\"name\":\"4293f107095c44162875\",\"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 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\":{},\"url\":\"https://aka.ms/finops/hubs\"},{\"value\":\" with Data Explorer.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Use the following steps to connect this report to your storage account:\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"1. 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 for reservation cost savings.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Reservation recommendations − Required for the reservation recommendations page.\"}],\"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 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.\"}],\"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\":\"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 desired container. You can do this by opening your storage account in the Azure portal, selecting Storage Browser, and navigating to the exported file folder (or the ingestion path 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\":\"9fbd72ff5a9e09868003\"}", "filters": "[]", - "height": 424.0, - "width": 776.0, - "x": 40.0, - "y": 96.0, - "z": 1000.0 + "height": 424.00, + "width": 776.00, + "x": 40.00, + "y": 96.00, + "z": 1000.00 }, { "config": "{\"name\":\"4a344e7f9bc904708609\",\"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\":\"c4e1c9a492ab70b2e3b4\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", "height": 560.55, "width": 852.33, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"4ad1bd8a48115a0d825a\",\"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\",\"color\":\"#6f4bb2\"},\"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\",\"color\":\"#6f4bb2\"},\"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\",\"color\":\"#6f4bb2\"},\"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\",\"color\":\"#6f4bb2\"},\"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\",\"color\":\"#6f4bb2\"},\"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\":\"c4e1c9a492ab70b2e3b4\"}", "filters": "[]", - "height": 384.0, - "width": 776.0, - "x": 40.0, - "y": 96.0, - "z": 4000.0 + "height": 384.00, + "width": 776.00, + "x": 40.00, + "y": 96.00, + "z": 4000.00 }, { "config": "{\"name\":\"4c79671339600adb2691\",\"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\":\"b603a1000a76ecc4e046\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 80.0, - "width": 1232.0, - "x": 0.0, - "y": 0.0, - "z": 19000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 0.00, + "z": 19000.00 }, { "config": "{\"name\":\"4cabaa169baeca1b8080\",\"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\":\"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'\"}}}}}]}}}", "filters": "[]", - "height": 176.0, - "width": 848.0, - "x": 216.0, - "y": 112.0, - "z": 8000.0 + "height": 176.00, + "width": 848.00, + "x": 216.00, + "y": 112.00, + "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-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\"}}}}}]}}}", + "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\":\"$$ftkver$$ · $$build-date$$ · 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.0, - "width": 240.0, - "x": 104.0, - "y": 688.0, - "z": 3000.0 + "height": 32.00, + "width": 240.00, + "x": 104.00, + "y": 688.00, + "z": 3000.00 }, { "config": "{\"name\":\"50472c85677e09185d92\",\"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\":\"b603a1000a76ecc4e046\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 1056.0, - "y": 0.0, - "z": 1000.0 + "height": 696.00, + "width": 80.00, + "x": 1056.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"5182341910d53d413a27\",\"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\":\"Rate 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.5, + "width": 852.50, "x": 211.67, "y": 24.17, - "z": 9000.0 + "z": 9000.00 }, { "config": "{\"name\":\"560cd6a70de722262c88\",\"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\":\"b603a1000a76ecc4e046\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 80.0, - "width": 1232.0, - "x": 0.0, - "y": 96.0, - "z": 18000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 96.00, + "z": 18000.00 }, { "config": "{\"name\":\"578a434f80067b75ea49\",\"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\":\"b603a1000a76ecc4e046\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 960.0, - "y": 0.0, - "z": 2000.0 + "height": 696.00, + "width": 80.00, + "x": 960.00, + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"58e88efc63a58b1847d6\",\"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\":\"b603a1000a76ecc4e046\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 80.0, - "width": 1232.0, - "x": 0.0, - "y": 192.0, - "z": 17000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 192.00, + "z": 17000.00 }, { "config": "{\"name\":\"69114f306b76c740a03c\",\"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.0, - "width": 96.0, - "x": 8.0, - "y": 688.0, - "z": 4000.0 + "height": 32.00, + "width": 96.00, + "x": 8.00, + "y": 688.00, + "z": 4000.00 }, { "config": "{\"name\":\"71bbbc7574e41a269a10\",\"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\":\"9fbd72ff5a9e09868003\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", "height": 560.55, "width": 852.33, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"78ca84696e70348d2c60\",\"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\":\"b603a1000a76ecc4e046\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 80.0, - "width": 1232.0, - "x": 0.0, - "y": 384.0, - "z": 15000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 384.00, + "z": 15000.00 }, { "config": "{\"name\":\"7c0889a5089ea186b07a\",\"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\":\"b603a1000a76ecc4e046\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 672.0, - "y": 0.0, - "z": 5000.0 + "height": 696.00, + "width": 80.00, + "x": 672.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"820f1580085ab0a9d8ea\",\"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\":\"abd13ae0d620aa359558\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 176.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 3000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"857dfdfd857619dd348b\",\"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\":\"abd13ae0d620aa359558\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 176.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 2000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"85c3641a11980d765c1a\",\"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\":\"9fbd72ff5a9e09868003\"}", "filters": "[]", - "height": 48.0, - "width": 736.0, - "x": 40.0, - "y": 40.0, - "z": 3000.0 + "height": 48.00, + "width": 736.00, + "x": 40.00, + "y": 40.00, + "z": 3000.00 }, { "config": "{\"name\":\"8ba89e3f006403667181\",\"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\":\"e77913aacc1377451e6d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 176.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 2000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"8d83e43010c85964b5c0\",\"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\":\"b603a1000a76ecc4e046\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 1152.0, - "y": 0.0, - "z": 0.0 + "height": 696.00, + "width": 80.00, + "x": 1152.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"8fee30d049d35e2dd976\",\"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\":\"0a864fd2a7ce412989c8\"}", "filters": "[]", - "height": 176.0, - "width": 248.0, - "x": 0.0, - "y": 192.0, - "z": 0.0 + "height": 176.00, + "width": 248.00, + "x": 0.00, + "y": 192.00, + "z": 0.00 }, { "config": "{\"name\":\"91392c0ee33b36958068\",\"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\":\"b603a1000a76ecc4e046\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 80.0, - "width": 1232.0, - "x": 0.0, - "y": 480.0, - "z": 14000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 480.00, + "z": 14000.00 }, { "config": "{\"name\":\"9fbd72ff5a9e09868003\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":113,\"z\":11000,\"width\":852.3287671232878,\"height\":560.5479452054796,\"tabOrder\":11000}}],\"singleVisualGroup\":{\"displayName\":\"Connect dialog\",\"groupMode\":0,\"isHidden\":true}}", "height": 560.55, "width": 852.33, - "x": 216.0, - "y": 113.0, - "z": 11000.0 + "x": 216.00, + "y": 113.00, + "z": 11000.00 }, { "config": "{\"name\":\"a512a882a4657b039cc7\",\"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\":\"abd13ae0d620aa359558\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 24.0, - "width": 152.0, - "x": 0.0, - "y": 288.0, - "z": 1000.0 + "height": 24.00, + "width": 152.00, + "x": 0.00, + "y": 288.00, + "z": 1000.00 }, { "config": "{\"name\":\"a9f2985e905d3c192ee6\",\"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\":\"b603a1000a76ecc4e046\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 480.0, - "y": 0.0, - "z": 7000.0 + "height": 696.00, + "width": 80.00, + "x": 480.00, + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"abd13ae0d620aa359558\",\"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.0, - "width": 272.0, - "x": 792.0, - "y": 304.0, - "z": 5000.0 + "height": 312.00, + "width": 272.00, + "x": 792.00, + "y": 304.00, + "z": 5000.00 }, { - "config": "{\"name\":\"b389d7f5c05321d8127b\",\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.RateOptimization/featureName/Storage.GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"b389d7f5c05321d8127b\",\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK$$ftkver$$/bladeName/PowerBI.RateOptimization/featureName/Storage.GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 112.0, - "x": 1160.0, - "y": 688.0, - "z": 1000.0 + "height": 32.00, + "width": 112.00, + "x": 1160.00, + "y": 688.00, + "z": 1000.00 }, { "config": "{\"name\":\"b57153d5ac95dad90786\",\"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\":\"b603a1000a76ecc4e046\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 96.0, - "y": 0.0, - "z": 11000.0 + "height": 696.00, + "width": 80.00, + "x": 96.00, + "y": 0.00, + "z": 11000.00 }, { "config": "{\"name\":\"b603a1000a76ecc4e046\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":1232,\"x\":24,\"y\":16,\"z\":0,\"tabOrder\":10000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 696.0, - "width": 1232.0, - "x": 24.0, - "y": 16.0, - "z": 0.0 + "height": 696.00, + "width": 1232.00, + "x": 24.00, + "y": 16.00, + "z": 0.00 }, { "config": "{\"name\":\"b7ae40b345d8195c055e\",\"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\":\"abd13ae0d620aa359558\"}", "filters": "[]", - "height": 96.0, - "width": 272.0, - "x": 0.0, - "y": 192.0, - "z": 0.0 + "height": 96.00, + "width": 272.00, + "x": 0.00, + "y": 192.00, + "z": 0.00 }, { "config": "{\"name\":\"bac79bb9227a56c11a7b\",\"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\":\"c4e1c9a492ab70b2e3b4\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 96.0, + "height": 32.00, + "width": 96.00, "x": 241.13, - "y": 488.0, - "z": 1000.0 + "y": 488.00, + "z": 1000.00 }, { "config": "{\"name\":\"c4e1c9a492ab70b2e3b4\",\"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.0, - "z": 12000.0 + "y": 112.00, + "z": 12000.00 }, { "config": "{\"name\":\"d8566f06b2eb63d00543\",\"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\":\"0a864fd2a7ce412989c8\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 24.0, - "width": 160.0, - "x": 0.0, - "y": 288.0, - "z": 1000.0 + "height": 24.00, + "width": 160.00, + "x": 0.00, + "y": 288.00, + "z": 1000.00 }, { - "config": "{\"name\":\"dee8b32d112eb77989c5\",\"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\":\"c4e1c9a492ab70b2e3b4\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"dee8b32d112eb77989c5\",\"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/FTK$$ftkver$$'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Clear filters'\"}}}}}]}},\"parentGroupName\":\"c4e1c9a492ab70b2e3b4\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 88.0, + "height": 32.00, + "width": 88.00, "x": 41.13, - "y": 488.0, - "z": 3000.0 + "y": 488.00, + "z": 3000.00 }, { "config": "{\"name\":\"df3f3c6f9bd0e807cd81\",\"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\":\"e77913aacc1377451e6d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 176.0, - "width": 272.0, - "x": 0.0, - "y": 0.0, - "z": 3000.0 + "height": 176.00, + "width": 272.00, + "x": 0.00, + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"e77913aacc1377451e6d\",\"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.0, - "width": 272.0, - "x": 216.0, - "y": 304.0, - "z": 7000.0 + "height": 368.00, + "width": 272.00, + "x": 216.00, + "y": 304.00, + "z": 7000.00 }, { "config": "{\"name\":\"e99ee2e98ccb55ecac66\",\"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\":\"'1a7083923871d04da2b3'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Close button'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"c4e1c9a492ab70b2e3b4\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 32.0, - "x": 784.0, - "y": 48.0, - "z": 5000.0 + "height": 32.00, + "width": 32.00, + "x": 784.00, + "y": 48.00, + "z": 5000.00 }, { "config": "{\"name\":\"e9dfc1e085645a8c8005\",\"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\":{\"fontSize\":\"13.3333px\",\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/ftk/trouble\"}]}]}}]}},\"parentGroupName\":\"e77913aacc1377451e6d\"}", "filters": "[]", - "height": 176.0, - "width": 256.0, + "height": 176.00, + "width": 256.00, "x": 0.04, - "y": 192.0, - "z": 0.0 + "y": 192.00, + "z": 0.00 }, { "config": "{\"name\":\"ea9a802ad175b96a3827\",\"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\":\"b603a1000a76ecc4e046\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 80.0, - "width": 1232.0, - "x": 0.0, - "y": 288.0, - "z": 16000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 288.00, + "z": 16000.00 }, { "config": "{\"name\":\"ebf5ba8501e972165db3\",\"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\":\"'6e327bb59d3eed04e4d0'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e77913aacc1377451e6d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 24.0, - "width": 144.0, + "height": 24.00, + "width": 144.00, "x": 0.22, - "y": 288.0, - "z": 1000.0 + "y": 288.00, + "z": 1000.00 }, { "config": "{\"name\":\"f016730bcc0a4a662d82\",\"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\":\"b603a1000a76ecc4e046\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 576.0, - "y": 0.0, - "z": 6000.0 + "height": 696.00, + "width": 80.00, + "x": 576.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"f6624afaa6700dd9432a\",\"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\":\"b603a1000a76ecc4e046\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 696.0, - "width": 80.0, - "x": 384.0, - "y": 0.0, - "z": 8000.0 + "height": 696.00, + "width": 80.00, + "x": 384.00, + "y": 0.00, + "z": 8000.00 }, { "config": "{\"name\":\"f6ed4cd50da005230375\",\"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\":\"b603a1000a76ecc4e046\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 80.0, - "width": 1232.0, - "x": 0.0, - "y": 576.0, - "z": 13000.0 + "height": 80.00, + "width": 1232.00, + "x": 0.00, + "y": 576.00, + "z": 13000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Hybrid Benefit", "displayOption": 1, "filters": "[{\"name\":\"Filtere215005bbd5029767bdd\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"CostDetails\"}},\"Property\":\"x_SkuMeterCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"CostDetails\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Or\":{\"Left\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuMeterCategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Virtual Machines'\"}}}},\"Right\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuMeterCategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Virtual Machine Licenses'\"}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"objects\":{}}]", - "height": 720.0, + "height": 720.00, "name": "ReportSection2fb9ee30796ed6c1dd42", "ordinal": 8, "visualContainers": [ { - "config": "{\"name\":\"0719db0cc25380dee8db\",\"layouts\":[{\"id\":0,\"position\":{\"x\":504,\"y\":104,\"z\":6000,\"width\":280,\"height\":280,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"barChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.x_SkuType\",\"active\":true}],\"Y\":[{\"queryRef\":\"CountNonNull(Costs.ResourceId)\"}],\"Series\":[{\"queryRef\":\"Costs.x_SkuCoreCount\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"CountNonNull(Costs.ResourceId)\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuType\"},\"Name\":\"Costs.x_SkuType\",\"NativeReferenceName\":\"SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuCoreCount\"},\"Name\":\"Costs.x_SkuCoreCount\",\"NativeReferenceName\":\"vCPUs\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2}}}]},\"columnProperties\":{\"CountNonNull(Costs.ResourceId)\":{\"displayName\":\"Resources\"},\"Costs.x_SkuType\":{\"displayName\":\"SKU\"},\"Costs.x_SkuCoreCount\":{\"displayName\":\"vCPUs\"}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"legend\":[{\"properties\":{\"titleText\":{\"expr\":{\"Literal\":{\"Value\":\"'VCPUs'\"}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"categoryAxis\":[{\"properties\":{\"preferredCategoryWidth\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"maxMarginFactor\":{\"expr\":{\"Literal\":{\"Value\":\"25L\"}}},\"innerPadding\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'8'\"}}},\"concatenateLabels\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"valueAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Not enabled with 8+ vCPUs (last day)'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}]}}}", + "config": "{\"name\":\"0719db0cc25380dee8db\",\"layouts\":[{\"id\":0,\"position\":{\"x\":504,\"y\":104,\"z\":4000,\"width\":280,\"height\":280,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"barChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.x_SkuType\",\"active\":true}],\"Y\":[{\"queryRef\":\"CountNonNull(Costs.ResourceId)\"}],\"Series\":[{\"queryRef\":\"Costs.x_SkuCoreCount\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"CountNonNull(Costs.ResourceId)\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuType\"},\"Name\":\"Costs.x_SkuType\",\"NativeReferenceName\":\"SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuCoreCount\"},\"Name\":\"Costs.x_SkuCoreCount\",\"NativeReferenceName\":\"vCPUs\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2}}}]},\"columnProperties\":{\"CountNonNull(Costs.ResourceId)\":{\"displayName\":\"Resources\"},\"Costs.x_SkuType\":{\"displayName\":\"SKU\"},\"Costs.x_SkuCoreCount\":{\"displayName\":\"vCPUs\"}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"legend\":[{\"properties\":{\"titleText\":{\"expr\":{\"Literal\":{\"Value\":\"'VCPUs'\"}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"categoryAxis\":[{\"properties\":{\"preferredCategoryWidth\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"maxMarginFactor\":{\"expr\":{\"Literal\":{\"Value\":\"25L\"}}},\"innerPadding\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'8'\"}}},\"concatenateLabels\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"valueAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Not enabled with 8+ vCPUs (last day)'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}]}}}", "filters": "[{\"name\":\"Filterd2da69ba2473a8860a30\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ResourceId\"}},\"Function\":2}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filtera79267b6267d1a768e2b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuType\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":1},{\"name\":\"Filterc1f838932a75c1a28404\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuLicenseStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'Not Enabled'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":2},{\"name\":\"Filter5ba4cd51056dcae10dce\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargePeriodStart\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"subquery\",\"Expression\":{\"Subquery\":{\"Query\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"field\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}},\"Function\":4}}}],\"Top\":1}}},\"Type\":2},{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}],\"Table\":{\"SourceRef\":{\"Source\":\"subquery\"}}}}}]},\"type\":\"TopN\",\"howCreated\":1,\"ordinal\":3},{\"name\":\"46a9982d2fd3db6edd1f\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuCoreCount\"}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":4},{\"name\":\"dff7cb9838159db170d0\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuCoreCount\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":2,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuCoreCount\"}},\"Right\":{\"Literal\":{\"Value\":\"8L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":5}]", - "height": 280.0, - "width": 280.0, - "x": 504.0, - "y": 104.0, - "z": 6000.0 + "height": 280.00, + "width": 280.00, + "x": 504.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"0b2b8add599b36ea8ed6\",\"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\":\"a9f2cb6260307e0c1702\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"0c78a9719004008c0478\",\"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\":\"a9f2cb6260307e0c1702\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "config": "{\"name\":\"0e7f26a61c63bc7b586e\",\"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\":\"a9f2cb6260307e0c1702\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "config": "{\"name\":\"11d63c9d85c4040c401b\",\"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\":\"a9f2cb6260307e0c1702\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "config": "{\"name\":\"298ae043490620669330\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":192,\"x\":0,\"y\":0,\"z\":5000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Hybrid Benefit\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Summarize reservation and savings plan cost, utilization, and 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\":\"319cd0c4725077d8748d\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { - "config": "{\"name\":\"319cd0c4725077d8748d\",\"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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "config": "{\"name\":\"319cd0c4725077d8748d\",\"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 + }, + { + "config": "{\"name\":\"38d89b06c343073904a1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":9000,\"width\":184,\"height\":88,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_SkuLicenseQuantityMeasure\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseQuantityMeasure\"},\"Name\":\"Costs.x_SkuLicenseQuantityMeasure\",\"NativeReferenceName\":\"x_SkuLicenseQuantityMeasure\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseQuantityMeasure\"}}}]},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'11'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"visualHeader\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'vCPUs used (last day)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", + "filters": "[{\"name\":\"Filter15e10dae4e7443966e1d\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"HybridBenefitvCPUs\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filter1689997e49c37e4ec7dd\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"HybridBenefitCPUs\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":1},{\"name\":\"Filter791c759c6d09ab96975a\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargePeriodStart\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"subquery\",\"Expression\":{\"Subquery\":{\"Query\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"field\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}},\"Function\":4}}}],\"Top\":1}}},\"Type\":2},{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}],\"Table\":{\"SourceRef\":{\"Source\":\"subquery\"}}}}}]},\"type\":\"TopN\",\"howCreated\":1,\"ordinal\":2},{\"name\":\"Filter9f8c5f51931c2ada105b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuImageType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuImageType\"}},\"Right\":{\"Literal\":{\"Value\":\"'Windows Server BYOL'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":3}]", + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 9000.00 }, { "config": "{\"name\":\"3cd03063e19687434a0a\",\"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\":\"a9f2cb6260307e0c1702\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { - "config": "{\"name\":\"3e6e33928d150e70cc1a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":104,\"z\":5000,\"width\":472,\"height\":280,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.ChargePeriodStart\",\"active\":true}],\"Series\":[{\"queryRef\":\"Costs.x_SkuLicenseStatus\"}],\"Y\":[{\"queryRef\":\"Sum(Costs.x_SkuLicenseQuantity)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"Costs.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseStatus\"},\"Name\":\"Costs.x_SkuLicenseStatus\",\"NativeReferenceName\":\"Hybrid Benefit status\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_SkuLicenseQuantity)\",\"NativeReferenceName\":\"Hybrid Benefit CPUs\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"Costs.x_SkuLicenseStatus\":{\"displayName\":\"Hybrid Benefit status\"},\"Sum(Costs.x_SkuLicenseQuantity)\":{\"displayName\":\"Hybrid Benefit CPUs\"}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"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\":\"UsageDetails\"}},\"Property\":\"Azure Hybrid Benefit\"}},\"Right\":{\"Literal\":{\"Value\":\"'Enabled'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0.6}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"UsageDetails\"}},\"Property\":\"Azure Hybrid Benefit\"}},\"Right\":{\"Literal\":{\"Value\":\"'Not enabled'\"}}}}}]}}],\"labels\":[{\"properties\":{\"show\":{\"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\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'AHB vCPUs consumed (last 30 days)'\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'14'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", + "config": "{\"name\":\"3e6e33928d150e70cc1a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":104,\"z\":7000,\"width\":472,\"height\":280,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.ChargePeriodStart\",\"active\":true}],\"Series\":[{\"queryRef\":\"Costs.x_SkuLicenseStatus\"}],\"Y\":[{\"queryRef\":\"Sum(Costs.x_SkuLicenseQuantity)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"Costs.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseStatus\"},\"Name\":\"Costs.x_SkuLicenseStatus\",\"NativeReferenceName\":\"Hybrid Benefit status\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_SkuLicenseQuantity)\",\"NativeReferenceName\":\"Hybrid Benefit CPUs\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"Costs.x_SkuLicenseStatus\":{\"displayName\":\"Hybrid Benefit status\"},\"Sum(Costs.x_SkuLicenseQuantity)\":{\"displayName\":\"Hybrid Benefit CPUs\"}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"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\":\"UsageDetails\"}},\"Property\":\"Azure Hybrid Benefit\"}},\"Right\":{\"Literal\":{\"Value\":\"'Enabled'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0.6}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"UsageDetails\"}},\"Property\":\"Azure Hybrid Benefit\"}},\"Right\":{\"Literal\":{\"Value\":\"'Not enabled'\"}}}}}]}}],\"labels\":[{\"properties\":{\"show\":{\"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\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'AHB vCPUs consumed (last 30 days)'\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'14'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[{\"name\":\"Filter6909a2696268c835ac9f\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"HybridBenefitCPUs\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filter8c7d374300584c0bb270\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargePeriodStart\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"subquery\",\"Expression\":{\"Subquery\":{\"Query\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"field\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}},\"Function\":4}}}],\"Top\":30}}},\"Type\":2},{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}],\"Table\":{\"SourceRef\":{\"Source\":\"subquery\"}}}}}]},\"type\":\"TopN\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":1},{\"name\":\"Filtereef66cf991a6069c9e01\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuLicenseStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'Enabled'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":2}]", - "height": 280.0, - "width": 472.0, - "x": 792.0, - "y": 104.0, - "z": 5000.0 + "height": 280.00, + "width": 472.00, + "x": 792.00, + "y": 104.00, + "z": 7000.00 }, { "config": "{\"name\":\"426727ba7e2b3840430b\",\"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\":\"319cd0c4725077d8748d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "config": "{\"name\":\"4483c4cde9840865a958\",\"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\":\"a9f2cb6260307e0c1702\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { - "config": "{\"name\":\"47b9a5135ba73a04e0e3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":3000,\"width\":184,\"height\":88,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Count(Costs.ResourceId)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"Count(Costs.ResourceId)\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'11'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"visualHeader\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Enabled (last day)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", + "config": "{\"name\":\"47b9a5135ba73a04e0e3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":2000,\"width\":184,\"height\":88,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Count(Costs.ResourceId)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"Count(Costs.ResourceId)\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'11'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"visualHeader\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Enabled (last day)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[{\"name\":\"Filter81cb7b66d0191e5291ba\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ResourceId\"}},\"Function\":2}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filtera3b0f2110c90990363ab\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargePeriodStart\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"subquery\",\"Expression\":{\"Subquery\":{\"Query\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"field\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}},\"Function\":4}}}],\"Top\":1}}},\"Type\":2},{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}],\"Table\":{\"SourceRef\":{\"Source\":\"subquery\"}}}}}]},\"type\":\"TopN\",\"howCreated\":1,\"ordinal\":1},{\"name\":\"Filtere6405dcbd7ac3846c740\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuLicenseStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'Enabled'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":2}]", - "height": 88.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 3000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 2000.00 }, { "config": "{\"name\":\"4a4aa280067230b7eaa4\",\"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\":\"a9f2cb6260307e0c1702\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"4d3b924253393eb7bac4\",\"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\":\"a9f2cb6260307e0c1702\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { - "config": "{\"name\":\"5985fe1454954596484b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":392,\"z\":2000,\"width\":1048,\"height\":320,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ResourceName\"},{\"queryRef\":\"Costs.x_SkuType\"},{\"queryRef\":\"Sum(Costs.x_SkuCoreCount)\"},{\"queryRef\":\"Sum(Costs.x_SkuLicenseQuantity)\"},{\"queryRef\":\"Costs.x_SkuLicenseStatus\"},{\"queryRef\":\"Costs.x_ResourceGroupName\"},{\"queryRef\":\"Costs.SubAccountName\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.ConsumedQuantity)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceName\"},\"Name\":\"Costs.ResourceName\",\"NativeReferenceName\":\"Name\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ConsumedQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.ConsumedQuantity)\",\"NativeReferenceName\":\"Quantity\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"Costs.SubAccountName\",\"NativeReferenceName\":\"Subscription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"Costs.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseStatus\"},\"Name\":\"Costs.x_SkuLicenseStatus\",\"NativeReferenceName\":\"AHB status\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuType\"},\"Name\":\"Costs.x_SkuType\",\"NativeReferenceName\":\"SKU\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuCoreCount\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_SkuCoreCount)\",\"NativeReferenceName\":\"vCPUs\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_SkuLicenseQuantity)\",\"NativeReferenceName\":\"AHB CPUs1\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceName\"}}}]},\"columnProperties\":{\"UsageDetails.AdditionalInfo.ImageType\":{\"displayName\":\"ImageType\"},\"Costs.ResourceName\":{\"displayName\":\"Name\"},\"Costs.x_SkuType\":{\"displayName\":\"SKU\"},\"Costs.x_SkuLicenseStatus\":{\"displayName\":\"AHB status\"},\"Costs.x_ResourceGroupName\":{\"displayName\":\"Resource group\"},\"Costs.SubAccountName\":{\"displayName\":\"Subscription\"},\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"Sum(Costs.ConsumedQuantity)\":{\"displayName\":\"Quantity\"},\"Sum(Costs.x_SkuCoreCount)\":{\"displayName\":\"vCPUs\"},\"Sum(Costs.x_SkuLicenseQuantity)\":{\"displayName\":\"AHB CPUs\"}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"objects\":{\"columnHeaders\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]},\"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\":\"'Resources'\"}}}}}]}}}", + "config": "{\"name\":\"5985fe1454954596484b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":392,\"z\":3000,\"width\":1048,\"height\":320,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ResourceName\"},{\"queryRef\":\"Costs.x_SkuType\"},{\"queryRef\":\"Sum(Costs.x_SkuCoreCount)\"},{\"queryRef\":\"Sum(Costs.x_SkuLicenseQuantity)\"},{\"queryRef\":\"Costs.x_SkuLicenseStatus\"},{\"queryRef\":\"Costs.x_ResourceGroupName\"},{\"queryRef\":\"Costs.SubAccountName\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.ConsumedQuantity)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceName\"},\"Name\":\"Costs.ResourceName\",\"NativeReferenceName\":\"Name\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ConsumedQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.ConsumedQuantity)\",\"NativeReferenceName\":\"Quantity\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"Costs.SubAccountName\",\"NativeReferenceName\":\"Subscription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"Costs.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseStatus\"},\"Name\":\"Costs.x_SkuLicenseStatus\",\"NativeReferenceName\":\"AHB status\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuType\"},\"Name\":\"Costs.x_SkuType\",\"NativeReferenceName\":\"SKU\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuCoreCount\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_SkuCoreCount)\",\"NativeReferenceName\":\"vCPUs\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_SkuLicenseQuantity)\",\"NativeReferenceName\":\"AHB CPUs1\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceName\"}}}]},\"columnProperties\":{\"UsageDetails.AdditionalInfo.ImageType\":{\"displayName\":\"ImageType\"},\"Costs.ResourceName\":{\"displayName\":\"Name\"},\"Costs.x_SkuType\":{\"displayName\":\"SKU\"},\"Costs.x_SkuLicenseStatus\":{\"displayName\":\"AHB status\"},\"Costs.x_ResourceGroupName\":{\"displayName\":\"Resource group\"},\"Costs.SubAccountName\":{\"displayName\":\"Subscription\"},\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"Sum(Costs.ConsumedQuantity)\":{\"displayName\":\"Quantity\"},\"Sum(Costs.x_SkuCoreCount)\":{\"displayName\":\"vCPUs\"},\"Sum(Costs.x_SkuLicenseQuantity)\":{\"displayName\":\"AHB CPUs\"}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"objects\":{\"columnHeaders\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]},\"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\":\"'Resources'\"}}}}}]}}}", "filters": "[{\"name\":\"Filter2aee9f7816cc37b28843\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ResourceMachineName\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filter24de020c1ddb08dd9408\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ResourceName\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":1},{\"name\":\"Filter8e4069500149ea005c77\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Or\":{\"Left\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuMeterCategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Virtual Machines'\"}}}},\"Right\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuMeterCategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Virtual Machine Licenses'\"}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":2},{\"name\":\"Filterd8943a9c83b7718b13a8\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ConsumedQuantity\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":3},{\"name\":\"Filter102ca372043abcebc9a6\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":4},{\"name\":\"Filterd7643e3a6b1e95598e29\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"SubAccountName\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":5},{\"name\":\"Filter55d932a397dd799a0551\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_ResourceGroupName\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":6},{\"name\":\"Filter5b3ad3a585cdea45556e\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuLicenseStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseStatus\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Not supported'\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":0,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false,\"ordinal\":7},{\"name\":\"Filter942280d854167d06530e\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuLicenseCPUs\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":8},{\"name\":\"Filteref6ecb168e2468d26360\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuCPUs\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":9},{\"name\":\"Filter6bd92c808090b0786892\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuType\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":10},{\"name\":\"Filter16edf9183bb5de0359b4\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_ResourceMachineName\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":11},{\"name\":\"Filterf6d880f80eaea5658a03\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargePeriodStart\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"subquery\",\"Expression\":{\"Subquery\":{\"Query\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"field\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}},\"Function\":4}}}],\"Top\":1}}},\"Type\":2},{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}],\"Table\":{\"SourceRef\":{\"Source\":\"subquery\"}}}}}]},\"type\":\"TopN\",\"howCreated\":1,\"ordinal\":12}]", - "height": 320.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 3000.00 }, { "config": "{\"name\":\"600dd3219c62266d299a\",\"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\":\"a9f2cb6260307e0c1702\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { - "config": "{\"name\":\"609c9b4223aeec00c9da\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":7000,\"width\":280,\"height\":280,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"barChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.x_SkuType\",\"active\":true}],\"Y\":[{\"queryRef\":\"CountNonNull(Costs.ResourceId)\"}],\"Series\":[{\"queryRef\":\"Costs.x_SkuCoreCount\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"CountNonNull(Costs.ResourceId)\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuType\"},\"Name\":\"Costs.x_SkuType\",\"NativeReferenceName\":\"SKU1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuCoreCount\"},\"Name\":\"Costs.x_SkuCoreCount\",\"NativeReferenceName\":\"vCPUs\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2}}}]},\"columnProperties\":{\"CountNonNull(Costs.ResourceId)\":{\"displayName\":\"Resources\"},\"Costs.x_SkuType\":{\"displayName\":\"SKU\"},\"Costs.x_SkuCoreCount\":{\"displayName\":\"vCPUs\"}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"labelPosition\":{\"expr\":{\"Literal\":{\"Value\":\"'InsideCenter'\"}}}}}],\"legend\":[{\"properties\":{\"titleText\":{\"expr\":{\"Literal\":{\"Value\":\"'VCPUs'\"}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"categoryAxis\":[{\"properties\":{\"preferredCategoryWidth\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"maxMarginFactor\":{\"expr\":{\"Literal\":{\"Value\":\"25L\"}}},\"innerPadding\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'8'\"}}},\"concatenateLabels\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"valueAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'SKUs enabled with <8 vCPU (last day)'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", + "config": "{\"name\":\"609c9b4223aeec00c9da\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":5000,\"width\":280,\"height\":280,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"barChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.x_SkuType\",\"active\":true}],\"Y\":[{\"queryRef\":\"CountNonNull(Costs.ResourceId)\"}],\"Series\":[{\"queryRef\":\"Costs.x_SkuCoreCount\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"CountNonNull(Costs.ResourceId)\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuType\"},\"Name\":\"Costs.x_SkuType\",\"NativeReferenceName\":\"SKU1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuCoreCount\"},\"Name\":\"Costs.x_SkuCoreCount\",\"NativeReferenceName\":\"vCPUs\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2}}}]},\"columnProperties\":{\"CountNonNull(Costs.ResourceId)\":{\"displayName\":\"Resources\"},\"Costs.x_SkuType\":{\"displayName\":\"SKU\"},\"Costs.x_SkuCoreCount\":{\"displayName\":\"vCPUs\"}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"labelPosition\":{\"expr\":{\"Literal\":{\"Value\":\"'InsideCenter'\"}}}}}],\"legend\":[{\"properties\":{\"titleText\":{\"expr\":{\"Literal\":{\"Value\":\"'VCPUs'\"}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"categoryAxis\":[{\"properties\":{\"preferredCategoryWidth\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"maxMarginFactor\":{\"expr\":{\"Literal\":{\"Value\":\"25L\"}}},\"innerPadding\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'8'\"}}},\"concatenateLabels\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"valueAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'SKUs enabled with <8 vCPU (last day)'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[{\"name\":\"Filterf9d0e00955a2bdae2260\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ResourceId\"}},\"Function\":2}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filterf2c9f5372cdc300020ae\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargePeriodStart\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"subquery\",\"Expression\":{\"Subquery\":{\"Query\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"field\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}},\"Function\":4}}}],\"Top\":1}}},\"Type\":2},{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}],\"Table\":{\"SourceRef\":{\"Source\":\"subquery\"}}}}}]},\"type\":\"TopN\",\"howCreated\":1,\"ordinal\":1},{\"name\":\"Filter3dc50ca76ed070726066\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuType\"}},\"type\":\"Categorical\",\"howCreated\":0,\"ordinal\":2},{\"name\":\"Filterc2ff97e648014129a516\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuLicenseStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'Enabled'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":3},{\"name\":\"2a7cc4e4da9f62cb7a23\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuCoreCount\"}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":4},{\"name\":\"1cfc153c915bca9cc89d\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuCoreCount\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":3,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuCoreCount\"}},\"Right\":{\"Literal\":{\"Value\":\"8L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":5}]", - "height": 280.0, - "width": 280.0, - "x": 216.0, - "y": 104.0, - "z": 7000.0 + "height": 280.00, + "width": 280.00, + "x": 216.00, + "y": 104.00, + "z": 5000.00 }, { "config": "{\"name\":\"63777771b72911023b82\",\"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\":\"a9f2cb6260307e0c1702\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "config": "{\"name\":\"6a64c2095d52683eb6ab\",\"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\":\"a9f2cb6260307e0c1702\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { - "config": "{\"name\":\"6f7a3cae8a3380172e08\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.x_SkuLicenseQuantity)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_SkuLicenseQuantity)\",\"NativeReferenceName\":\"Hybrid Benefit CPUs\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseQuantity\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.x_SkuLicenseQuantity)\":{\"displayName\":\"Hybrid Benefit CPUs\"}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'11'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"visualHeader\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'vCPUs used (last day)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", + "config": "{\"name\":\"6f7a3cae8a3380172e08\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.x_SkuLicenseQuantity)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_SkuLicenseQuantity)\",\"NativeReferenceName\":\"Hybrid Benefit CPUs\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseQuantity\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.x_SkuLicenseQuantity)\":{\"displayName\":\"Hybrid Benefit CPUs\"}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'11'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"visualHeader\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'vCPUs used (last day)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[{\"name\":\"Filter15e10dae4e7443966e1d\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"HybridBenefitvCPUs\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filter1689997e49c37e4ec7dd\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"HybridBenefitCPUs\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":1},{\"name\":\"Filter791c759c6d09ab96975a\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargePeriodStart\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"subquery\",\"Expression\":{\"Subquery\":{\"Query\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"field\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}},\"Function\":4}}}],\"Top\":1}}},\"Type\":2},{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}],\"Table\":{\"SourceRef\":{\"Source\":\"subquery\"}}}}}]},\"type\":\"TopN\",\"howCreated\":1,\"ordinal\":2},{\"name\":\"Filter9f8c5f51931c2ada105b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuImageType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuImageType\"}},\"Right\":{\"Literal\":{\"Value\":\"'Windows Server BYOL'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":3}]", - "height": 88.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 6000.00 }, { "config": "{\"name\":\"6f7cf5298316c0e09392\",\"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\":\"a9f2cb6260307e0c1702\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"76b38f090e2ae14debcc\",\"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\":\"a9f2cb6260307e0c1702\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"88dd9a90798857dc545b\",\"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\":\"a9f2cb6260307e0c1702\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"9543ec5ebd2b065007e6\",\"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\":\"a9f2cb6260307e0c1702\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "config": "{\"name\":\"9eab490ce07488030e13\",\"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\":\"cd41f4b05d321160b8ae\"}", "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "config": "{\"name\":\"a1b2cdb3026954c10d16\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":4000}}],\"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\":\"cd41f4b05d321160b8ae\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"a488e39fa07da3b0c6a8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":200,\"x\":0,\"y\":0,\"z\":1000,\"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\":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\":\"319cd0c4725077d8748d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"a82f2a945659a6358746\",\"layouts\":[{\"id\":0,\"position\":{\"height\":40,\"width\":40,\"x\":160,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"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#hybrid-benefit'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"319cd0c4725077d8748d\"}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"a9f2cb6260307e0c1702\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.39572239294395,\"y\":8.005493854933814,\"z\":0,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, + "height": 704.00, "width": 1048.09, - "x": 215.4, + "x": 215.40, "y": 8.01, - "z": 0.0 + "z": 0.00 }, { "config": "{\"name\":\"c288d53fb3e6630e8a50\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":0}}],\"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\":\"cd41f4b05d321160b8ae\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "config": "{\"name\":\"cd41f4b05d321160b8ae\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"319cd0c4725077d8748d\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"cd56a465b19890073873\",\"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\":\"a9f2cb6260307e0c1702\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { - "config": "{\"name\":\"da194f0550b68034d077\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.RateOptimization/featureName/Storage.HybridBenefit'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"319cd0c4725077d8748d\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"da194f0550b68034d077\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK$$ftkver$$/bladeName/PowerBI.RateOptimization/featureName/Storage.HybridBenefit'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"319cd0c4725077d8748d\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"df0e5292cc0d5c5c008a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":2000}}],\"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\":\"cd41f4b05d321160b8ae\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "config": "{\"name\":\"e0c82f5c62e50a0e3a9d\",\"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\":\"a9f2cb6260307e0c1702\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 + }, + { + "config": "{\"name\":\"e72c6612d5dc76661dc1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":392,\"z\":8000,\"width\":1048,\"height\":320,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ResourceName\"},{\"queryRef\":\"Costs.x_SkuType\"},{\"queryRef\":\"Costs.x_SkuCoreCountMeasure\"},{\"queryRef\":\"Costs.x_SkuLicenseQuantityMeasure\"},{\"queryRef\":\"Costs.x_SkuLicenseStatus\"},{\"queryRef\":\"Costs.x_ResourceGroupName\"},{\"queryRef\":\"Costs.SubAccountName\"},{\"queryRef\":\"Sum(Costs.ConsumedQuantity)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceName\"},\"Name\":\"Costs.ResourceName\",\"NativeReferenceName\":\"Name\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ConsumedQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.ConsumedQuantity)\",\"NativeReferenceName\":\"Quantity\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"Costs.SubAccountName\",\"NativeReferenceName\":\"Subscription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"Costs.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseStatus\"},\"Name\":\"Costs.x_SkuLicenseStatus\",\"NativeReferenceName\":\"AHB status\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuType\"},\"Name\":\"Costs.x_SkuType\",\"NativeReferenceName\":\"SKU\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuCoreCountMeasure\"},\"Name\":\"Costs.x_SkuCoreCountMeasure\",\"NativeReferenceName\":\"vCPUs\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseQuantityMeasure\"},\"Name\":\"Costs.x_SkuLicenseQuantityMeasure\",\"NativeReferenceName\":\"AHB CPUs\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"UsageDetails.AdditionalInfo.ImageType\":{\"displayName\":\"ImageType\"},\"Costs.ResourceName\":{\"displayName\":\"Name\"},\"Costs.x_SkuType\":{\"displayName\":\"SKU\"},\"Costs.x_SkuLicenseStatus\":{\"displayName\":\"AHB status\"},\"Costs.x_ResourceGroupName\":{\"displayName\":\"Resource group\"},\"Costs.SubAccountName\":{\"displayName\":\"Subscription\"},\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"Sum(Costs.ConsumedQuantity)\":{\"displayName\":\"Quantity\"},\"Costs.x_SkuCoreCountMeasure\":{\"displayName\":\"vCPUs\"},\"Costs.x_SkuLicenseQuantityMeasure\":{\"displayName\":\"AHB CPUs\"}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"objects\":{\"columnHeaders\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]},\"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\":\"'Resources'\"}}}}}]}}}", + "filters": "[{\"name\":\"Filter2aee9f7816cc37b28843\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ResourceMachineName\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filter24de020c1ddb08dd9408\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ResourceName\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":1},{\"name\":\"Filter8e4069500149ea005c77\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Or\":{\"Left\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuMeterCategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Virtual Machines'\"}}}},\"Right\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuMeterCategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Virtual Machine Licenses'\"}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":2},{\"name\":\"Filterd8943a9c83b7718b13a8\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ConsumedQuantity\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":3},{\"name\":\"Filter102ca372043abcebc9a6\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":4},{\"name\":\"Filterd7643e3a6b1e95598e29\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"SubAccountName\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":5},{\"name\":\"Filter55d932a397dd799a0551\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_ResourceGroupName\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":6},{\"name\":\"Filter5b3ad3a585cdea45556e\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuLicenseStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseStatus\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Not supported'\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":0,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false,\"ordinal\":7},{\"name\":\"Filter942280d854167d06530e\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuLicenseCPUs\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":8},{\"name\":\"Filter6bd92c808090b0786892\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuType\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":9},{\"name\":\"Filter16edf9183bb5de0359b4\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_ResourceMachineName\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":10},{\"name\":\"Filterf6d880f80eaea5658a03\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargePeriodStart\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"subquery\",\"Expression\":{\"Subquery\":{\"Query\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"field\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}},\"Function\":4}}}],\"Top\":1}}},\"Type\":2},{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}],\"Table\":{\"SourceRef\":{\"Source\":\"subquery\"}}}}}]},\"type\":\"TopN\",\"howCreated\":1,\"ordinal\":11},{\"name\":\"a187dbb0cb08c1cf10d5\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuLicenseQuantity\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":12},{\"name\":\"d86b6074acf922905f0d\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":13},{\"name\":\"e59b2b4eadcbd7d66e17\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuCoreCount\"}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":14}]", + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 8000.00 }, { "config": "{\"name\":\"e74b604b4b0b4b3ec19c\",\"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\":\"319cd0c4725077d8748d\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 + }, + { + "config": "{\"name\":\"e8d1738573e78de3636e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":104,\"z\":10000,\"width\":472,\"height\":280,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.ChargePeriodStart\",\"active\":true}],\"Series\":[{\"queryRef\":\"Costs.x_SkuLicenseStatus\"}],\"Y\":[{\"queryRef\":\"Costs.x_SkuLicenseQuantityMeasure\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"Costs.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseStatus\"},\"Name\":\"Costs.x_SkuLicenseStatus\",\"NativeReferenceName\":\"Hybrid Benefit status\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseQuantityMeasure\"},\"Name\":\"Costs.x_SkuLicenseQuantityMeasure\",\"NativeReferenceName\":\"Hybrid Benefit CPUs\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"Costs.x_SkuLicenseStatus\":{\"displayName\":\"Hybrid Benefit status\"},\"Costs.x_SkuLicenseQuantityMeasure\":{\"displayName\":\"Hybrid Benefit CPUs\"}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"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\":\"UsageDetails\"}},\"Property\":\"Azure Hybrid Benefit\"}},\"Right\":{\"Literal\":{\"Value\":\"'Enabled'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0.6}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"UsageDetails\"}},\"Property\":\"Azure Hybrid Benefit\"}},\"Right\":{\"Literal\":{\"Value\":\"'Not enabled'\"}}}}}]}}],\"labels\":[{\"properties\":{\"show\":{\"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\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'AHB vCPUs consumed (last 30 days)'\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'14'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", + "filters": "[{\"name\":\"Filter6909a2696268c835ac9f\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"HybridBenefitCPUs\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filter8c7d374300584c0bb270\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargePeriodStart\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"subquery\",\"Expression\":{\"Subquery\":{\"Query\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"field\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}},\"Function\":4}}}],\"Top\":30}}},\"Type\":2},{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}],\"Table\":{\"SourceRef\":{\"Source\":\"subquery\"}}}}}]},\"type\":\"TopN\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":1},{\"name\":\"Filtereef66cf991a6069c9e01\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuLicenseStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuLicenseStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'Enabled'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":2}]", + "height": 280.00, + "width": 472.00, + "x": 792.00, + "y": 104.00, + "z": 10000.00 }, { "config": "{\"name\":\"edb3ebafbebd102c3ec7\",\"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\":\"a9f2cb6260307e0c1702\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "config": "{\"name\":\"ff81cd4f9b3b367a280e\",\"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\":\"cd41f4b05d321160b8ae\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{}", "displayName": "Reservation recommendations", "displayOption": 1, "filters": "[{\"name\":\"c560ec47bc40ced01b0b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterCategory\"}},\"type\":\"Categorical\",\"howCreated\":1}]", - "height": 720.0, + "height": 720.00, "name": "ReportSection688a5a4c955eec0def76", "ordinal": 6, "visualContainers": [ { "config": "{\"name\":\"03f15781c59d76a2e3c6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.39572239294395,\"y\":8.005493854933814,\"z\":0,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, + "height": 704.00, "width": 1048.09, - "x": 215.4, + "x": 215.40, "y": 8.01, - "z": 0.0 + "z": 0.00 }, { - "config": "{\"name\":\"047c8933ebee67de5e40\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(ReservationRecommendations.x_EffectiveCostAfter)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_EffectiveCostAfter\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_EffectiveCostAfter)\",\"NativeReferenceName\":\"x_EffectiveCostAfter\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_EffectiveCostAfter\"}},\"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\":\"'Potential cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", + "config": "{\"name\":\"0d62250399ee71a9c67b\",\"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\":\"03f15781c59d76a2e3c6\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 6000.0 + "height": 704.00, + "width": 88.00, + "x": 767.72, + "y": 0.00, + "z": 2000.00 }, { - "config": "{\"name\":\"059c6beb9e9094500668\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":7000,\"width\":184,\"height\":88,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(ReservationRecommendations.x_EffectiveCostBefore)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_EffectiveCostBefore\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_EffectiveCostBefore)\",\"NativeReferenceName\":\"x_EffectiveCostBefore\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_EffectiveCostBefore\"}},\"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\":\"'Current cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", + "config": "{\"name\":\"0ea9aa3da6c31ee4b4e1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":4000,\"width\":1048,\"height\":320,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"ReservationRecommendations.x_CommitmentDiscountScope\"},{\"queryRef\":\"ReservationRecommendations.x_SkuTermLabel\"},{\"queryRef\":\"ReservationRecommendations.x_CommitmentDiscountNormalizedGroup\"},{\"queryRef\":\"ReservationRecommendations.RegionName\"},{\"queryRef\":\"Sum(ReservationRecommendations.x_RecommendedQuantity)\"},{\"queryRef\":\"AutofitComboMeter.ArmSkuName\"},{\"queryRef\":\"Sum(ReservationRecommendations.x_RecommendedQuantityNormalized)\"},{\"queryRef\":\"ReservationRecommendations.x_CommitmentDiscountNormalizedSize\"},{\"queryRef\":\"Sum(ReservationRecommendations.x_EffectiveCostBefore)\"},{\"queryRef\":\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\"},{\"queryRef\":\"Sum(ReservationRecommendations.x_BreakEvenMonths)\"},{\"queryRef\":\"ReservationRecommendations.x_BreakEvenDate\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"InstanceSizeFlexibility\",\"Type\":0},{\"Name\":\"r1\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"x_SkuType\"},\"Name\":\"AutofitComboMeter.ArmSkuName\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"RegionName\"},\"Name\":\"ReservationRecommendations.RegionName\",\"NativeReferenceName\":\"Region\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"Potential savings1\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_EffectiveCostBefore\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_EffectiveCostBefore)\",\"NativeReferenceName\":\"Contracted cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_RecommendedQuantity\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_RecommendedQuantity)\",\"NativeReferenceName\":\"Rec qty\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_RecommendedQuantityNormalized\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_RecommendedQuantityNormalized)\",\"NativeReferenceName\":\"Rec qty normalized1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_CommitmentDiscountNormalizedSize\"},\"Name\":\"ReservationRecommendations.x_CommitmentDiscountNormalizedSize\",\"NativeReferenceName\":\"Normalized size1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_CommitmentDiscountNormalizedGroup\"},\"Name\":\"ReservationRecommendations.x_CommitmentDiscountNormalizedGroup\",\"NativeReferenceName\":\"Normalized group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_CommitmentDiscountScope\"},\"Name\":\"ReservationRecommendations.x_CommitmentDiscountScope\",\"NativeReferenceName\":\"Scope1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_BreakEvenDate\"},\"Name\":\"ReservationRecommendations.x_BreakEvenDate\",\"NativeReferenceName\":\"Target\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_BreakEvenMonths\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_BreakEvenMonths)\",\"NativeReferenceName\":\"Break-even\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_SkuTermLabel\"},\"Name\":\"ReservationRecommendations.x_SkuTermLabel\",\"NativeReferenceName\":\"Term\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_BreakEvenDate\"}}}]},\"columnProperties\":{\"AutofitComboMeter.ArmSkuName\":{\"displayName\":\"Size\"},\"ReservationRecommendations.RegionName\":{\"displayName\":\"Region\"},\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\":{\"displayName\":\"Potential savings\"},\"Sum(ReservationRecommendations.x_EffectiveCostBefore)\":{\"displayName\":\"Contracted cost\"},\"Sum(ReservationRecommendations.x_RecommendedQuantity)\":{\"displayName\":\"Rec qty\"},\"ReservationRecommendations.x_CommitmentDiscountNormalizedSize\":{\"displayName\":\"Normalized size\"},\"Sum(ReservationRecommendations.x_RecommendedQuantityNormalized)\":{\"displayName\":\"Rec qty normalized\"},\"ReservationRecommendations.x_CommitmentDiscountScope\":{\"displayName\":\"Scope\"},\"ReservationRecommendations.x_CommitmentDiscountNormalizedGroup\":{\"displayName\":\"Normalized group\"},\"ReservationRecommendations.x_BreakEvenDate\":{\"displayName\":\"Target\"},\"Sum(ReservationRecommendations.x_BreakEvenMonths)\":{\"displayName\":\"Break-even\"},\"ReservationRecommendations.x_SkuTermLabel\":{\"displayName\":\"Term\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"values\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'8'\"}}}}}],\"columnHeaders\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'9'\"}}}}}],\"columnFormatting\":[{\"properties\":{\"styleTotal\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"metadata\":\"Sum(ReservationRecommendations.x_BreakEvenMonths)\"}}],\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"59.880900297176495D\"}}}},\"selector\":{\"metadata\":\"ReservationRecommendations.x_BreakEvenDate\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Recommendations based on recent usage'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"lockAspect\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"stylePreset\":[{\"properties\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Default'\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", "filters": "[]", - "height": 88.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 7000.0 + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 4000.00 }, { - "config": "{\"name\":\"0d62250399ee71a9c67b\",\"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\":\"03f15781c59d76a2e3c6\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"16fd68e32e073de06372\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"x_CommitmentDiscountSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"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\":\"'Potential savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 767.72, - "y": 0.0, - "z": 2000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 5000.00 }, { - "config": "{\"name\":\"1b5ce3bb88403a84b4a8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":576,\"y\":40.165263963274676,\"z\":8000,\"width\":40,\"height\":48,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"20pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Equals'\"}}}}}]}}}", + "config": "{\"name\":\"1c5506601ed7c6e84cd0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":888.0000000000001,\"y\":104,\"z\":2000,\"width\":376,\"height\":280,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"stackedAreaChart\",\"projections\":{\"Tooltips\":[{\"queryRef\":\"Count(Costs.ResourceId)\"}],\"Series\":[{\"queryRef\":\"Costs.x_PricingSubcategory\"}],\"Category\":[{\"queryRef\":\"Costs.x_ReportingDate\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(Costs.x_ConsumedCoreHours)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"Count(Costs.ResourceId)\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_PricingSubcategory\"},\"Name\":\"Costs.x_PricingSubcategory\",\"NativeReferenceName\":\"Pricing subcategory\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_ConsumedCoreHours\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_ConsumedCoreHours)\",\"NativeReferenceName\":\"Core hours\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_ReportingDate\"},\"Name\":\"Costs.x_ReportingDate\",\"NativeReferenceName\":\"x_ReportingDate\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_ReportingDate\"}}}]},\"columnProperties\":{\"Count(Costs.ResourceId)\":{\"displayName\":\"Resources\"},\"Sum(Costs.x_ConsumedCoreHours)\":{\"displayName\":\"Core hours\"},\"Costs.x_PricingSubcategory\":{\"displayName\":\"Pricing subcategory\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"legend\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}},\"showTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"matchLineColor\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"switchAxisPosition\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"invertAxis\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"categoryAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"reverseStackOrder\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'SavingsPlan'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'Reservation'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#990000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'OnDemand'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Committed Usage'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Committed Spend'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#990000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Standard'\"}}}}}]}}],\"seriesLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"layout\":[{\"properties\":{\"seriesOrderReversed\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'CPU hours'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", "filters": "[]", - "height": 48.0, - "width": 40.0, - "x": 576.0, - "y": 40.17, - "z": 8000.0 - }, - { - "config": "{\"name\":\"1d867760bbbbd4802991\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":3000,\"width\":568,\"height\":280,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"barChart\",\"projections\":{\"Category\":[{\"queryRef\":\"ReservationRecommendations.RegionName\",\"active\":true},{\"queryRef\":\"AutofitComboMeter.InstanceSizeFlexibilityGroup\"},{\"queryRef\":\"Costs.x_SkuMeterSubcategory\"}],\"Tooltips\":[{\"queryRef\":\"Min(Usage details.ResourceId)\"}],\"Series\":[{\"queryRef\":\"Costs.x_PricingSubcategory\"}],\"Y\":[{\"queryRef\":\"Sum(Costs.x_ConsumedCoreHours)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u1\",\"Entity\":\"Costs\",\"Type\":0},{\"Name\":\"a\",\"Entity\":\"InstanceSizeFlexibility\",\"Type\":0},{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"Min(Usage details.ResourceId)\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"x_CommitmentDiscountFlexGroup\"},\"Name\":\"AutofitComboMeter.InstanceSizeFlexibilityGroup\",\"NativeReferenceName\":\"x_CommitmentDiscountFlexGroup\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_SkuMeterSubcategory\"},\"Name\":\"Costs.x_SkuMeterSubcategory\",\"NativeReferenceName\":\"x_SkuMeterSubcategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_PricingSubcategory\"},\"Name\":\"Costs.x_PricingSubcategory\",\"NativeReferenceName\":\"x_PricingSubcategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"RegionName\"},\"Name\":\"ReservationRecommendations.RegionName\",\"NativeReferenceName\":\"RegionName\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_ConsumedCoreHours\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_ConsumedCoreHours)\",\"NativeReferenceName\":\"Core hours\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_ConsumedCoreHours\"}},\"Function\":0}}}]},\"columnProperties\":{\"AutofitComboMeter.InstanceSizeFlexibilityGroup\":{},\"Min(Usage details.ResourceId)\":{\"displayName\":\"Resources\"},\"Costs.x_SkuMeterSubcategory\":{},\"Sum(Costs.x_ConsumedCoreHours)\":{\"displayName\":\"Core hours\"},\"ReservationRecommendations.RegionName\":{}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}},\"showTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"categoryAxis\":[{\"properties\":{\"concatenateLabels\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#990000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'OnDemand'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'Reservation'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'SavingsPlan'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Committed Spend'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Committed Usage'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#990000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Standard'\"}}}}}]}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Core hours by Region > Flexibility group > Size'\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", - "filters": "[{\"name\":\"Filter5bbf86e68796256d7c90\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ResourceId\"}},\"Function\":2}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filter518024010cd4d0cb01f8\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"InstanceSizeFlexibility\"}},\"Property\":\"x_CommitmentDiscountFlexGroup\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":1},{\"name\":\"Filterd981e081967870279aa8\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"RegionName\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":2},{\"name\":\"Filter0a1e4d600032cc26630d\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterSubcategory\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":3},{\"name\":\"Filtera4540d062700d7544be8\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_UsageCPUHours\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":4},{\"name\":\"Filter12dc03cc9545a38287a1\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":5},{\"name\":\"Filter6296d6f710405678a875\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":6},{\"name\":\"Filter0e715e497049590600d7\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterSubcategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":7},{\"name\":\"Filter334808e2d2a2c1b00899\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":8},{\"name\":\"Filter0fb7b9a81c05c7d45456\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":9},{\"name\":\"Filtera8bbde2b6e76eca330b0\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"RegionName\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":10},{\"name\":\"32c40cdc8ba383c5e17d\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"ReservationRecommendations\"}},\"Property\":\"RegionName\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":11},{\"name\":\"14fd8e4e130eb343b221\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_ConsumedCoreHours\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":12}]", - "height": 280.0, - "width": 568.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 280.00, + "width": 376.00, + "x": 888.00, + "y": 104.00, + "z": 2000.00 }, { - "config": "{\"name\":\"1e3ec6778a7376d785a1\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"tabOrder\":5000}}],\"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.RateOptimization/featureName/Storage.ReservationRecommendations'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"363bee5c23ecc8ad9e51\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"1e3ec6778a7376d785a1\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"tabOrder\":5000}}],\"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/FTK$$ftkver$$/bladeName/PowerBI.RateOptimization/featureName/Storage.ReservationRecommendations'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"363bee5c23ecc8ad9e51\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"1fadc88b5b2e1da98699\",\"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\":\"03f15781c59d76a2e3c6\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 + }, + { + "config": "{\"name\":\"25096d9c422d908ad4c8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":11000,\"width\":376,\"height\":280,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"lineClusteredColumnComboChart\",\"projections\":{\"Category\":[{\"queryRef\":\"ReservationRecommendations.x_CommitmentDiscountNormalizedGroup\",\"active\":true}],\"Y2\":[{\"queryRef\":\"Sum(ReservationRecommendations.x_BreakEvenMonths)\"}],\"Y\":[{\"queryRef\":\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_BreakEvenMonths\"}},\"Function\":3},\"Name\":\"Sum(ReservationRecommendations.x_BreakEvenMonths)\",\"NativeReferenceName\":\"Break-even\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_CommitmentDiscountNormalizedGroup\"},\"Name\":\"ReservationRecommendations.x_CommitmentDiscountNormalizedGroup\",\"NativeReferenceName\":\"Normalized group\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"Reservation discount\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0}}}]},\"columnProperties\":{\"Min(Usage details.ResourceId)\":{\"displayName\":\"Resources\"},\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\":{\"displayName\":\"Reservation discount\"},\"Sum(ReservationRecommendations.x_BreakEvenMonths)\":{\"displayName\":\"Break-even\"},\"ReservationRecommendations.x_CommitmentDiscountNormalizedGroup\":{\"displayName\":\"Normalized group\"}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}},\"showTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"categoryAxis\":[{\"properties\":{\"concatenateLabels\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#990000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'OnDemand'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'Reservation'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'SavingsPlan'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Committed Spend'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Committed Usage'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#990000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Standard'\"}}}}}]}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"invertAxis\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Savings x Breakeven'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", + "filters": "[{\"name\":\"Filter518024010cd4d0cb01f8\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"InstanceSizeFlexibility\"}},\"Property\":\"x_CommitmentDiscountFlexGroup\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":1},{\"name\":\"Filterd981e081967870279aa8\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"RegionName\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":2},{\"name\":\"Filter0a1e4d600032cc26630d\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterSubcategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":3},{\"name\":\"Filtera4540d062700d7544be8\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_UsageCPUHours\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":4},{\"name\":\"Filter12dc03cc9545a38287a1\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":5},{\"name\":\"Filter713e47d0e8c260489cd9\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_UsageCPUHours\"}},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":6},{\"name\":\"Filter6296d6f710405678a875\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":7},{\"name\":\"Filter0e715e497049590600d7\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterSubcategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":8},{\"name\":\"Filter334808e2d2a2c1b00899\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":9},{\"name\":\"Filter0fb7b9a81c05c7d45456\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":10},{\"name\":\"Filtera8bbde2b6e76eca330b0\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"RegionName\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":11}]", + "height": 280.00, + "width": 376.00, + "x": 216.00, + "y": 104.00, + "z": 11000.00 + }, + { + "config": "{\"name\":\"2edfbef2c0bd8a9c4e40\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":7000,\"width\":184,\"height\":88,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(ReservationRecommendations.x_EffectiveCostBefore)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_EffectiveCostBefore\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_EffectiveCostBefore)\",\"NativeReferenceName\":\"x_EffectiveCostBefore\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_EffectiveCostBefore\"}},\"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\":\"'Current 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 }, { "config": "{\"name\":\"2ffeae04b08086740197\",\"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\":\"03f15781c59d76a2e3c6\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "config": "{\"name\":\"3124b04ec7daa005163d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":192,\"x\":0,\"y\":0,\"z\":0,\"tabOrder\":6000}}],\"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\":\"363bee5c23ecc8ad9e51\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"31540a24667c6077cb5d\",\"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\":\"03f15781c59d76a2e3c6\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { - "config": "{\"name\":\"363bee5c23ecc8ad9e51\",\"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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "config": "{\"name\":\"363bee5c23ecc8ad9e51\",\"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\":\"3dcf5eb0dbbb2554ae03\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"tabOrder\":3000}}],\"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\":\"363bee5c23ecc8ad9e51\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "config": "{\"name\":\"45997bb40808e8431b6c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":200,\"x\":0,\"y\":0,\"z\":1000,\"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\":\"363bee5c23ecc8ad9e51\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"4e1b089dbb905055a160\",\"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\":\"Reservation recommendations\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review opportunities to save with new reservations.\",\"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\":\"363bee5c23ecc8ad9e51\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"515ca0b0d900206d7a20\",\"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\":\"363bee5c23ecc8ad9e51\"}", - "height": 336.0, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 336.00, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"5f18c944560002465958\",\"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\":\"03f15781c59d76a2e3c6\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { - "config": "{\"name\":\"628e318dc26c5461ce10\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":104,\"z\":2000,\"width\":472,\"height\":280,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"stackedAreaChart\",\"projections\":{\"Tooltips\":[{\"queryRef\":\"Count(Costs.ResourceId)\"}],\"Series\":[{\"queryRef\":\"Costs.x_PricingSubcategory\"}],\"Category\":[{\"queryRef\":\"Costs.x_ReportingDate\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(Costs.x_ConsumedCoreHours)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"Count(Costs.ResourceId)\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_PricingSubcategory\"},\"Name\":\"Costs.x_PricingSubcategory\",\"NativeReferenceName\":\"Pricing subcategory\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_ConsumedCoreHours\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_ConsumedCoreHours)\",\"NativeReferenceName\":\"Core hours\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_ReportingDate\"},\"Name\":\"Costs.x_ReportingDate\",\"NativeReferenceName\":\"x_ReportingDate\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_ReportingDate\"}}}]},\"columnProperties\":{\"Count(Costs.ResourceId)\":{\"displayName\":\"Resources\"},\"Sum(Costs.x_ConsumedCoreHours)\":{\"displayName\":\"Core hours\"},\"Costs.x_PricingSubcategory\":{\"displayName\":\"Pricing subcategory\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"legend\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}},\"showTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"matchLineColor\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"switchAxisPosition\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"invertAxis\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"categoryAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"reverseStackOrder\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'SavingsPlan'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'Reservation'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#990000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'OnDemand'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Committed Usage'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Committed Spend'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#990000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Standard'\"}}}}}]}}],\"seriesLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"layout\":[{\"properties\":{\"seriesOrderReversed\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'CPU hours'\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", - "filters": "[]", - "height": 280.0, - "width": 472.0, - "x": 792.0, - "y": 104.0, - "z": 2000.0 + "config": "{\"name\":\"63fe25e1342ed5630487\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":104,\"z\":3000,\"width\":280,\"height\":280,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"barChart\",\"projections\":{\"Category\":[{\"queryRef\":\"ReservationRecommendations.RegionName\",\"active\":true},{\"queryRef\":\"AutofitComboMeter.InstanceSizeFlexibilityGroup\"},{\"queryRef\":\"Costs.x_SkuMeterSubcategory\"}],\"Tooltips\":[{\"queryRef\":\"Min(Usage details.ResourceId)\"}],\"Series\":[{\"queryRef\":\"Costs.x_PricingSubcategory\"}],\"Y\":[{\"queryRef\":\"Sum(Costs.x_ConsumedCoreHours)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u1\",\"Entity\":\"Costs\",\"Type\":0},{\"Name\":\"a\",\"Entity\":\"InstanceSizeFlexibility\",\"Type\":0},{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"Min(Usage details.ResourceId)\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"x_CommitmentDiscountFlexGroup\"},\"Name\":\"AutofitComboMeter.InstanceSizeFlexibilityGroup\",\"NativeReferenceName\":\"x_CommitmentDiscountFlexGroup\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_SkuMeterSubcategory\"},\"Name\":\"Costs.x_SkuMeterSubcategory\",\"NativeReferenceName\":\"x_SkuMeterSubcategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_PricingSubcategory\"},\"Name\":\"Costs.x_PricingSubcategory\",\"NativeReferenceName\":\"x_PricingSubcategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"RegionName\"},\"Name\":\"ReservationRecommendations.RegionName\",\"NativeReferenceName\":\"RegionName\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_ConsumedCoreHours\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_ConsumedCoreHours)\",\"NativeReferenceName\":\"Core hours\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u1\"}},\"Property\":\"x_ConsumedCoreHours\"}},\"Function\":0}}}]},\"columnProperties\":{\"AutofitComboMeter.InstanceSizeFlexibilityGroup\":{},\"Min(Usage details.ResourceId)\":{\"displayName\":\"Resources\"},\"Costs.x_SkuMeterSubcategory\":{},\"Sum(Costs.x_ConsumedCoreHours)\":{\"displayName\":\"Core hours\"},\"ReservationRecommendations.RegionName\":{}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}},\"showTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"categoryAxis\":[{\"properties\":{\"concatenateLabels\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#990000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'OnDemand'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'Reservation'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingModel\"}},\"Right\":{\"Literal\":{\"Value\":\"'SavingsPlan'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Committed Spend'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Committed Usage'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#990000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Standard'\"}}}}}]}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Core hours by Region > Flexibility group > Size'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", + "filters": "[{\"name\":\"Filter5bbf86e68796256d7c90\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ResourceId\"}},\"Function\":2}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filter518024010cd4d0cb01f8\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"InstanceSizeFlexibility\"}},\"Property\":\"x_CommitmentDiscountFlexGroup\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":1},{\"name\":\"Filterd981e081967870279aa8\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"RegionName\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":2},{\"name\":\"Filter0a1e4d600032cc26630d\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterSubcategory\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":3},{\"name\":\"Filtera4540d062700d7544be8\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_UsageCPUHours\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":4},{\"name\":\"Filter12dc03cc9545a38287a1\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":5},{\"name\":\"Filter713e47d0e8c260489cd9\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_UsageCPUHours\"}},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":6},{\"name\":\"Filter6296d6f710405678a875\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":7},{\"name\":\"Filter0e715e497049590600d7\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterSubcategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":8},{\"name\":\"Filter334808e2d2a2c1b00899\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":9},{\"name\":\"Filter0fb7b9a81c05c7d45456\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":10},{\"name\":\"Filtera8bbde2b6e76eca330b0\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"RegionName\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":11}]", + "height": 280.00, + "width": 280.00, + "x": 600.00, + "y": 104.00, + "z": 3000.00 }, { "config": "{\"name\":\"692c05aa14520751e7e0\",\"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\":\"03f15781c59d76a2e3c6\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { - "config": "{\"name\":\"6ffe33fcb34640b18cb5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":384,\"y\":40.165263963274676,\"z\":9000,\"width\":40,\"height\":48,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"−\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"20pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Minus'\"}}}}}]}}}", + "config": "{\"name\":\"6a1bd8850088a18d0e74\",\"layouts\":[{\"id\":0,\"position\":{\"x\":384,\"y\":40.165263963274676,\"z\":9000,\"width\":40,\"height\":48,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"−\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"20pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Minus'\"}}}}}]}}}", "filters": "[]", - "height": 48.0, - "width": 40.0, - "x": 384.0, + "height": 48.00, + "width": 40.00, + "x": 384.00, "y": 40.17, - "z": 9000.0 + "z": 9000.00 }, { - "config": "{\"name\":\"74356185574429d105b6\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"x_CommitmentDiscountSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"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\":\"'Potential savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", + "config": "{\"name\":\"764037ab434982ce6603\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1080,\"y\":8,\"z\":10000,\"width\":184,\"height\":88,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"ℹ️ This page requires reservation recommendations. If it does not load, confirm \",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#000000\"}},{\"value\":\"Cost Management \",\"textStyle\":{\"fontSize\":\"10.6667px\",\"color\":\"#000000\"}},{\"value\":\"exports were created.\",\"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.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 1080.00, + "y": 8.00, + "z": 10000.00 }, { "config": "{\"name\":\"76a25fde9024561e267a\",\"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\":\"03f15781c59d76a2e3c6\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { - "config": "{\"name\":\"795ce684d0e88e08678b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1080,\"y\":8,\"z\":10000,\"width\":184,\"height\":88,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"ℹ️ This page requires reservation recommendations. If it does not load, confirm \",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#000000\"}},{\"value\":\"Cost Management \",\"textStyle\":{\"fontSize\":\"10.6667px\",\"color\":\"#000000\"}},{\"value\":\"exports were created.\",\"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'\"}}}}}}}]}}}", + "config": "{\"name\":\"77f36c804183084560ea\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(ReservationRecommendations.x_EffectiveCostAfter)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_EffectiveCostAfter\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_EffectiveCostAfter)\",\"NativeReferenceName\":\"x_EffectiveCostAfter\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_EffectiveCostAfter\"}},\"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\":\"'Potential cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[]", - "height": 88.0, - "width": 184.0, - "x": 1080.0, - "y": 8.0, - "z": 10000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 6000.00 }, { "config": "{\"name\":\"85366514baa05dd2c202\",\"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\":\"03f15781c59d76a2e3c6\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "config": "{\"name\":\"859f2ea3688070a09cd4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":40,\"width\":40,\"x\":160,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"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#reservation-recommendations'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"363bee5c23ecc8ad9e51\"}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"86772856cba3202c774a\",\"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\":\"03f15781c59d76a2e3c6\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"89bafd4011b0430800e0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":167.03015946116324,\"z\":500,\"width\":200,\"height\":56,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"ReservationRecommendations.x_CommitmentDiscountScope\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_CommitmentDiscountScope\"},\"Name\":\"ReservationRecommendations.x_CommitmentDiscountScope\",\"NativeReferenceName\":\"x_CommitmentDiscountScope\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"ReservationRecommendations.x_CommitmentDiscountScope\"],\"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\":\"'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'\"}}}}}],\"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\":\"'Scope'\"}}}}}],\"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\":\"515ca0b0d900206d7a20\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, + "height": 56.00, + "width": 200.00, + "x": 0.00, "y": 167.03, - "z": 500.0 + "z": 500.00 }, { "config": "{\"name\":\"8f80b2d368e21d95c61b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":280,\"z\":0,\"width\":200,\"height\":56,\"tabOrder\":2000}}],\"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\":\"515ca0b0d900206d7a20\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 280.0, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 280.00, + "z": 0.00 }, { "config": "{\"name\":\"94b3d11b04737b362e38\",\"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\":\"03f15781c59d76a2e3c6\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"9b9f41cf86588b1859ab\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":223.0301594611632,\"z\":3000,\"width\":200,\"height\":56,\"tabOrder\":0}}],\"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\":\"515ca0b0d900206d7a20\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, + "height": 56.00, + "width": 200.00, + "x": 0.00, "y": 223.03, - "z": 3000.0 + "z": 3000.00 }, { "config": "{\"name\":\"9db9c6f022ad603bddb0\",\"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\":\"03f15781c59d76a2e3c6\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 + }, + { + "config": "{\"name\":\"9f478253d00de009c800\",\"layouts\":[{\"id\":0,\"position\":{\"x\":576,\"y\":40.165263963274676,\"z\":8000,\"width\":40,\"height\":48,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"20pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Equals'\"}}}}}]}}}", + "filters": "[]", + "height": 48.00, + "width": 40.00, + "x": 576.00, + "y": 40.17, + "z": 8000.00 }, { "config": "{\"name\":\"b0d78562528abb90681a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":111.83139402906134,\"z\":1000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"ReservationRecommendations.x_LookbackPeriodLabel\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_LookbackPeriodLabel\"},\"Name\":\"ReservationRecommendations.x_LookbackPeriodLabel\",\"NativeReferenceName\":\"x_LookbackPeriodLabel\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"ReservationRecommendations.x_LookbackPeriodLabel\"],\"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\":\"'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\":\"'Lookback'\"}}}}}],\"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\":\"515ca0b0d900206d7a20\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, + "height": 56.00, + "width": 200.00, + "x": 0.00, "y": 111.83, - "z": 1000.0 + "z": 1000.00 }, { "config": "{\"name\":\"b1f72d73b0360ad50dd5\",\"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\":\"03f15781c59d76a2e3c6\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"bd3caa6f01e3237b805c\",\"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\":\"03f15781c59d76a2e3c6\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "config": "{\"name\":\"c584470dc7e6cbaa947a\",\"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\":\"03f15781c59d76a2e3c6\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "config": "{\"name\":\"c985fb455176b807aeb7\",\"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\":\"03f15781c59d76a2e3c6\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 - }, - { - "config": "{\"name\":\"cbb3657b407680078843\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":4000,\"width\":1048,\"height\":320,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"ReservationRecommendations.x_CommitmentDiscountScope\"},{\"queryRef\":\"ReservationRecommendations.x_CommitmentDiscountNormalizedGroup\"},{\"queryRef\":\"ReservationRecommendations.RegionName\"},{\"queryRef\":\"AutofitComboMeter.ArmSkuName\"},{\"queryRef\":\"Sum(ReservationRecommendations.x_RecommendedQuantity)\"},{\"queryRef\":\"ReservationRecommendations.x_CommitmentDiscountNormalizedSize\"},{\"queryRef\":\"Sum(ReservationRecommendations.x_RecommendedQuantityNormalized)\"},{\"queryRef\":\"Sum(ReservationRecommendations.x_EffectiveCostBefore)\"},{\"queryRef\":\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"InstanceSizeFlexibility\",\"Type\":0},{\"Name\":\"r1\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"x_SkuType\"},\"Name\":\"AutofitComboMeter.ArmSkuName\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"RegionName\"},\"Name\":\"ReservationRecommendations.RegionName\",\"NativeReferenceName\":\"Region\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"Potential savings1\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_EffectiveCostBefore\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_EffectiveCostBefore)\",\"NativeReferenceName\":\"Contracted cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_RecommendedQuantity\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_RecommendedQuantity)\",\"NativeReferenceName\":\"Rec qty\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_RecommendedQuantityNormalized\"}},\"Function\":0},\"Name\":\"Sum(ReservationRecommendations.x_RecommendedQuantityNormalized)\",\"NativeReferenceName\":\"Rec qty normalized1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_CommitmentDiscountNormalizedSize\"},\"Name\":\"ReservationRecommendations.x_CommitmentDiscountNormalizedSize\",\"NativeReferenceName\":\"Normalized size1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_CommitmentDiscountNormalizedGroup\"},\"Name\":\"ReservationRecommendations.x_CommitmentDiscountNormalizedGroup\",\"NativeReferenceName\":\"Flexibility group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"x_CommitmentDiscountScope\"},\"Name\":\"ReservationRecommendations.x_CommitmentDiscountScope\",\"NativeReferenceName\":\"Scope1\"}]},\"columnProperties\":{\"AutofitComboMeter.ArmSkuName\":{\"displayName\":\"SKU\"},\"ReservationRecommendations.RegionName\":{\"displayName\":\"Region\"},\"Sum(ReservationRecommendations.x_CommitmentDiscountSavings)\":{\"displayName\":\"Potential savings\"},\"Sum(ReservationRecommendations.x_EffectiveCostBefore)\":{\"displayName\":\"Contracted cost\"},\"Sum(ReservationRecommendations.x_RecommendedQuantity)\":{\"displayName\":\"Rec qty\"},\"ReservationRecommendations.x_CommitmentDiscountNormalizedSize\":{\"displayName\":\"Normalized size\"},\"Sum(ReservationRecommendations.x_RecommendedQuantityNormalized)\":{\"displayName\":\"Rec qty normalized\"},\"ReservationRecommendations.x_CommitmentDiscountScope\":{\"displayName\":\"Scope\"},\"ReservationRecommendations.x_CommitmentDiscountNormalizedGroup\":{\"displayName\":\"Flexibility group\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"values\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'8'\"}}}}}],\"columnHeaders\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'9'\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Recommendations based on recent usage'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"lockAspect\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"stylePreset\":[{\"properties\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Default'\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", - "filters": "[]", - "height": 320.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 4000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"cf9e8f343431748ee2b0\",\"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\":\"03f15781c59d76a2e3c6\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"daa79ee1414c03530d60\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":4000}}],\"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\":\"515ca0b0d900206d7a20\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"df568fc0e9808b04142a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":55.831394029061336,\"z\":2000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"ReservationRecommendations.x_SkuTermLabel\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"ReservationRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_SkuTermLabel\"},\"Name\":\"ReservationRecommendations.x_SkuTermLabel\",\"NativeReferenceName\":\"Term\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"ReservationRecommendations.x_SkuTermLabel\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"ReservationRecommendations.x_SkuTermLabel\":{\"displayName\":\"Term\"}},\"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\":\"'Term'\"}}},\"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\":\"'Term'\"}}}}}],\"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\":\"515ca0b0d900206d7a20\"}", "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.0, - "width": 200.0, - "x": 0.0, + "height": 56.00, + "width": 200.00, + "x": 0.00, "y": 55.83, - "z": 2000.0 + "z": 2000.00 }, { "config": "{\"name\":\"e6b7ce89bd74da008910\",\"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\":\"03f15781c59d76a2e3c6\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"fb6b3ceb0558baddc88e\",\"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\":\"03f15781c59d76a2e3c6\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{\"visibility\":0,\"filterSortOrder\":3}", "displayName": "Summary", "displayOption": 1, "filters": "[{\"name\":\"Filtercf9c0cb49977d0109855\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"CostDetails\"}},\"Property\":\"ChargeCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{},\"ordinal\":0},{\"name\":\"Filter3a96ad32e00450ad17a5\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"CostDetails\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"ordinal\":1},{\"name\":\"Filter87334233b8a1ee605dae\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"CostDetails\"}},\"Property\":\"PricingCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"CostDetails\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingCategory\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Committed'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{},\"ordinal\":2}]", - "height": 720.0, + "height": 720.00, "name": "ReportSection7cfe46b7506670171eb5", "ordinal": 1, "visualContainers": [ { - "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1.0 + "config": "{\"name\":\"009e6105d67e28c44d02\",\"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\":\"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\"}", + "config": "{\"name\":\"1f8ae0f308c0ded6c305\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"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\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "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.0, - "width": 280.0, - "x": 0.0, + "height": 128.00, + "width": 280.00, + "x": 0.00, "y": 0.45, - "z": 2000.0 + "z": 2000.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.0, - "width": 32.0, + "height": 104.00, + "width": 32.00, "x": 546.81, "y": 24.43, - "z": 3000.0 + "z": 3000.00 }, { - "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\"}", + "config": "{\"name\":\"28da313c607a27354275\",\"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\":\"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.0, - "width": 144.0, - "x": 0.0, + "height": 72.00, + "width": 144.00, + "x": 0.00, "y": 26.14, - "z": 4000.0 + "z": 4000.00 }, { - "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\"}", + "config": "{\"name\":\"2a0ff85c086ac8e4ad05\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.16090108605175,\"y\":0,\"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\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.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.0, - "width": 1048.5, - "x": 214.9, + "height": 704.00, + "width": 1048.50, + "x": 214.90, "y": 8.04, - "z": 0.0 + "z": 0.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "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": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { - "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\"}", + "config": "{\"name\":\"338a7766d9c17861bc62\",\"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\":\"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.0, - "width": 144.0, - "x": 144.0, + "height": 72.00, + "width": 144.00, + "x": 144.00, "y": 26.14, - "z": 3000.0 + "z": 3000.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}}", + "config": "{\"name\":\"36360e3d7dd203594c33\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128.4519530193671,\"width\":856,\"x\":309.9997906394788,\"y\":25,\"z\":6000,\"tabOrder\":3000}}],\"singleVisualGroup\":{\"displayName\":\"Negotiated savings\",\"groupMode\":0}}", "height": 128.45, - "width": 856.0, - "x": 310.0, - "y": 25.0, - "z": 6.0 + "width": 856.00, + "x": 310.00, + "y": 25.00, + "z": 6000.00 }, { "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": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.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\"}", + "config": "{\"name\":\"3aad32a14e7a3e2a9092\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"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\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { - "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\"}", + "config": "{\"name\":\"3c98600e7eebc0575600\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":1048,\"x\":0.5037190706287902,\"y\":561.3627779549503,\"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\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 128.0, - "width": 1048.0, - "x": 0.5, + "height": 128.00, + "width": 1048.00, + "x": 0.50, "y": 561.36, - "z": 11000.0 + "z": 11000.00 }, { - "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}}", + "config": "{\"name\":\"41bb34c83eb70689dbd9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128.45195301936707,\"width\":856,\"x\":309.9997906394788,\"y\":296,\"z\":4000,\"tabOrder\":2000}}],\"singleVisualGroup\":{\"displayName\":\"Total savings\",\"groupMode\":0}}", "height": 128.45, - "width": 856.0, - "x": 310.0, - "y": 296.0, - "z": 4.0 + "width": 856.00, + "x": 310.00, + "y": 296.00, + "z": 4000.00 }, { "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": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "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": 128.0, - "width": 280.0, - "x": 288.0, + "height": 128.00, + "width": 280.00, + "x": 288.00, "y": 0.03, - "z": 1000.0 + "z": 1000.00 }, { "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.0, - "width": 32.0, - "x": 282.0, + "height": 104.00, + "width": 32.00, + "x": 282.00, "y": 21.95, - "z": 4000.0 + "z": 4000.00 }, { "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.0, - "width": 280.0, - "x": 576.0, - "y": 0.0, - "z": 0.0 + "height": 128.00, + "width": 280.00, + "x": 576.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { - "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\"}", + "config": "{\"name\":\"50c46f7995c30607aa9a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.09723210130613325,\"y\":424.00000000000006,\"z\":12000,\"width\":1048,\"height\":128,\"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\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 128.0, - "width": 1048.0, - "x": 0.1, - "y": 424.0, - "z": 12000.0 + "height": 128.00, + "width": 1048.00, + "x": 0.10, + "y": 424.00, + "z": 12000.00 }, { "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": 104.0, - "width": 40.0, + "height": 104.00, + "width": 40.00, "x": 265.37, "y": 25.73, - "z": 4000.0 + "z": 4000.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.0, - "width": 280.0, - "x": 0.0, + "height": 128.00, + "width": 280.00, + "x": 0.00, "y": 0.45, - "z": 2000.0 + "z": 2000.00 }, { "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.0, - "width": 280.0, - "x": 288.0, + "height": 128.00, + "width": 280.00, + "x": 288.00, "y": 0.03, - "z": 1000.0 + "z": 1000.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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "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.0, - "width": 280.0, - "x": 0.0, - "y": 0.0, - "z": 2000.0 + "height": 128.00, + "width": 280.00, + "x": 0.00, + "y": 0.00, + "z": 2000.00 }, { "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.0, - "width": 280.0, - "x": 288.0, + "height": 128.00, + "width": 280.00, + "x": 288.00, "y": 0.03, - "z": 1000.0 + "z": 1000.00 }, { "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.0, - "width": 32.0, + "height": 104.00, + "width": 32.00, "x": 546.32, "y": 25.73, - "z": 3000.0 + "z": 3000.00 }, { - "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\"}", + "config": "{\"name\":\"719b78fe757bbc02b443\",\"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\":\"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.0, - "width": 144.0, + "height": 72.00, + "width": 144.00, "x": 432.01, "y": 26.14, - "z": 1000.0 + "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\"}", + "config": "{\"name\":\"767db0e25480cc731980\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.79019316682974,\"y\":0,\"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\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { - "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\"}", + "config": "{\"name\":\"7d7c7f047c65c4a154c5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"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\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "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": 128.0, - "width": 280.0, - "x": 0.0, + "height": 128.00, + "width": 280.00, + "x": 0.00, "y": 0.45, - "z": 2000.0 + "z": 2000.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.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { - "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\"}", + "config": "{\"name\":\"812ef05010bd941c44a0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"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\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 40.0, + "height": 104.00, + "width": 40.00, "x": 263.18, "y": 23.09, - "z": 4000.0 + "z": 4000.00 }, { - "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\"}", + "config": "{\"name\":\"870a460c73a7869568b1\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":191.99999999999994,\"y\":0,\"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\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { - "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\"}", + "config": "{\"name\":\"9816a747e27c7be0c83e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.09723210130613325,\"y\":288,\"z\":13000,\"width\":1048,\"height\":128,\"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\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 128.0, - "width": 1048.0, - "x": 0.1, - "y": 288.0, - "z": 13000.0 + "height": 128.00, + "width": 1048.00, + "x": 0.10, + "y": 288.00, + "z": 13000.00 }, { "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": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "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": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.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\"}", + "config": "{\"name\":\"a01bbd4b245c08278318\",\"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\":\"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.0, - "width": 144.0, + "height": 72.00, + "width": 144.00, "x": 288.01, "y": 26.14, - "z": 2000.0 + "z": 2000.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}}", + "config": "{\"name\":\"a0d546007014d8050140\",\"layouts\":[{\"id\":0,\"position\":{\"height\":129.73278444981557,\"width\":856,\"x\":309.9997906394788,\"y\":161,\"z\":5000,\"tabOrder\":5000}}],\"singleVisualGroup\":{\"displayName\":\"CD savings\",\"groupMode\":0}}", "height": 129.73, - "width": 856.0, - "x": 310.0, - "y": 161.0, - "z": 5.0 + "width": 856.00, + "x": 310.00, + "y": 161.00, + "z": 5000.00 }, { - "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\"}", + "config": "{\"name\":\"a13dbb58c3029c760c80\",\"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\":\"b58ed9f3b0b838274060\"}", "filters": "[]", - "height": 48.0, - "width": 32.0, + "height": 48.00, + "width": 32.00, "x": 128.17, - "y": 35.0, - "z": 7000.0 + "y": 35.00, + "z": 7000.00 }, { "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": 104.0, - "width": 32.0, + "height": 104.00, + "width": 32.00, "x": 543.45, "y": 22.77, - "z": 3000.0 + "z": 3000.00 }, { - "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.0, - "width": 856.0, + "config": "{\"name\":\"a7cf32283b0b200e067e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":856,\"x\":310.82883888120926,\"y\":570,\"z\":2000,\"tabOrder\":4000}}],\"singleVisualGroup\":{\"displayName\":\"ESR\",\"groupMode\":0}}", + "height": 128.00, + "width": 856.00, "x": 310.83, - "y": 570.0, - "z": 2.0 + "y": 570.00, + "z": 2000.00 }, { - "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\"}", + "config": "{\"name\":\"a97dde3ce88c3cabcb83\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"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\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.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.RateOptimization/featureName/KQL.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.RateOptimization/featureName/KQL.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.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "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.0, - "width": 32.0, + "height": 104.00, + "width": 32.00, "x": 544.39, "y": 23.09, - "z": 3000.0 + "z": 3000.00 }, { - "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\"}", + "config": "{\"name\":\"b4dede9ad6cd6e63a026\",\"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\":\"b58ed9f3b0b838274060\"}", "filters": "[]", - "height": 48.0, - "width": 32.0, + "height": 48.00, + "width": 32.00, "x": 270.31, - "y": 35.0, - "z": 6000.0 + "y": 35.00, + "z": 6000.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}}", + "config": "{\"name\":\"b58ed9f3b0b838274060\",\"layouts\":[{\"id\":0,\"position\":{\"height\":98.13518601364285,\"width\":576.0069720119875,\"x\":448.00010909577645,\"y\":432.290100200993,\"z\":3000,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"CD breakdown\",\"groupMode\":0}}", "height": 98.14, "width": 576.01, - "x": 448.0, + "x": 448.00, "y": 432.29, - "z": 3.0 + "z": 3000.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.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { - "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\"}", + "config": "{\"name\":\"bb768bce296450176e5c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":1048,\"x\":0.09723210130613325,\"y\":17.33768643411181,\"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\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 128.0, - "width": 1048.0, - "x": 0.1, + "height": 128.00, + "width": 1048.00, + "x": 0.10, "y": 17.34, - "z": 15000.0 + "z": 15000.00 }, { - "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\"}", + "config": "{\"name\":\"c0471a3b9204997a3937\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.97554712644086,\"y\":0,\"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\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "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": 128.0, - "width": 280.0, - "x": 576.0, - "y": 0.0, - "z": 0.0 + "height": 128.00, + "width": 280.00, + "x": 576.00, + "y": 0.00, + "z": 0.00 }, { "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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "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\"}", + "config": "{\"name\":\"d783fb64c3602e964c6d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":95.99999999999994,\"y\":0,\"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\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { - "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\"}", + "config": "{\"name\":\"da82acac030976aadeb5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"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\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "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": 128.0, - "width": 280.0, - "x": 576.0, - "y": 0.0, - "z": 0.0 + "height": 128.00, + "width": 280.00, + "x": 576.00, + "y": 0.00, + "z": 0.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\"}", + "config": "{\"name\":\"dc7d218c094576a75471\",\"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\":\"b58ed9f3b0b838274060\"}", "filters": "[]", - "height": 32.0, - "width": 224.0, + "height": 32.00, + "width": 224.00, "x": 175.99, - "y": 0.0, - "z": 8000.0 + "y": 0.00, + "z": 8000.00 }, { "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.0, - "width": 280.0, - "x": 288.0, - "y": 0.0, - "z": 1000.0 + "height": 128.00, + "width": 280.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\"}", + "config": "{\"name\":\"e61fe1b0ebb807a7b421\",\"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\":\"b58ed9f3b0b838274060\"}", "filters": "[]", - "height": 48.0, - "width": 32.0, + "height": 48.00, + "width": 32.00, "x": 416.01, "y": 34.14, - "z": 5000.0 + "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\"}", + "config": "{\"name\":\"ec7a213c03265eaba34a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":1048,\"x\":0.09723210130613325,\"y\":153.36277795495022,\"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\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 128.0, - "width": 1048.0, - "x": 0.1, + "height": 128.00, + "width": 1048.00, + "x": 0.10, "y": 153.36, - "z": 14000.0 + "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\"}", + "config": "{\"name\":\"f2071cb8990354e77232\",\"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\":\"b58ed9f3b0b838274060\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 48.0, - "width": 496.0, + "height": 48.00, + "width": 496.00, "x": 32.17, - "y": 13.0, - "z": 0.0 + "y": 13.00, + "z": 0.00 }, { "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.0, - "width": 40.0, + "height": 104.00, + "width": 40.00, "x": 265.86, "y": 24.43, - "z": 4000.0 + "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.0, - "width": 280.0, - "x": 576.0, - "y": 0.0, - "z": 0.0 + "height": 128.00, + "width": 280.00, + "x": 576.00, + "y": 0.00, + "z": 0.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{\"filterSortOrder\":3}", "displayName": "Commitment savings", "displayOption": 1, "filters": "[{\"name\":\"b69b3b11775ab9b3b4e8\",\"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\":{},\"ordinal\":0},{\"name\":\"4ad268ea4d0e6a011668\",\"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\":{},\"ordinal\":1}]", - "height": 720.0, + "height": 720.00, "name": "ReportSection7e6c4580ee0b342bf135", "ordinal": 3, "visualContainers": [ { - "config": "{\"name\":\"0a7a71b6467007719092\",\"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\":\"628012427ae052ede002\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"051bc2b026c0c06b029b\",\"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\":\"c8680f2e1a31869003d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 382.98, - "y": 0.0, - "z": 6000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { - "config": "{\"name\":\"0af8c1820b66d37350ab\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":6000,\"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\"}}}}}]}}}", + "config": "{\"name\":\"069eeaac0227705e09b1\",\"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\":\"c8680f2e1a31869003d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 6000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { - "config": "{\"name\":\"18762399d760ccc00420\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":0}}],\"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\":\"e62e2272874b8912ee9d\"}", + "config": "{\"name\":\"14783df95e9461b373c8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":192,\"x\":0,\"y\":0,\"z\":5000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Commitment \",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"discount savings\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review cost savings from reservation and savings plan usage.\",\"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\":\"bb94441502100400c1ee\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { - "config": "{\"name\":\"2a82e5c3475e98e50070\",\"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\":\"628012427ae052ede002\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"1774633de2ab5467c300\",\"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\":\"c8680f2e1a31869003d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { - "config": "{\"name\":\"30e231bdbb4738db3a97\",\"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\":\"628012427ae052ede002\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"17ac37110eaec3ea3406\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":4000}}],\"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\":\"888f3e27cd5d1eca0001\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 575.35, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { - "config": "{\"name\":\"3a8ee8a0985900964e32\",\"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\":\"628012427ae052ede002\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"1bb6674979561c0034ed\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1080,\"y\":8,\"z\":10000,\"width\":184,\"height\":88,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"ℹ️ If you see 0 savings export prices from Cost Management and enable the Populate Missing Prices parameter.\",\"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.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 184.00, + "x": 1080.00, + "y": 8.00, + "z": 10000.00 }, { - "config": "{\"name\":\"44449b62ad52ecec4535\",\"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\":\"628012427ae052ede002\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"1c8bb4e8e64e06a38008\",\"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\":\"c8680f2e1a31869003d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 671.53, + "y": 0.00, + "z": 3000.00 }, { - "config": "{\"name\":\"45cd0fc33b750b8e0ab5\",\"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\":\"628012427ae052ede002\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"2446c37a169a5457028b\",\"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\":\"c8680f2e1a31869003d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 286.79, - "y": 0.0, - "z": 7000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { - "config": "{\"name\":\"492a0c0a430224d3536e\",\"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\":\"628012427ae052ede002\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"27fd47019574d7a6d326\",\"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\":\"c8680f2e1a31869003d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 704.00, + "width": 88.00, + "x": 767.72, + "y": 0.00, + "z": 2000.00 }, { - "config": "{\"name\":\"4e6c0c405b2d8c70524e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":200,\"x\":0,\"y\":0,\"z\":1000,\"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\":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\":\"74ff3b1c6c52275e579e\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"2ef527b0e4eb23ae545c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":7000,\"width\":184,\"height\":88,\"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\":\"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\":\"'Contracted cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 7000.00 }, { - "config": "{\"name\":\"54f5687d083120681686\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":392,\"z\":2000,\"width\":1048,\"height\":320,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.CommitmentDiscountName\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.x_CommitmentDiscountMeterCategory\"},{\"queryRef\":\"Costs.x_CommitmentDiscountMeterSubcategory\"},{\"queryRef\":\"Costs.ResourceId\"},{\"queryRef\":\"Sum(Costs.ConsumedQuantity)\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.x_CommitmentDiscountSavings)\"}]},\"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\":\"Commitment\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ConsumedQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.ConsumedQuantity)\",\"NativeReferenceName\":\"Quantity\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"Contracted\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"Costs.ResourceId\",\"NativeReferenceName\":\"Resources\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"Savings\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountMeterCategory\"},\"Name\":\"Costs.x_CommitmentDiscountMeterCategory\",\"NativeReferenceName\":\"Meter category\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountMeterSubcategory\"},\"Name\":\"Costs.x_CommitmentDiscountMeterSubcategory\",\"NativeReferenceName\":\"Meter subcategory\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0}}}]},\"columnProperties\":{\"Costs.CommitmentDiscountName\":{\"displayName\":\"Commitment\"},\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"Sum(Costs.ContractedCost)\":{\"displayName\":\"Contracted\"},\"Sum(Costs.ConsumedQuantity)\":{\"displayName\":\"Quantity\"},\"Costs.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"Costs.ResourceId\":{\"displayName\":\"Resources\"},\"Sum(Costs.x_CommitmentDiscountSavings)\":{\"displayName\":\"Savings\"},\"Costs.x_CommitmentDiscountMeterCategory\":{\"displayName\":\"Meter category\"},\"Costs.x_CommitmentDiscountMeterSubcategory\":{\"displayName\":\"Meter subcategory\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"315.93897606987025D\"}}}},\"selector\":{\"metadata\":\"Costs.CommitmentDiscountName\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"134.50753303548237D\"}}}},\"selector\":{\"metadata\":\"Costs.x_CommitmentDiscountMeterCategory\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"129.75384967042055D\"}}}},\"selector\":{\"metadata\":\"Costs.x_CommitmentDiscountMeterSubcategory\"}}],\"values\":[{\"properties\":{\"wordWrap\":{\"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\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", + "config": "{\"name\":\"30845e5e53121bed4384\",\"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\":\"c8680f2e1a31869003d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 320.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 704.00, + "width": 88.00, + "x": 286.79, + "y": 0.00, + "z": 7000.00 }, { - "config": "{\"name\":\"55325670071aa377bdcc\",\"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\":\"628012427ae052ede002\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"372b08f903984e3d0c0e\",\"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\":\"c8680f2e1a31869003d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 671.53, - "y": 0.0, - "z": 3000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { - "config": "{\"name\":\"5953dab57990ae219511\",\"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\":\"628012427ae052ede002\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"3dce0cc05cec477a3902\",\"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\":\"c8680f2e1a31869003d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { - "config": "{\"name\":\"628012427ae052ede002\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.39572239294395,\"y\":8.005493854933814,\"z\":0,\"tabOrder\":8000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, - "width": 1048.09, - "x": 215.4, - "y": 8.01, - "z": 0.0 + "config": "{\"name\":\"3e189cb52191ee9a2a6c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":3000,\"width\":1048,\"height\":280,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.x_ReportingDate\",\"active\":true}],\"Series\":[{\"queryRef\":\"Costs.CommitmentDiscountType\"}],\"Y\":[{\"queryRef\":\"Sum(Costs.x_CommitmentDiscountSavings)\"}]},\"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\":\"x_ReportingDate\"},\"Name\":\"Costs.x_ReportingDate\",\"NativeReferenceName\":\"x_ReportingDate\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"Commitment savings\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"}}}]},\"columnProperties\":{\"Sum(Costs.x_CommitmentDiscountSavings)\":{\"displayName\":\"Commitment savings\"},\"Costs.CommitmentDiscountType\":{\"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'\"}}},\"showTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"zoom\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountProgram\"}},\"Right\":{\"Literal\":{\"Value\":\"'Reservation'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountProgram\"}},\"Right\":{\"Literal\":{\"Value\":\"'Savings plan'\"}}}}}]}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount savings'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}", + "filters": "[]", + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { - "config": "{\"name\":\"649f5d7d5383563b36b2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":8,\"z\":4000,\"width\":176,\"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\":\"'Commitment ESR'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Default'\"}}}}}]}}}", + "config": "{\"name\":\"3e46763bde293c4e792a\",\"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\":\"888f3e27cd5d1eca0001\"}", "filters": "[]", - "height": 88.0, - "width": 176.0, - "x": 792.0, - "y": 8.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { - "config": "{\"name\":\"67988cbf6d60c4637453\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":2000}}],\"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\":\"e62e2272874b8912ee9d\"}", + "config": "{\"name\":\"3f10ea3564d740ad2e7b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":8,\"z\":4000,\"width\":176,\"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\":\"'Commitment 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": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 88.00, + "width": 176.00, + "x": 792.00, + "y": 8.00, + "z": 4000.00 }, { - "config": "{\"name\":\"67d684da0848b36c43e7\",\"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\":\"74ff3b1c6c52275e579e\"}", + "config": "{\"name\":\"44e4d7304c726c9a6a27\",\"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\":\"c8680f2e1a31869003d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 88.00, + "width": 1048.00, + "x": 0.01, + "y": 383.90, + "z": 13000.00 }, { - "config": "{\"name\":\"6a95dead80980467346e\",\"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\":\"628012427ae052ede002\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"44f4b46b8174d06db300\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK$$ftkver$$/bladeName/PowerBI.RateOptimization/featureName/Storage.CommitmentDiscountSavings'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"bb94441502100400c1ee\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 767.72, - "y": 0.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { - "config": "{\"name\":\"6fd1ab3d0b5199cd50ab\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":4000}}],\"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\":\"e62e2272874b8912ee9d\"}", + "config": "{\"name\":\"54ac176da606d2770e9e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":392,\"z\":2000,\"width\":1048,\"height\":320,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.CommitmentDiscountName\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.x_CommitmentDiscountMeterCategory1\"},{\"queryRef\":\"Costs.x_CommitmentDiscountMeterSubcategory1\"},{\"queryRef\":\"Costs.ResourceId\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.x_CommitmentDiscountSavings)\"},{\"queryRef\":\"Costs.x_EffectiveSavingsRate\"}]},\"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\":\"Commitment\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"Contracted cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"Costs.ResourceId\",\"NativeReferenceName\":\"Resources\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"Savings\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveSavingsRate\"},\"Name\":\"Costs.x_EffectiveSavingsRate\",\"NativeReferenceName\":\"ESR\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountMeterCategory\"},\"Name\":\"Costs.x_CommitmentDiscountMeterCategory1\",\"NativeReferenceName\":\"Meter category\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountMeterSubcategory\"},\"Name\":\"Costs.x_CommitmentDiscountMeterSubcategory1\",\"NativeReferenceName\":\"Meter subcategory\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0}}}]},\"columnProperties\":{\"Costs.CommitmentDiscountName\":{\"displayName\":\"Commitment\"},\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"Sum(Costs.ContractedCost)\":{\"displayName\":\"Contracted cost\"},\"Costs.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"Costs.ResourceId\":{\"displayName\":\"Resources\"},\"Sum(Costs.x_CommitmentDiscountSavings)\":{\"displayName\":\"Savings\"},\"Costs.x_EffectiveSavingsRate\":{\"displayName\":\"ESR\"},\"Costs.x_CommitmentDiscountMeterCategory1\":{\"displayName\":\"Meter category\"},\"Costs.x_CommitmentDiscountMeterSubcategory1\":{\"displayName\":\"Meter subcategory\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"278.55073384258395D\"}}}},\"selector\":{\"metadata\":\"Costs.CommitmentDiscountName\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"143.26869590450173D\"}}}},\"selector\":{\"metadata\":\"Costs.x_CommitmentDiscountMeterCategory1\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"136.52239560720403D\"}}}},\"selector\":{\"metadata\":\"Costs.x_CommitmentDiscountMeterSubcategory1\"}}],\"values\":[{\"properties\":{\"wordWrap\":{\"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\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 }, { - "config": "{\"name\":\"733c4beda6dc8070ba44\",\"layouts\":[{\"id\":0,\"position\":{\"x\":384,\"y\":48,\"z\":9000,\"width\":40,\"height\":48,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"−\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"20pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Minus'\"}}}}}]}}}", + "config": "{\"name\":\"6490caf8ab9bb17e1608\",\"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\":\"bb94441502100400c1ee\"}", "filters": "[]", - "height": 48.0, - "width": 40.0, - "x": 384.0, - "y": 48.0, - "z": 9000.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { - "config": "{\"name\":\"749a545d83109114e496\",\"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\":\"628012427ae052ede002\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"675145ab26018c6d06c3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":40,\"width\":40,\"x\":160,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"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#commitment-discount-savings'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"bb94441502100400c1ee\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 960.09, - "y": 0.0, - "z": 0.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { - "config": "{\"name\":\"74ff3b1c6c52275e579e\",\"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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "config": "{\"name\":\"708b9ca900d24bac7425\",\"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\":\"bb94441502100400c1ee\",\"howCreated\":\"InsertVisualButton\"}", + "filters": "[]", + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { - "config": "{\"name\":\"7811169be96c25412918\",\"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\":\"628012427ae052ede002\",\"howCreated\":\"InsertVisualButton\"}", - "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 479.16, - "y": 0.0, - "z": 5000.0 + "config": "{\"name\":\"888f3e27cd5d1eca0001\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"bb94441502100400c1ee\"}", + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { - "config": "{\"name\":\"8be8bfef977000c09575\",\"layouts\":[{\"id\":0,\"position\":{\"x\":576,\"y\":48,\"z\":8000,\"width\":40,\"height\":48,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"20pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Equals'\"}}}}}]}}}", + "config": "{\"name\":\"8c5901900c8443b22aa3\",\"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\":\"c8680f2e1a31869003d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 48.0, - "width": 40.0, - "x": 576.0, - "y": 48.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { - "config": "{\"name\":\"8e1176d6cc28e60cb050\",\"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\":\"628012427ae052ede002\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"8ebd685634932010e458\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":3000}}],\"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\":\"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\":\"'Commitment savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 5000.00 }, { - "config": "{\"name\":\"a854e556a8128e602e90\",\"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\":\"74ff3b1c6c52275e579e\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"90f734142a946ecccd8b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":2000}}],\"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\":\"888f3e27cd5d1eca0001\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { - "config": "{\"name\":\"b4faac65d567280e1073\",\"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\":\"628012427ae052ede002\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"9659c846d4d7107c9786\",\"layouts\":[{\"id\":0,\"position\":{\"x\":576,\"y\":40.39591545419347,\"z\":8000,\"width\":40,\"height\":48,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"20pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Equals'\"}}}}}]}}}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.01, - "y": 383.9, - "z": 13000.0 + "height": 48.00, + "width": 40.00, + "x": 576.00, + "y": 40.40, + "z": 8000.00 }, { - "config": "{\"name\":\"b900677d7e0305b2e049\",\"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\":\"628012427ae052ede002\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"9734119325bc8e8c4781\",\"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\":\"c8680f2e1a31869003d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.01, - "y": 479.9, - "z": 12000.0 + "height": 704.00, + "width": 88.00, + "x": 960.09, + "y": 0.00, + "z": 0.00 }, { - "config": "{\"name\":\"c63743d1b0068a600597\",\"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\":\"e62e2272874b8912ee9d\"}", - "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "config": "{\"name\":\"a28984521d274a7646d3\",\"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\":\"c8680f2e1a31869003d1\",\"howCreated\":\"InsertVisualButton\"}", + "filters": "[]", + "height": 704.00, + "width": 88.00, + "x": 575.35, + "y": 0.00, + "z": 4000.00 }, { - "config": "{\"name\":\"c658a4fc18ee466ec434\",\"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\":\"e62e2272874b8912ee9d\"}", + "config": "{\"name\":\"b2066b69c4760c2632ce\",\"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\":\"c8680f2e1a31869003d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.01, + "y": 479.90, + "z": 12000.00 }, { - "config": "{\"name\":\"c8697af0039dc43ee419\",\"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\":\"628012427ae052ede002\",\"howCreated\":\"InsertVisualButton\"}", - "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "config": "{\"name\":\"bb94441502100400c1ee\",\"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 }, { - "config": "{\"name\":\"c9bafff9b9b96ab0c7b1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":3000,\"width\":1048,\"height\":280,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.x_ReportingDate\",\"active\":true}],\"Series\":[{\"queryRef\":\"Costs.CommitmentDiscountType\"}],\"Y\":[{\"queryRef\":\"Sum(Costs.x_CommitmentDiscountSavings)\"}]},\"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\":\"x_ReportingDate\"},\"Name\":\"Costs.x_ReportingDate\",\"NativeReferenceName\":\"x_ReportingDate\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"Commitment savings\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"}}}]},\"columnProperties\":{\"Sum(Costs.x_CommitmentDiscountSavings)\":{\"displayName\":\"Commitment savings\"},\"Costs.CommitmentDiscountType\":{\"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'\"}}},\"showTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"zoom\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountProgram\"}},\"Right\":{\"Literal\":{\"Value\":\"'Reservation'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#000099'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountProgram\"}},\"Right\":{\"Literal\":{\"Value\":\"'Savings plan'\"}}}}}]}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount savings'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", + "config": "{\"name\":\"bd74bbea6233109b98b2\",\"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\":\"c8680f2e1a31869003d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 280.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 704.00, + "width": 88.00, + "x": 382.98, + "y": 0.00, + "z": 6000.00 }, { - "config": "{\"name\":\"ca89ceec003088bca9d3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.RateOptimization/featureName/Storage.CommitmentDiscountSavings'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"74ff3b1c6c52275e579e\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"c03ed177c97a0b1381d0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":200,\"x\":0,\"y\":0,\"z\":1000,\"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\":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\":\"bb94441502100400c1ee\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { - "config": "{\"name\":\"dca7b1b5a0ea01315414\",\"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\":\"628012427ae052ede002\",\"howCreated\":\"InsertVisualButton\"}", - "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "config": "{\"name\":\"c1bce4fe0ead2bdb6e96\",\"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\":\"888f3e27cd5d1eca0001\"}", + "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\":\"df0f488ccc9711ac2683\",\"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\":\"628012427ae052ede002\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"c3a88f918e2167390759\",\"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\":\"c8680f2e1a31869003d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { - "config": "{\"name\":\"e62e2272874b8912ee9d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"74ff3b1c6c52275e579e\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "config": "{\"name\":\"c583879b90b554439798\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":6000,\"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": 408.00, + "y": 8.00, + "z": 6000.00 }, { - "config": "{\"name\":\"e9ac54464a0ee60940a5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":3000}}],\"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\":\"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\":\"'Commitment savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", + "config": "{\"name\":\"c86421e10b0eba2d8a9e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":0}}],\"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\":\"888f3e27cd5d1eca0001\"}", "filters": "[]", - "height": 88.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 5000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { - "config": "{\"name\":\"ee776b92b6150eb42a26\",\"layouts\":[{\"id\":0,\"position\":{\"height\":40,\"width\":40,\"x\":160,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"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#commitment-discount-savings'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"74ff3b1c6c52275e579e\"}", - "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "config": "{\"name\":\"c8680f2e1a31869003d1\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.39572239294395,\"y\":8.005493854933814,\"z\":0,\"tabOrder\":9000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", + "height": 704.00, + "width": 1048.09, + "x": 215.40, + "y": 8.01, + "z": 0.00 }, { - "config": "{\"name\":\"f11f453fc170cb29450c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1080,\"y\":8,\"z\":10000,\"width\":184,\"height\":88,\"tabOrder\":17001}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"ℹ️ If you see 0 savings for reservations, export prices from Cost Management and enable the \",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#000000\"}},{\"value\":\"Add Missing Prices\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"8pt\"}},{\"value\":\" parameter\",\"textStyle\":{\"fontSize\":\"8pt\"}},{\"value\":\".\",\"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'\"}}}}}}}]}}}", + "config": "{\"name\":\"de1545399ab552517cd3\",\"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\":\"c8680f2e1a31869003d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 184.0, - "x": 1080.0, - "y": 8.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 479.16, + "y": 0.00, + "z": 5000.00 }, { - "config": "{\"name\":\"f4da4cd5cab20200d753\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":192,\"x\":0,\"y\":0,\"z\":5000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Commitment \",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"discount savings\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review cost savings from reservation and savings plan usage.\",\"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\":\"74ff3b1c6c52275e579e\"}", + "config": "{\"name\":\"df0c1ecc25bce5a74ed1\",\"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\":\"c8680f2e1a31869003d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { - "config": "{\"name\":\"f90151850970a37ec166\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":7000,\"width\":184,\"height\":88,\"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\":\"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\":\"'Contracted cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", + "config": "{\"name\":\"fee3ffb1c20b2d70d73a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":384,\"y\":40.39591545419347,\"z\":9000,\"width\":48,\"height\":48,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"−\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"20pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Minus'\"}}}}}]}}}", "filters": "[]", - "height": 88.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 7000.0 + "height": 48.00, + "width": 48.00, + "x": 384.00, + "y": 40.40, + "z": 9000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{\"filterSortOrder\":3}", "displayName": "Chargeback", "displayOption": 1, "filters": "[{\"name\":\"Filter8589aeaa9f96c95550d4\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"CMConnector\"}},\"Property\":\"CommitmentDiscountId\"}},\"type\":\"Categorical\",\"howCreated\":1,\"ordinal\":0},{\"name\":\"d77750673c2987abd830\",\"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\":{},\"ordinal\":1},{\"name\":\"005e6c4d5dc9b8ccb4c5\",\"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\":{},\"ordinal\":2}]", - "height": 720.0, + "height": 720.00, "name": "ReportSectionb4553e12c2cd5e230209", "ordinal": 5, "visualContainers": [ { "config": "{\"name\":\"01b4258febeb7c9cb962\",\"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\":\"d8a5b4e0509a63b34588\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"05e1de9aa5536dc0a216\",\"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\":\"d8a5b4e0509a63b34588\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { - "config": "{\"name\":\"08f026b0c0533a204904\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.RateOptimization/featureName/Storage.Chargeback'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"10e188d0c0d700123e0a\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"08f026b0c0533a204904\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK$$ftkver$$/bladeName/PowerBI.RateOptimization/featureName/Storage.Chargeback'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"10e188d0c0d700123e0a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"10e188d0c0d700123e0a\",\"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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"1d48a841045062d34b84\",\"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\":\"d8a5b4e0509a63b34588\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "config": "{\"name\":\"1fef8fdaa23b26733dcb\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":3000,\"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.SubAccountName\"}]},\"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\":\"SubAccountName\"},\"Name\":\"Costs.SubAccountName\",\"NativeReferenceName\":\"Subscription\"},{\"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\"}}}]},\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"Costs.SubAccountName\":{\"displayName\":\"Subscription\"}},\"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\":\"'#990000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"SubscriptionName\"}},\"Right\":{\"Literal\":{\"Value\":\"'Unassigned'\"}}}}}]}}],\"layout\":[{\"properties\":{\"seriesOrderReversed\":{\"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": 280.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { "config": "{\"name\":\"32b73ab5be5d1130589b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":4000}}],\"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\":\"e9c1fab0432ce64aa3ba\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"3c7987aa97a8006a1371\",\"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\":\"d8a5b4e0509a63b34588\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "config": "{\"name\":\"415ffa9ca26be16e30e9\",\"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\":\"d8a5b4e0509a63b34588\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"4d851aa2350005b8a000\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":3000}}],\"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.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 5000.00 }, { "config": "{\"name\":\"4ebbac91b0eed7eeacdb\",\"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\":\"e9c1fab0432ce64aa3ba\"}", "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "config": "{\"name\":\"4f58bde1051e8b35ccdd\",\"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\":\"d8a5b4e0509a63b34588\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "config": "{\"name\":\"576150e6c7cc66066624\",\"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\":\"d8a5b4e0509a63b34588\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "config": "{\"name\":\"742b6fde2579b944a9aa\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":7000,\"width\":184,\"height\":88,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_CommitmentDiscountUtilization\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_CommitmentDiscountUtilization\"},\"Name\":\"Costs.x_CommitmentDiscountUtilization\",\"NativeReferenceName\":\"x_CommitmentDiscountUtilization\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_CommitmentDiscountUtilization\"}}}]},\"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\":\"'Utilization'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[]", - "height": 88.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 7000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 7000.00 }, { "config": "{\"name\":\"7bf750dc1a7196502b80\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":200,\"x\":0,\"y\":0,\"z\":1000,\"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\":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\":\"10e188d0c0d700123e0a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"94ae02be97b276807745\",\"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\":\"d8a5b4e0509a63b34588\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "config": "{\"name\":\"94fff8ce840218ee1593\",\"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\":\"10e188d0c0d700123e0a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "config": "{\"name\":\"9d0ed700527a153016c1\",\"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\":\"d8a5b4e0509a63b34588\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"a2dd005a63506adec7c2\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":0}}],\"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\":\"e9c1fab0432ce64aa3ba\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "config": "{\"name\":\"a5a4510c8091e3ba38dc\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":192,\"x\":0,\"y\":0,\"z\":5000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Chargeback\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Break effective (amortized) cost down by subscription and resource group for 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\":\"10e188d0c0d700123e0a\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"a6acf474de411569d000\",\"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\":\"d8a5b4e0509a63b34588\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"ac82dfd3008d4a34a5e4\",\"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\":\"e9c1fab0432ce64aa3ba\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "config": "{\"name\":\"ad14253fd110ab41c64e\",\"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\":\"d8a5b4e0509a63b34588\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "config": "{\"name\":\"aef9f0047e6700e382d0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"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\":\"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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 6000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 6000.00 }, { "config": "{\"name\":\"afda29a04651e1020700\",\"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\":\"d8a5b4e0509a63b34588\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"b23df69d1dedaa2d2b54\",\"layouts\":[{\"id\":0,\"position\":{\"height\":40,\"width\":40,\"x\":160,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"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#chargeback'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"10e188d0c0d700123e0a\"}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"be523427a99028b3a2bd\",\"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\":\"d8a5b4e0509a63b34588\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "config": "{\"name\":\"bf4d5532eacc4cbacd77\",\"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\":\"d8a5b4e0509a63b34588\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"c52afae0bdadbd248954\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":2000}}],\"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\":\"e9c1fab0432ce64aa3ba\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "config": "{\"name\":\"ccfbcc00365e58562623\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":392,\"z\":2000,\"width\":1048,\"height\":320,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"pivotTable\",\"projections\":{\"Rows\":[{\"queryRef\":\"Costs.SubAccountName\",\"active\":true},{\"queryRef\":\"Costs.x_ResourceGroupName\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.CommitmentDiscountName\"}],\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.x_TotalSavings)\"}],\"Columns\":[{\"queryRef\":\"Costs.x_ReportingDate\",\"active\":true}]},\"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\":\"SubAccountName\"},\"Name\":\"Costs.SubAccountName\",\"NativeReferenceName\":\"Subscription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"Costs.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"Costs.CommitmentDiscountName\",\"NativeReferenceName\":\"Commitment\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"},\"Name\":\"Costs.x_ReportingDate\",\"NativeReferenceName\":\"x_ReportingDate\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_TotalSavings)\",\"NativeReferenceName\":\"Savings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"expansionStates\":[{\"roles\":[\"Rows\"],\"levels\":[{\"queryRefs\":[\"Costs.SubAccountName\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"SubAccountName\"}}],\"isPinned\":true},{\"queryRefs\":[\"Costs.x_ResourceGroupName\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_ResourceGroupName\"}}],\"isPinned\":true},{\"queryRefs\":[\"Costs.CommitmentDiscountType\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"Costs.CommitmentDiscountName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Costs.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"Costs.x_ResourceGroupName\":{\"displayName\":\"Resource group\"},\"Costs.SubAccountName\":{\"displayName\":\"Subscription\"},\"Costs.CommitmentDiscountName\":{\"displayName\":\"Commitment\"},\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Cost\"},\"Sum(Costs.x_TotalSavings)\":{\"displayName\":\"Savings\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"171.85825965311D\"}}}},\"selector\":{\"metadata\":\"Costs.CommitmentDiscountName\"}}]},\"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.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 }, { "config": "{\"name\":\"d8a5b4e0509a63b34588\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.39572239294395,\"y\":8.005493854933814,\"z\":0,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, + "height": 704.00, "width": 1048.09, - "x": 215.4, + "x": 215.40, "y": 8.01, - "z": 0.0 + "z": 0.00 }, { "config": "{\"name\":\"dd8f28e06ad638174619\",\"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\":\"d8a5b4e0509a63b34588\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"e60d4c054942972141ac\",\"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\":\"d8a5b4e0509a63b34588\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"e9c1fab0432ce64aa3ba\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"10e188d0c0d700123e0a\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"ed882e1c3302e03c07c4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":8,\"z\":4000,\"width\":176,\"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.0, - "width": 176.0, - "x": 792.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 176.00, + "x": 792.00, + "y": 8.00, + "z": 4000.00 }, { "config": "{\"name\":\"f77d60f4c76d87e80301\",\"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\":\"10e188d0c0d700123e0a\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"f9814b66c1eeb7e1523c\",\"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\":\"d8a5b4e0509a63b34588\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "config": "{\"name\":\"f9f56ae338be0207199c\",\"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\":\"d8a5b4e0509a63b34588\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{\"objects\":{\"outspacePane\":[{\"properties\":{\"width\":{\"expr\":{\"Literal\":{\"Value\":\"201L\"}}}}}]},\"filterSortOrder\":3}", "displayName": "Prices", "displayOption": 1, "filters": "[{\"name\":\"Filter72b466caaa836a084608\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"CostDetails\"}},\"Property\":\"ChargeCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"CostDetails\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeCategory\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Usage'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{},\"ordinal\":0},{\"name\":\"Filter7205c3d3bbda0ccbda22\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"CostDetails\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"CostDetails\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Used'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{},\"ordinal\":1},{\"name\":\"Filterd7fb63677ba2053d0e09\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"CostDetails\"}},\"Property\":\"PricingCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"CostDetails\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingCategory\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Committed'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{},\"ordinal\":2}]", - "height": 720.0, + "height": 720.00, "name": "ReportSectiondad058bdadae9fb4faca", "ordinal": 9, "visualContainers": [ { "config": "{\"name\":\"093cf8cfae9c2c074552\",\"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\":\"aab8cd8f140d8eb38a0a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "config": "{\"name\":\"0ae1fb4e066ac6046052\",\"layouts\":[{\"id\":0,\"position\":{\"x\":983.9999999999999,\"y\":104,\"z\":2000,\"width\":280,\"height\":608,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"clusteredBarChart\",\"projections\":{\"Y\":[{\"queryRef\":\"Sum(Costs.ConsumedQuantity)\"}],\"Category\":[{\"queryRef\":\"Costs.x_SkuMeterName\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuMeterName\"},\"Name\":\"Costs.x_SkuMeterName\",\"NativeReferenceName\":\"x_SkuMeterName\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ConsumedQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.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.0, - "width": 280.0, - "x": 984.0, - "y": 104.0, - "z": 2000.0 + "height": 608.00, + "width": 280.00, + "x": 984.00, + "y": 104.00, + "z": 2000.00 }, { "config": "{\"name\":\"162c1419248209c02c12\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":3000,\"width\":184,\"height\":88,\"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\":\"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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 3000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 3000.00 }, { "config": "{\"name\":\"1931f9d12e28104d0569\",\"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\":\"aab8cd8f140d8eb38a0a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"19c255100d409694dc3c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":5000,\"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.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 5000.00 }, { "config": "{\"name\":\"229c8c2ee40497ec8736\",\"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\":\"cf3d4a4f970bb147dc8a\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"230d7c5380b069b07596\",\"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\":\"aab8cd8f140d8eb38a0a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"25e9250e33e7ce7c205b\",\"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\":\"aab8cd8f140d8eb38a0a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "config": "{\"name\":\"2c0d251733ebac9dc4d1\",\"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\":\"aab8cd8f140d8eb38a0a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "config": "{\"name\":\"4095e286b0aeac0eb940\",\"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\":\"aab8cd8f140d8eb38a0a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "config": "{\"name\":\"4bb966558c421d89039d\",\"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\":\"aab8cd8f140d8eb38a0a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "config": "{\"name\":\"4cdf306524a60b30d880\",\"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\":\"a19fd744183ddcc14e30\"}", "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "config": "{\"name\":\"536a197f7e50c7b2a402\",\"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\":\"a19fd744183ddcc14e30\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "config": "{\"name\":\"5774ab01c92c1ba87111\",\"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\":\"cf3d4a4f970bb147dc8a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "config": "{\"name\":\"5bc9bd972ba7e0d72803\",\"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\":\"cf3d4a4f970bb147dc8a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"6834c1d064eb11c638e9\",\"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\":\"aab8cd8f140d8eb38a0a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"6d37cf550c85113cd645\",\"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\":\"aab8cd8f140d8eb38a0a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"78b99de3079160400d33\",\"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\":\"cf3d4a4f970bb147dc8a\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"88adf31eab066d0d4db2\",\"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\":\"aab8cd8f140d8eb38a0a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "config": "{\"name\":\"8b7c9f05a664aa6d9eb3\",\"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\":\"cf3d4a4f970bb147dc8a\"}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"8b8ea5568ed887cb073a\",\"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\":\"a19fd744183ddcc14e30\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "config": "{\"name\":\"9259354ad08299867679\",\"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\":\"aab8cd8f140d8eb38a0a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"938b96dd7ddb21545a3d\",\"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\":\"aab8cd8f140d8eb38a0a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"a19fd744183ddcc14e30\",\"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\":\"cf3d4a4f970bb147dc8a\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"aab8cd8f140d8eb38a0a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":216.00126878372978,\"y\":7.522749379008424,\"z\":1000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, + "height": 704.00, "width": 1048.09, - "x": 216.0, + "x": 216.00, "y": 7.52, - "z": 1000.0 + "z": 1000.00 }, { "config": "{\"name\":\"b8921957691a06bd7848\",\"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\":\"aab8cd8f140d8eb38a0a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"c02c735d3320b2bbab01\",\"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\":\"aab8cd8f140d8eb38a0a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"c0d392e549ddb3cd5e91\",\"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\":\"a19fd744183ddcc14e30\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "config": "{\"name\":\"c18bbe5d68663ca37079\",\"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\":\"aab8cd8f140d8eb38a0a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "config": "{\"name\":\"cf3d4a4f970bb147dc8a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":5000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { - "config": "{\"name\":\"daa6ab44852c249000c0\",\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.RateOptimization/featureName/Storage.Prices'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"cf3d4a4f970bb147dc8a\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"daa6ab44852c249000c0\",\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK$$ftkver$$/bladeName/PowerBI.RateOptimization/featureName/Storage.Prices'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"cf3d4a4f970bb147dc8a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"e6b4cead10026639b2a8\",\"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\":\"a19fd744183ddcc14e30\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"ec15924ba5cec8265740\",\"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\":\"aab8cd8f140d8eb38a0a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "config": "{\"name\":\"ee65895bedc919550e54\",\"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\":\"aab8cd8f140d8eb38a0a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"f465e80fd40e994e8e06\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":4000,\"width\":760,\"height\":608,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_SkuDescription\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.x_SkuTermLabel\"},{\"queryRef\":\"Sum(Costs.ListUnitPrice)\"},{\"queryRef\":\"Sum(Costs.ContractedUnitPrice)\"},{\"queryRef\":\"Costs.x_EffectiveUnitPrice\"},{\"queryRef\":\"Sum(Costs.ConsumedQuantity)\"},{\"queryRef\":\"Costs.ConsumedUnit\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveUnitPrice\"},\"Name\":\"Costs.x_EffectiveUnitPrice\",\"NativeReferenceName\":\"Effective\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListUnitPrice\"},\"Name\":\"Sum(Costs.ListUnitPrice)\",\"NativeReferenceName\":\"List\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"Commitment\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuTermLabel\"},\"Name\":\"Costs.x_SkuTermLabel\",\"NativeReferenceName\":\"Term\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"SKU\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ConsumedQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.ConsumedQuantity)\",\"NativeReferenceName\":\"Quantity\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedUnitPrice\"},\"Name\":\"Sum(Costs.ContractedUnitPrice)\",\"NativeReferenceName\":\"Contracted\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ConsumedUnit\"},\"Name\":\"Costs.ConsumedUnit\",\"NativeReferenceName\":\"Unit\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Cost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Costs.CommitmentDiscountType\":{\"displayName\":\"Commitment\"},\"Costs.x_EffectiveUnitPrice\":{\"displayName\":\"Effective\"},\"Sum(Costs.ListUnitPrice)\":{\"displayName\":\"List\"},\"Costs.x_SkuTermLabel\":{\"displayName\":\"Term\"},\"Costs.x_SkuDescription\":{\"displayName\":\"SKU\"},\"Sum(Costs.ContractedUnitPrice)\":{\"displayName\":\"Contracted\"},\"Sum(Costs.ConsumedQuantity)\":{\"displayName\":\"Quantity\"},\"Costs.ConsumedUnit\":{\"displayName\":\"Unit\"},\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Cost\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"65.83913379737045D\"}}}},\"selector\":{\"metadata\":\"Sum(Costs.ListUnitPrice)\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"208.62690723349726D\"}}}},\"selector\":{\"metadata\":\"Costs.x_SkuDescription\"}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}", "filters": "[]", - "height": 608.0, - "width": 760.0, - "x": 216.0, - "y": 104.0, - "z": 4000.0 + "height": 608.00, + "width": 760.00, + "x": 216.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"f9614a70c2c10ace8ad8\",\"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\":\"aab8cd8f140d8eb38a0a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{\"filterSortOrder\":3}", "displayName": "Purchases", "displayOption": 1, "filters": "[{\"name\":\"1b50b3df344388020449\",\"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\":\"'Purchase'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{},\"ordinal\":0},{\"name\":\"bd75d08c06c15ccc3605\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountCategory\"}},\"Right\":{\"Literal\":{\"Value\":\"''\"}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":1}]", - "height": 720.0, + "height": 720.00, "name": "ReportSectione54dbd483648a9e74ff0", "ordinal": 7, "visualContainers": [ { "config": "{\"name\":\"09078f1e9c7911220173\",\"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\":\"a102d9af3d552195d7da\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"0a3b7493d052b69e9bba\",\"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\":\"a102d9af3d552195d7da\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"0b1587a568c00a7074b3\",\"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\":\"a102d9af3d552195d7da\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"0e22722e7172521420e9\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":4000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"1b20825760cb0ade3088\",\"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\":\"a102d9af3d552195d7da\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "config": "{\"name\":\"23bc3e83b0486c76be80\",\"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\":\"Commitment \",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"discount purchases\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review and track your commitment discount 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\":\"0e22722e7172521420e9\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"255a7810a8c311102ba0\",\"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\":\"a102d9af3d552195d7da\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "config": "{\"name\":\"2ba02dbb3cb44de9ad34\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":2000,\"width\":1048,\"height\":320,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ChargePeriodStart\"},{\"queryRef\":\"Costs.PublisherName\"},{\"queryRef\":\"Costs.x_SkuDescription\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.ChargeFrequency\"},{\"queryRef\":\"Costs.ChargeClass\"},{\"queryRef\":\"Sum(Costs.PricingQuantity)\"},{\"queryRef\":\"Sum(Costs.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(Costs.BilledCost)\",\"NativeReferenceName\":\"Billed cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PublisherName\"},\"Name\":\"Costs.PublisherName\",\"NativeReferenceName\":\"Publisher\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeClass\"},\"Name\":\"Costs.ChargeClass\",\"NativeReferenceName\":\"ChargeClass\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.PricingQuantity)\",\"NativeReferenceName\":\"Quantity\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeFrequency\"},\"Name\":\"Costs.ChargeFrequency\",\"NativeReferenceName\":\"Frequency\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"Costs.ChargePeriodStart\",\"NativeReferenceName\":\"Date\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"Commitment type\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"Sum(Costs.BilledCost)\":{\"displayName\":\"Billed cost\"},\"Costs.PublisherName\":{\"displayName\":\"Publisher\"},\"Costs.x_SkuDescription\":{\"displayName\":\"SKU\"},\"Sum(Costs.PricingQuantity)\":{\"displayName\":\"Quantity\"},\"Costs.ChargeFrequency\":{\"displayName\":\"Frequency\"},\"Costs.ChargePeriodStart\":{\"displayName\":\"Date\"},\"Costs.CommitmentDiscountType\":{\"displayName\":\"Commitment type\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"grid\":[{\"properties\":{\"gridHorizontal\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"100.01519756838906D\"}}}},\"selector\":{\"metadata\":\"Costs.PublisherName\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"407.47841221272733D\"}}}},\"selector\":{\"metadata\":\"Costs.x_SkuDescription\"}}],\"columnFormatting\":[{\"properties\":{\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}},\"selector\":{\"metadata\":\"Sum(Costs.PricingQuantity)\"}}]},\"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.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 }, { "config": "{\"name\":\"47979f54d9091569bc96\",\"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\":\"0e22722e7172521420e9\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"49331ed0ebe6c4a705b2\",\"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\":\"a102d9af3d552195d7da\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"49d02e24aa1dd0a3c1c4\",\"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\":\"a102d9af3d552195d7da\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"52e2a1c39b78da0522c3\",\"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\":\"a102d9af3d552195d7da\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"5a6fecc1804003c90156\",\"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/RateOptimization#commitment-discount-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\":\"0e22722e7172521420e9\"}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"5bfe7c2c26876c0a61c2\",\"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\":\"47979f54d9091569bc96\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { "config": "{\"name\":\"756c85f42ee277126cdc\",\"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\":\"47979f54d9091569bc96\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "config": "{\"name\":\"7a57ca91e27b3d900555\",\"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\":\"0e22722e7172521420e9\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"7a90eaf49ead70350492\",\"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\":\"a102d9af3d552195d7da\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "config": "{\"name\":\"8e7d814553931a000113\",\"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\":\"47979f54d9091569bc96\"}", "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "config": "{\"name\":\"92e1987b1d00d49040d8\",\"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\":\"a102d9af3d552195d7da\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "config": "{\"name\":\"941c9a0bd5c800ad83a3\",\"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\":\"a102d9af3d552195d7da\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"9cb5f5d9b34da823a5a7\",\"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\":\"a102d9af3d552195d7da\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "config": "{\"name\":\"9d4f1780d496ea32c296\",\"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\":\"a102d9af3d552195d7da\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"a102d9af3d552195d7da\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":216.83810176118737,\"y\":8.087324571173982,\"z\":1000,\"tabOrder\":3000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, + "height": 704.00, "width": 1048.09, "x": 216.84, "y": 8.09, - "z": 1000.0 + "z": 1000.00 }, { "config": "{\"name\":\"a1598e3e376065952ca6\",\"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\":\"a102d9af3d552195d7da\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "config": "{\"name\":\"a3d0dde0100037e31e72\",\"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\":\"47979f54d9091569bc96\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"a7ded94999dd39518c97\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":3000,\"width\":1048,\"height\":280,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.ChargePeriodStart\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(Costs.BilledCost)\"}],\"Series\":[{\"queryRef\":\"Costs.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(Costs.BilledCost)\",\"NativeReferenceName\":\"Billed cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"Costs.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"Sum(Costs.BilledCost)\":{\"displayName\":\"Billed cost\"},\"Costs.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.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { "config": "{\"name\":\"b14583227d029941b223\",\"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\":\"47979f54d9091569bc96\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "config": "{\"name\":\"b20d0eb71b77b0280530\",\"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\":\"a102d9af3d552195d7da\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { - "config": "{\"name\":\"bd562e5b112dc10ed4dc\",\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.RateOptimization/featureName/Storage.Purchases'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"0e22722e7172521420e9\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"bd562e5b112dc10ed4dc\",\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK$$ftkver$$/bladeName/PowerBI.RateOptimization/featureName/Storage.Purchases'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"0e22722e7172521420e9\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"d0bd904cb1c7bb07c3b3\",\"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\":\"a102d9af3d552195d7da\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "config": "{\"name\":\"ea7906fc630dc0e26b61\",\"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\":\"a102d9af3d552195d7da\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "config": "{\"name\":\"eabefc0663923be6bc11\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.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(Costs.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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 4000.00 }, { "config": "{\"name\":\"f1358c00b7de191460b1\",\"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\":\"0e22722e7172521420e9\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "config": "{\"name\":\"f14655d7c507520de8e2\",\"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\":\"0e22722e7172521420e9\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"f64ce48b5de95e194005\",\"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\":\"a102d9af3d552195d7da\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{\"filterSortOrder\":3}", "displayName": "Commitments", "displayOption": 1, "filters": "[{\"name\":\"Filtercf9c0cb49977d0109855\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"CostDetails\"}},\"Property\":\"ChargeCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"CostDetails\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeCategory\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Usage'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{},\"ordinal\":0},{\"name\":\"Filter3a96ad32e00450ad17a5\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"CostDetails\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"ordinal\":1},{\"name\":\"Filter87334233b8a1ee605dae\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"CostDetails\"}},\"Property\":\"PricingCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"CostDetails\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingCategory\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Committed'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{},\"ordinal\":2}]", - "height": 720.0, + "height": 720.00, "name": "ReportSectione611eddfb8ad789c7e53", "ordinal": 4, "visualContainers": [ { "config": "{\"name\":\"0c700330d286b55b817b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":8,\"z\":4000,\"width\":176,\"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\":\"'Commitment 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.0, - "width": 176.0, - "x": 792.0, - "y": 8.0, - "z": 4000.0 + "height": 88.00, + "width": 176.00, + "x": 792.00, + "y": 8.00, + "z": 4000.00 }, { "config": "{\"name\":\"0c70bf59855e7907c791\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"tabOrder\":4000}}],\"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\":\"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\":\"'Commitment savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[]", - "height": 88.0, - "width": 184.0, - "x": 600.0, - "y": 8.0, - "z": 6000.0 + "height": 88.00, + "width": 184.00, + "x": 600.00, + "y": 8.00, + "z": 6000.00 }, { "config": "{\"name\":\"0df566051d82065c3b76\",\"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\":\"4b14fe4eaa26eb7ea1d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 96.0, - "y": 0.0, - "z": 9000.0 + "height": 704.00, + "width": 88.00, + "x": 96.00, + "y": 0.00, + "z": 9000.00 }, { "config": "{\"name\":\"0febb8b5e9d30ba20b00\",\"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\":\"36dc016f040bd10d303a\"}", "filters": "[]", - "height": 720.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 720.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"1cbfe960d34903c6a0c0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_CommitmentDiscountUtilization\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_CommitmentDiscountUtilization\"},\"Name\":\"Costs.x_CommitmentDiscountUtilization\",\"NativeReferenceName\":\"x_CommitmentDiscountUtilization\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_CommitmentDiscountUtilization\"}}}]},\"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\":\"'Utilization'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[]", - "height": 88.0, - "width": 184.0, - "x": 408.0, - "y": 8.0, - "z": 5000.0 + "height": 88.00, + "width": 184.00, + "x": 408.00, + "y": 8.00, + "z": 5000.00 }, { "config": "{\"name\":\"2049c0f0233a05a51721\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":7000,\"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.0, - "width": 184.0, - "x": 216.0, - "y": 8.0, - "z": 7000.0 + "height": 88.00, + "width": 184.00, + "x": 216.00, + "y": 8.00, + "z": 7000.00 }, { "config": "{\"name\":\"23631ef92e35573d1595\",\"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\":\"4b14fe4eaa26eb7ea1d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 96.0, - "z": 16000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 96.00, + "z": 16000.00 }, { "config": "{\"name\":\"2650e4bd8eb92a108bd0\",\"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\":\"46fe28e3e47606dc830e\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 168.8, - "z": 1000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 168.80, + "z": 1000.00 }, { "config": "{\"name\":\"328b9ba023ecd502212b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":192,\"x\":0,\"y\":0,\"z\":5000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Commitment discounts\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Summarize reservation and savings plan cost, utilization, and 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\":\"36dc016f040bd10d303a\"}", "filters": "[]", - "height": 104.0, - "width": 192.0, - "x": 0.0, - "y": 0.0, - "z": 5000.0 + "height": 104.00, + "width": 192.00, + "x": 0.00, + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"34b5a92ec146e614d601\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":3000,\"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.CommitmentDiscountStatus\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"},\"Name\":\"Costs.x_ReportingDate\",\"NativeReferenceName\":\"x_ReportingDate\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"},\"Name\":\"Costs.CommitmentDiscountStatus\",\"NativeReferenceName\":\"Status\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"}}}]},\"columnProperties\":{\"Costs.CommitmentDiscountStatus\":{\"displayName\":\"Status\"},\"Sum(Costs.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'\"}}}}}],\"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.0, - "width": 1048.0, - "x": 216.0, - "y": 104.0, - "z": 3000.0 + "height": 280.00, + "width": 1048.00, + "x": 216.00, + "y": 104.00, + "z": 3000.00 }, { "config": "{\"name\":\"36dc016f040bd10d303a\",\"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.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"3bced61e99d6c2048e43\",\"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\":\"4b14fe4eaa26eb7ea1d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 479.16, - "y": 0.0, - "z": 5000.0 + "y": 0.00, + "z": 5000.00 }, { "config": "{\"name\":\"45adc921dbdaee0c6140\",\"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\":\"4b14fe4eaa26eb7ea1d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 0.0, - "y": 0.0, - "z": 10000.0 + "height": 704.00, + "width": 88.00, + "x": 0.00, + "y": 0.00, + "z": 10000.00 }, { "config": "{\"name\":\"46fe28e3e47606dc830e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"36dc016f040bd10d303a\"}", - "height": 280.8, - "width": 200.0, - "x": 0.0, - "y": 104.0, - "z": 4000.0 + "height": 280.80, + "width": 200.00, + "x": 0.00, + "y": 104.00, + "z": 4000.00 }, { "config": "{\"name\":\"4b14fe4eaa26eb7ea1d1\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.39572239294395,\"y\":8.005493854933814,\"z\":0,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}", - "height": 704.0, + "height": 704.00, "width": 1048.09, - "x": 215.4, + "x": 215.40, "y": 8.01, - "z": 0.0 + "z": 0.00 }, { "config": "{\"name\":\"52f8544db448d7a81810\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":4000}}],\"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\":\"46fe28e3e47606dc830e\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 4000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"57413301912edd34a271\",\"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\":\"4b14fe4eaa26eb7ea1d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 575.35, - "y": 0.0, - "z": 4000.0 + "y": 0.00, + "z": 4000.00 }, { "config": "{\"name\":\"7be6ee2c834467d006b9\",\"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\":\"4b14fe4eaa26eb7ea1d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 383.9, - "z": 13000.0 + "y": 383.90, + "z": 13000.00 }, { "config": "{\"name\":\"7eb41d7bc3dddd810b6d\",\"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\":\"4b14fe4eaa26eb7ea1d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 767.72, - "y": 0.0, - "z": 2000.0 + "y": 0.00, + "z": 2000.00 }, { "config": "{\"name\":\"8408e79434b3710ddee2\",\"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\":\"36dc016f040bd10d303a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 656.0, - "z": 3000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 656.00, + "z": 3000.00 }, { "config": "{\"name\":\"849f17a5a77945945279\",\"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\":\"4b14fe4eaa26eb7ea1d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 671.53, - "y": 0.0, - "z": 3000.0 + "y": 0.00, + "z": 3000.00 }, { "config": "{\"name\":\"aa001aff1c3e74045960\",\"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\":\"4b14fe4eaa26eb7ea1d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 863.9, - "y": 0.0, - "z": 1000.0 + "height": 704.00, + "width": 88.00, + "x": 863.90, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"adb26ad49dd017c2de4a\",\"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\":\"4b14fe4eaa26eb7ea1d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 960.09, - "y": 0.0, - "z": 0.0 + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"b38212e59107d9d3070b\",\"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\":\"4b14fe4eaa26eb7ea1d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 192.0, - "z": 15000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 192.00, + "z": 15000.00 }, { "config": "{\"name\":\"bd454f5b01a2dc1bde38\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":2000}}],\"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\":\"46fe28e3e47606dc830e\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 224.8, - "z": 0.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 224.80, + "z": 0.00 }, { - "config": "{\"name\":\"c1cb66042603b3070956\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.RateOptimization/featureName/Storage.CommitmentDiscounts'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"36dc016f040bd10d303a\",\"howCreated\":\"InsertVisualButton\"}", + "config": "{\"name\":\"c1cb66042603b3070956\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"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%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK$$ftkver$$/bladeName/PowerBI.RateOptimization/featureName/Storage.CommitmentDiscounts'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"36dc016f040bd10d303a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 192.0, - "x": 0.0, - "y": 688.0, - "z": 2000.0 + "height": 32.00, + "width": 192.00, + "x": 0.00, + "y": 688.00, + "z": 2000.00 }, { "config": "{\"name\":\"c1f376dfdc4b710a15a5\",\"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\":\"4b14fe4eaa26eb7ea1d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 382.98, - "y": 0.0, - "z": 6000.0 + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"c8e2a0efe37148ac0a11\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":200,\"x\":0,\"y\":0,\"z\":1000,\"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\":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\":\"36dc016f040bd10d303a\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 720.0, - "width": 200.0, - "x": 0.0, - "y": 0.0, - "z": 1000.0 + "height": 720.00, + "width": 200.00, + "x": 0.00, + "y": 0.00, + "z": 1000.00 }, { "config": "{\"name\":\"d9422cd52c50876ea3a0\",\"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\":\"4b14fe4eaa26eb7ea1d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, - "x": 192.0, - "y": 0.0, - "z": 8000.0 + "height": 704.00, + "width": 88.00, + "x": 192.00, + "y": 0.00, + "z": 8000.00 }, { "config": "{\"name\":\"dfdd36ab8716a702244b\",\"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\":\"4b14fe4eaa26eb7ea1d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 704.0, - "width": 88.0, + "height": 704.00, + "width": 88.00, "x": 286.79, - "y": 0.0, - "z": 7000.0 + "y": 0.00, + "z": 7000.00 }, { "config": "{\"name\":\"e203df00213520675194\",\"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\":\"4b14fe4eaa26eb7ea1d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 0.0, - "z": 17000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 0.00, + "z": 17000.00 }, { "config": "{\"name\":\"e59d83db130818ea34ec\",\"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\":\"46fe28e3e47606dc830e\"}", "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.0, - "width": 200.0, - "x": 0.0, - "y": 112.8, - "z": 2000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 112.80, + "z": 2000.00 }, { "config": "{\"name\":\"e6f86a2f9960e1098901\",\"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\":\"4b14fe4eaa26eb7ea1d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 576.0, - "z": 11000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 576.00, + "z": 11000.00 }, { "config": "{\"name\":\"ea3e59dc1c1b94003e31\",\"layouts\":[{\"id\":0,\"position\":{\"height\":40,\"width\":40,\"x\":160,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"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#commitment-discounts'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"36dc016f040bd10d303a\"}", "filters": "[]", - "height": 40.0, - "width": 40.0, - "x": 160.0, - "y": 0.0, - "z": 6000.0 + "height": 40.00, + "width": 40.00, + "x": 160.00, + "y": 0.00, + "z": 6000.00 }, { "config": "{\"name\":\"eb7d668768d56e080384\",\"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\":\"4b14fe4eaa26eb7ea1d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, - "x": 0.0, - "y": 288.0, - "z": 14000.0 + "height": 88.00, + "width": 1048.00, + "x": 0.00, + "y": 288.00, + "z": 14000.00 }, { "config": "{\"name\":\"eec8170a2a9e0c389c09\",\"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\":\"4b14fe4eaa26eb7ea1d1\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 88.0, - "width": 1048.0, + "height": 88.00, + "width": 1048.00, "x": 0.01, - "y": 479.9, - "z": 12000.0 + "y": 479.90, + "z": 12000.00 }, { "config": "{\"name\":\"f50039e61609794be359\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":0}}],\"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\":\"46fe28e3e47606dc830e\"}", "filters": "[]", - "height": 56.0, - "width": 200.0, - "x": 0.0, - "y": 56.0, - "z": 3000.0 + "height": 56.00, + "width": 200.00, + "x": 0.00, + "y": 56.00, + "z": 3000.00 }, { "config": "{\"name\":\"f7b9fc449293643e5a97\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":2000,\"width\":1048,\"height\":320,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.CommitmentDiscountName\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.ResourceId\"},{\"queryRef\":\"Costs.x_CommitmentDiscountUtilization\"},{\"queryRef\":\"Sum(Costs.ListCost)\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.x_CommitmentDiscountSavings)\"},{\"queryRef\":\"Costs.x_EffectiveSavingsRate\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"Costs.CommitmentDiscountName\",\"NativeReferenceName\":\"Commitment\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"List cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"Type\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"Contracted cost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"Costs.ResourceId\",\"NativeReferenceName\":\"Count of ResourceId\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"Commitment savings\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountUtilization\"},\"Name\":\"Costs.x_CommitmentDiscountUtilization\",\"NativeReferenceName\":\"Utilization\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveSavingsRate\"},\"Name\":\"Costs.x_EffectiveSavingsRate\",\"NativeReferenceName\":\"ESR\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Costs.CommitmentDiscountName\":{\"displayName\":\"Commitment\"},\"Sum(Costs.ListCost)\":{\"displayName\":\"List cost\"},\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"Costs.ServiceName\":{\"displayName\":\"Service\"},\"Costs.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"Sum(Costs.ContractedCost)\":{\"displayName\":\"Contracted cost\"},\"Costs.ResourceId\":{\"displayName\":\"Resources\"},\"Sum(Costs.x_CommitmentDiscountSavings)\":{\"displayName\":\"Commitment savings\"},\"Costs.x_CommitmentDiscountUtilization\":{\"displayName\":\"Utilization\"},\"Costs.x_EffectiveSavingsRate\":{\"displayName\":\"ESR\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"290.362416825183D\"}}}},\"selector\":{\"metadata\":\"Costs.CommitmentDiscountName\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"71.45161290322581D\"}}}},\"selector\":{\"metadata\":\"Costs.x_EffectiveSavingsRate\"}}]},\"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.0, - "width": 1048.0, - "x": 216.0, - "y": 392.0, - "z": 2000.0 + "height": 320.00, + "width": 1048.00, + "x": 216.00, + "y": 392.00, + "z": 2000.00 } ], - "width": 1280.0 + "width": 1280.00 }, { "config": "{\"visibility\":1}", "displayName": "DQ", "displayOption": 2, "filters": "[]", - "height": 6000.0, + "height": 6000.00, "name": "d81603964190b1931200", "ordinal": 10, "visualContainers": [ { "config": "{\"name\":\"0291932a6d904e78686a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":16.00000000000003,\"y\":616.0000000000001,\"z\":72000,\"width\":128,\"height\":56,\"tabOrder\":70000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Reservation usage\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"12pt\"}}]}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 128.0, - "x": 16.0, - "y": 616.0, - "z": 72000.0 + "height": 56.00, + "width": 128.00, + "x": 16.00, + "y": 616.00, + "z": 72000.00 }, { "config": "{\"name\":\"045416cbc91b42a50bc0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":896.0054384262527,\"y\":1072.4051142851836,\"z\":58000,\"width\":32,\"height\":56,\"tabOrder\":56000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 896.01, "y": 1072.41, - "z": 58000.0 + "z": 58000.00 }, { "config": "{\"name\":\"0514773f3c847c4a536e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":744,\"y\":1254.4384798295835,\"z\":61000,\"width\":184,\"height\":80,\"tabOrder\":59000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Commitment savings\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"18pt\",\"color\":\"#7fba00\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 80.0, - "width": 184.0, - "x": 744.0, + "height": 80.00, + "width": 184.00, + "x": 744.00, "y": 1254.44, - "z": 61000.0 + "z": 61000.00 }, { "config": "{\"name\":\"14944c500a63bc02095b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":16.00505056554392,\"y\":1598.738223553032,\"z\":1000,\"width\":1248,\"height\":272,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_SkuDescription\"},{\"queryRef\":\"Costs.x_SkuRegion\"},{\"queryRef\":\"Sum(Costs.x_TotalDiscountPercent)\"},{\"queryRef\":\"Sum(Costs.ListUnitPrice)\"},{\"queryRef\":\"Costs.ContractedUnitPrice\"},{\"queryRef\":\"Sum(Costs.x_EffectiveUnitPrice)\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.CommitmentDiscountName\"},{\"queryRef\":\"Sum(Costs.BilledCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveUnitPrice\"},\"Name\":\"Sum(Costs.x_EffectiveUnitPrice)\",\"NativeReferenceName\":\"x_EffectiveUnitPrice1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListUnitPrice\"},\"Name\":\"Sum(Costs.ListUnitPrice)\",\"NativeReferenceName\":\"ListUnitPrice1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"x_SkuDescription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"CommitmentDiscountType\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedUnitPrice\"},\"Name\":\"Costs.ContractedUnitPrice\",\"NativeReferenceName\":\"ContractedUnitPrice\"},{\"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\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuRegion\"},\"Name\":\"Costs.x_SkuRegion\",\"NativeReferenceName\":\"x_SkuRegion\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"Costs.CommitmentDiscountName\",\"NativeReferenceName\":\"CommitmentDiscountName\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_TotalDiscountPercent\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_TotalDiscountPercent)\",\"NativeReferenceName\":\"x_TotalDiscountPercent\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_DiscountUnitPriceSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"448.75002107312343D\"}}}},\"selector\":{\"metadata\":\"Costs.x_SkuDescription\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'All rows with some discount'\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera2c21b8088b49ddb1001\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeCategory\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Adjustment'\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},{\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_TotalDiscountPercent\"}},\"Function\":0}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_TotalDiscountPercent\"}},\"Function\":0}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false}]", - "height": 272.0, - "width": 1248.0, + "height": 272.00, + "width": 1248.00, "x": 16.01, "y": 1598.74, - "z": 1000.0 + "z": 1000.00 }, { "config": "{\"name\":\"152d490f84860230e7e3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":16.00000000000003,\"y\":192.00000000000009,\"z\":26000,\"width\":128,\"height\":96,\"tabOrder\":24000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Purchases\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"12pt\"}}]}]}}]}}}", "filters": "[]", - "height": 96.0, - "width": 128.0, - "x": 16.0, - "y": 192.0, - "z": 26000.0 + "height": 96.00, + "width": 128.00, + "x": 16.00, + "y": 192.00, + "z": 26000.00 }, { "config": "{\"name\":\"19a36f4540d3e5bc6880\",\"layouts\":[{\"id\":0,\"position\":{\"x\":311.8182129371942,\"y\":1166.9839831653585,\"z\":39000,\"width\":128,\"height\":56,\"tabOrder\":37000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Reservation usage\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"12pt\"}}]}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 128.0, + "height": 56.00, + "width": 128.00, "x": 311.82, "y": 1166.98, - "z": 39000.0 + "z": 39000.00 }, { "config": "{\"name\":\"1dd17580a19049aa4d1b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":-0.0013596908662998957,\"y\":4505.23822355303,\"z\":7000,\"width\":1280,\"height\":96,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Free SKUs\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"The following SKUs are all free. This may be due to preview pricing, a trial period, a free tier in tiered pricing, or another reason. If anything here is not free but has 0 billed and effective cost, please contact support as this means the Cost Management data is inaccurate or incomplete.\"}]}]}}]},\"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": 96.0, - "width": 1280.0, - "x": 0.0, + "height": 96.00, + "width": 1280.00, + "x": 0.00, "y": 4505.24, - "z": 7000.0 + "z": 7000.00 }, { "config": "{\"name\":\"22573183ec997d08e633\",\"layouts\":[{\"id\":0,\"position\":{\"x\":144,\"y\":616.0000000000001,\"z\":40000,\"width\":152,\"height\":56,\"tabOrder\":38000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'List 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\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera10ee5ceee4531a0e792\",\"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\":\"Filter87a9078edba7a348e2c9\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filterac2af06bbba88bdc1720\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter2664c1e9ca84a4244e7e\",\"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\":{}},{\"name\":\"Filter0784f6c3eede70625b0e\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 56.0, - "width": 152.0, - "x": 144.0, - "y": 616.0, - "z": 40000.0 + "height": 56.00, + "width": 152.00, + "x": 144.00, + "y": 616.00, + "z": 40000.00 }, { "config": "{\"name\":\"25c4f80dd818d6e5269a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":278.91427946378485,\"y\":230.86423584443716,\"z\":56000,\"width\":32,\"height\":56,\"tabOrder\":54000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 278.91, "y": 230.86, - "z": 56000.0 + "z": 56000.00 }, { "config": "{\"name\":\"2920c80700092e785d99\",\"layouts\":[{\"id\":0,\"position\":{\"x\":942.8580294802173,\"y\":502.80876588811356,\"z\":68000,\"width\":176,\"height\":88,\"tabOrder\":66000}}],\"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\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"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\":\"32D\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"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\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}}}]}}}", "filters": "[{\"name\":\"Filter5f0c1579a14c4b460b04\",\"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\":\"Filter5af08250b5b9c07ed590\",\"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": 88.0, - "width": 176.0, + "height": 88.00, + "width": 176.00, "x": 942.86, "y": 502.81, - "z": 68000.0 + "z": 68000.00 }, { "config": "{\"name\":\"2d17b8911da3e4ada199\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":48,\"z\":4000,\"width\":1280,\"height\":128,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Cost savings\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"Cost savings can be broken down into savings from negotiated discounts \"},{\"value\":\"and savings from commitment discounts. Savings from negotiated discounts generally only applies to enterprise accounts and can be calculated as L\",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"istCost minus ContractedCost. Savings from commitment discounts applies to reservations and savings plans and can be calculated as ContractedCost minus EffectiveCost and EffectiveCost is calculated as the amortized cost of \\\"used\\\" and \\\"unused\\\" commitments. The \\\"unused\\\" commitment amount is the \\\"waste\\\" from usage or spend that was committed but not used by any resources during the commitment period – an hour for traditional reservations or the full term for prepurchase plans.\"}]}]}}]},\"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.0, - "width": 1280.0, - "x": 0.0, - "y": 48.0, - "z": 4000.0 + "height": 128.00, + "width": 1280.00, + "x": 0.00, + "y": 48.00, + "z": 4000.00 }, { "config": "{\"name\":\"2dab72373a3aea7a8e31\",\"layouts\":[{\"id\":0,\"position\":{\"x\":144,\"y\":192.00000000000009,\"z\":25000,\"width\":152,\"height\":96,\"tabOrder\":23000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'List cost without discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera10ee5ceee4531a0e792\",\"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\":\"'Purchase'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter87a9078edba7a348e2c9\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 96.0, - "width": 152.0, - "x": 144.0, - "y": 192.0, - "z": 25000.0 + "height": 96.00, + "width": 152.00, + "x": 144.00, + "y": 192.00, + "z": 25000.00 }, { "config": "{\"name\":\"2ec1fc906aab0c1dae42\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":128,\"x\":102.06351446718419,\"y\":8,\"z\":44000,\"tabOrder\":1000}}],\"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\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0.2}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"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\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"443e0a8a014024006780\"}", "filters": "[{\"name\":\"Filterf31c3d3aae424e79a635\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 48.0, - "width": 128.0, + "height": 48.00, + "width": 128.00, "x": 102.06, - "y": 8.0, - "z": 44000.0 + "y": 8.00, + "z": 44000.00 }, { "config": "{\"name\":\"32b3e930bdee9e301b09\",\"layouts\":[{\"id\":0,\"position\":{\"x\":734.8580294802174,\"y\":614.8642358417379,\"z\":79000,\"width\":32,\"height\":56,\"tabOrder\":77000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 734.86, "y": 614.86, - "z": 79000.0 + "z": 79000.00 }, { "config": "{\"name\":\"36a14981d5c94247500c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":16.00505056554392,\"y\":1886.738223553032,\"z\":18000,\"width\":1248,\"height\":256,\"tabOrder\":18000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_SkuDescription\"},{\"queryRef\":\"Costs.x_SkuRegion\"},{\"queryRef\":\"Costs.ListUnitPrice\"},{\"queryRef\":\"Sum(Costs.ContractedUnitPrice)\"},{\"queryRef\":\"Sum(Costs.x_NegotiatedDiscountPercent)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedUnitPrice\"},\"Name\":\"Sum(Costs.ContractedUnitPrice)\",\"NativeReferenceName\":\"ContractedUnitPrice1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListUnitPrice\"},\"Name\":\"Costs.ListUnitPrice\",\"NativeReferenceName\":\"ListUnitPrice\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"x_SkuDescription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuRegion\"},\"Name\":\"Costs.x_SkuRegion\",\"NativeReferenceName\":\"x_SkuRegion\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_NegotiatedDiscountPercent\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_NegotiatedDiscountPercent)\",\"NativeReferenceName\":\"x_NegotiatedDiscountPercent\"}]},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Negotiated price discount (list - contracted)'\"}}}}}]}}}", "filters": "[{\"name\":\"Filter22e21a70c37a79255bd3\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filter89420b1e4a88d05e06b9\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_CommitmentUnitPriceSavings\"}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":1},{\"name\":\"Filter33c5cb0672a1361b6a98\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_EffectiveUnitPrice\"}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":2},{\"name\":\"Filtera91e378720ae0a76a660\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedUnitPrice\"}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":3},{\"name\":\"Filterc7a1e0b910c042d97105\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListUnitPrice\"}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":4},{\"name\":\"Filterad7cee600734613d44c0\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuDescription\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":5},{\"name\":\"Filterd0e34a65cd61e6a41369\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuRegion\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":6},{\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_NegotiatedDiscountPercent\"}},\"Function\":0}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_NegotiatedDiscountPercent\"}},\"Function\":0}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false}]", - "height": 256.0, - "width": 1248.0, + "height": 256.00, + "width": 1248.00, "x": 16.01, "y": 1886.74, - "z": 18000.0 + "z": 18000.00 }, { "config": "{\"name\":\"376279e901d0a9e94672\",\"layouts\":[{\"id\":0,\"position\":{\"x\":734.8580294802174,\"y\":518.8642358417379,\"z\":88000,\"width\":32,\"height\":56,\"tabOrder\":86000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 734.86, "y": 518.86, - "z": 88000.0 + "z": 88000.00 }, { "config": "{\"name\":\"385f5a210ac880e4bd07\",\"layouts\":[{\"id\":0,\"position\":{\"x\":576,\"y\":1071.2192431822218,\"z\":54000,\"width\":32,\"height\":56,\"tabOrder\":52000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, - "x": 576.0, + "height": 56.00, + "width": 32.00, + "x": 576.00, "y": 1071.22, - "z": 54000.0 + "z": 54000.00 }, { "config": "{\"name\":\"3e874e2f6a7477bee0d6\",\"layouts\":[{\"id\":0,\"position\":{\"x\":744.0054384262527,\"y\":1167.2693501269214,\"z\":43000,\"width\":152,\"height\":56,\"tabOrder\":41000}}],\"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\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Unused commitment (waste)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera12c2a0dc4dccbe5b41b\",\"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\":{}},{\"name\":\"Filteraaa08787790362a27e0a\",\"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\":\"Filterd8fbd80db8e66d803e66\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filterdc6562c24d57b460dd8b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter2711f36306a3b2e28505\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'Unused'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"objects\":{}}]", - "height": 56.0, - "width": 152.0, + "height": 56.00, + "width": 152.00, "x": 744.01, "y": 1167.27, - "z": 43000.0 + "z": 43000.00 }, { "config": "{\"name\":\"42d9631f0cd37584d110\",\"layouts\":[{\"id\":0,\"position\":{\"x\":582.8017794802174,\"y\":614.8642358417379,\"z\":77000,\"width\":32,\"height\":56,\"tabOrder\":75000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, - "x": 582.8, + "height": 56.00, + "width": 32.00, + "x": 582.80, "y": 614.86, - "z": 77000.0 + "z": 77000.00 }, { "config": "{\"name\":\"443e0a8a014024006780\",\"layouts\":[{\"id\":0,\"position\":{\"x\":510.80308671792227,\"y\":662.8492385681684,\"z\":20000,\"width\":336,\"height\":88,\"tabOrder\":92000}}],\"singleVisualGroup\":{\"displayName\":\"Group 1\",\"groupMode\":0}}", - "height": 88.0, - "width": 336.0, - "x": 510.8, + "height": 88.00, + "width": 336.00, + "x": 510.80, "y": 662.85, - "z": 20000.0 + "z": 20000.00 }, { "config": "{\"name\":\"45050a79d4e6c6aedd89\",\"layouts\":[{\"id\":0,\"position\":{\"x\":15.998640309133702,\"y\":4609.238223553032,\"z\":10000,\"width\":1248,\"height\":64,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_FreeReason\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_FreeReason\"},\"Name\":\"Costs.x_FreeReason\",\"NativeReferenceName\":\"x_FreeReason\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_FreeReason\"}}}]},\"drillFilterOtherVisuals\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Basic'\"}}}}}],\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}", "filters": "[{\"name\":\"Filtere833c73406c9b08592ad\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_FreeReason\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_FreeReason\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}],[{\"Literal\":{\"Value\":\"'Unknown Unused Commitment'\"}}],[{\"Literal\":{\"Value\":\"'Unknown Used Commitment'\"}}],[{\"Literal\":{\"Value\":\"'Low Usage'\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":0,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false}]", - "height": 64.0, - "width": 1248.0, - "x": 16.0, + "height": 64.00, + "width": 1248.00, + "x": 16.00, "y": 4609.24, - "z": 10000.0 + "z": 10000.00 }, { "config": "{\"name\":\"489c15af2e21dcc0142b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":15.998640309133702,\"y\":3857.23822355303,\"z\":12000,\"width\":1248,\"height\":224,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.CommitmentDiscountStatus\"},{\"queryRef\":\"Costs.x_SkuDescription\"},{\"queryRef\":\"Sum(Costs.PricingQuantity)\"},{\"queryRef\":\"Costs.PricingUnit\"},{\"queryRef\":\"Sum(Costs.x_PricingBlockSize)\"},{\"queryRef\":\"Sum(Costs.ListUnitPrice)\"},{\"queryRef\":\"Costs.ContractedUnitPrice\"},{\"queryRef\":\"Sum(Costs.x_EffectiveUnitPrice)\"},{\"queryRef\":\"Costs.x_BilledUnitPrice\"},{\"queryRef\":\"Sum(Costs.BilledCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Sum(Costs.ListCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveUnitPrice\"},\"Name\":\"Sum(Costs.x_EffectiveUnitPrice)\",\"NativeReferenceName\":\"x_EffectiveUnitPrice1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListUnitPrice\"},\"Name\":\"Sum(Costs.ListUnitPrice)\",\"NativeReferenceName\":\"ListUnitPrice1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"x_SkuDescription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedUnitPrice\"},\"Name\":\"Costs.ContractedUnitPrice\",\"NativeReferenceName\":\"ContractedUnitPrice\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_BilledUnitPrice\"},\"Name\":\"Costs.x_BilledUnitPrice\",\"NativeReferenceName\":\"x_BilledUnitPrice\"},{\"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\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_PricingBlockSize\"},\"Name\":\"Sum(Costs.x_PricingBlockSize)\",\"NativeReferenceName\":\"x_PricingBlockSize1\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.PricingQuantity)\",\"NativeReferenceName\":\"PricingQuantity\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingUnit\"},\"Name\":\"Costs.PricingUnit\",\"NativeReferenceName\":\"PricingUnit\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"},\"Name\":\"Costs.CommitmentDiscountStatus\",\"NativeReferenceName\":\"CommitmentDiscountStatus\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"CommitmentDiscountType\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"ListCost\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"}}}]},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"407.6090135772365D\"}}}},\"selector\":{\"metadata\":\"Costs.x_SkuDescription\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}}}}]}}}", "filters": "[{\"name\":\"Filter99d0a0928548c95e3087\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":0,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false},{\"name\":\"Filter29d3511900b08a46964b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_FreeReason\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_FreeReason\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}],[{\"Literal\":{\"Value\":\"'Low Usage'\"}}],[{\"Literal\":{\"Value\":\"'Other'\"}}],[{\"Literal\":{\"Value\":\"'Preview'\"}}],[{\"Literal\":{\"Value\":\"'Trial'\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},{\"name\":\"Filter3ce81818518db0292705\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false}]", - "height": 224.0, - "width": 1248.0, - "x": 16.0, + "height": 224.00, + "width": 1248.00, + "x": 16.00, "y": 3857.24, - "z": 12000.0 + "z": 12000.00 }, { "config": "{\"name\":\"4ba33d5ed1ca31a5e296\",\"layouts\":[{\"id\":0,\"position\":{\"x\":902.8580294802173,\"y\":520.0000000000001,\"z\":80000,\"width\":32,\"height\":56,\"tabOrder\":78000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 902.86, - "y": 520.0, - "z": 80000.0 + "y": 520.00, + "z": 80000.00 }, { "config": "{\"name\":\"51653a9b5539e7600e07\",\"layouts\":[{\"id\":0,\"position\":{\"x\":16.00000000000003,\"y\":424,\"z\":51000,\"width\":128,\"height\":56,\"tabOrder\":49000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Spot \",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"12pt\"}}]},{\"textRuns\":[{\"value\":\"usage\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"12pt\"}}]}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 128.0, - "x": 16.0, - "y": 424.0, - "z": 51000.0 + "height": 56.00, + "width": 128.00, + "x": 16.00, + "y": 424.00, + "z": 51000.00 }, { "config": "{\"name\":\"5512e4b015a2c9b29a43\",\"layouts\":[{\"id\":0,\"position\":{\"x\":942.8580294802173,\"y\":694.8087658881136,\"z\":69000,\"width\":176,\"height\":88,\"tabOrder\":67000}}],\"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,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#DEF7AA'\"}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"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\":\"false\"}}},\"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\"}}}}}]}}}", "filters": "[{\"name\":\"Filter72199da057b650ab95bb\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_DiscountCostSavings\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":0}]", - "height": 88.0, - "width": 176.0, + "height": 88.00, + "width": 176.00, "x": 942.86, "y": 694.81, - "z": 69000.0 + "z": 69000.00 }, { "config": "{\"name\":\"56b7620650c16b000814\",\"layouts\":[{\"id\":0,\"position\":{\"x\":295.8882854926301,\"y\":328,\"z\":32000,\"width\":152,\"height\":56,\"tabOrder\":30000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Contracted cost after negotiated discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filter129e400c7dc2e0083c9c\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter70beaddc01344a005587\",\"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\":\"Filter848f399050070931517a\",\"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\":\"'Standard'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 56.0, - "width": 152.0, + "height": 56.00, + "width": 152.00, "x": 295.89, - "y": 328.0, - "z": 32000.0 + "y": 328.00, + "z": 32000.00 }, { "config": "{\"name\":\"59d9b14cc9053e0205c2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":896.0054384262527,\"y\":1168.4051142851836,\"z\":59000,\"width\":32,\"height\":56,\"tabOrder\":57000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 896.01, "y": 1168.41, - "z": 59000.0 + "z": 59000.00 }, { "config": "{\"name\":\"5a061edf1cd0a4416459\",\"layouts\":[{\"id\":0,\"position\":{\"x\":902.8580294802173,\"y\":230.86423584173792,\"z\":57000,\"width\":32,\"height\":56,\"tabOrder\":55000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 902.86, "y": 230.86, - "z": 57000.0 + "z": 57000.00 }, { "config": "{\"name\":\"5ad30f5a70578912b4c5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":750.8580294802174,\"y\":614.8642358417379,\"z\":75000,\"width\":152,\"height\":56,\"tabOrder\":73000}}],\"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\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Unused commitment (waste)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera12c2a0dc4dccbe5b41b\",\"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\":{}},{\"name\":\"Filteraaa08787790362a27e0a\",\"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\":\"Filterd8fbd80db8e66d803e66\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filterdc6562c24d57b460dd8b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter2711f36306a3b2e28505\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'Unused'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"objects\":{}}]", - "height": 56.0, - "width": 152.0, + "height": 56.00, + "width": 152.00, "x": 750.86, "y": 614.86, - "z": 75000.0 + "z": 75000.00 }, { "config": "{\"name\":\"5fe697be70174ac88807\",\"layouts\":[{\"id\":0,\"position\":{\"x\":575.9491884262527,\"y\":1167.2693501269214,\"z\":53000,\"width\":32,\"height\":56,\"tabOrder\":51000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 575.95, "y": 1167.27, - "z": 53000.0 + "z": 53000.00 }, { "config": "{\"name\":\"6104ce8e0100e4723749\",\"layouts\":[{\"id\":0,\"position\":{\"x\":439.9491884262527,\"y\":1167.2693501269214,\"z\":41000,\"width\":152,\"height\":56,\"tabOrder\":39000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Contracted cost after negotiated discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filter129e400c7dc2e0083c9c\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter70beaddc01344a005587\",\"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\":\"Filter4bf10f9ab06e46cd0d9a\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter6e7bab30ac398d0bee37\",\"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\":{}},{\"name\":\"Filter1680e704e005d70a06e6\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 56.0, - "width": 152.0, + "height": 56.00, + "width": 152.00, "x": 439.95, "y": 1167.27, - "z": 41000.0 + "z": 41000.00 }, { "config": "{\"name\":\"616abb11c31770413406\",\"layouts\":[{\"id\":0,\"position\":{\"x\":592,\"y\":1031.219243182222,\"z\":22000,\"width\":152,\"height\":96,\"tabOrder\":20000}}],\"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\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"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\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera12c2a0dc4dccbe5b41b\",\"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\":{}},{\"name\":\"Filteraaa08787790362a27e0a\",\"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\":\"Filterd8fbd80db8e66d803e66\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filterdc6562c24d57b460dd8b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter2711f36306a3b2e28505\",\"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\":{}}]", - "height": 96.0, - "width": 152.0, - "x": 592.0, + "height": 96.00, + "width": 152.00, + "x": 592.00, "y": 1031.22, - "z": 22000.0 + "z": 22000.00 }, { "config": "{\"name\":\"61f44cea091bc4d30a9e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":727.8182129371943,\"y\":1070.9839831653585,\"z\":85000,\"width\":32,\"height\":56,\"tabOrder\":83000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 727.82, "y": 1070.98, - "z": 85000.0 + "z": 85000.00 }, { "config": "{\"name\":\"67fd0fe3b56452c1989b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":4094.73822355303,\"z\":11000,\"width\":1280,\"height\":80,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Little to no usage\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"The following SKUs had little to no usage, which resulted in a charge too small to be registered and are effectively free. Additional usage will eventually result in a charge.\"}]}]}}]},\"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.0, - "width": 1280.0, - "x": 0.0, + "height": 80.00, + "width": 1280.00, + "x": 0.00, "y": 4094.74, - "z": 11000.0 + "z": 11000.00 }, { "config": "{\"name\":\"682e47c38986768a21d3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":278.91427946378485,\"y\":422.8642358444371,\"z\":52000,\"width\":32,\"height\":56,\"tabOrder\":50000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 278.91, "y": 422.86, - "z": 52000.0 + "z": 52000.00 }, { "config": "{\"name\":\"6aa495c65bb91d843c07\",\"layouts\":[{\"id\":0,\"position\":{\"x\":936.0054384262527,\"y\":1151.2138801732972,\"z\":50000,\"width\":176,\"height\":88,\"tabOrder\":48000}}],\"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\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"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\":\"32D\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"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\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}}}]}}}", "filters": "[{\"name\":\"Filter5f0c1579a14c4b460b04\",\"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\":\"Filter5af08250b5b9c07ed590\",\"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\":{}},{\"name\":\"Filterbf70b6bd66692898e9e2\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 88.0, - "width": 176.0, + "height": 88.00, + "width": 176.00, "x": 936.01, "y": 1151.21, - "z": 50000.0 + "z": 50000.00 }, { "config": "{\"name\":\"6aafea2035ebe005e335\",\"layouts\":[{\"id\":0,\"position\":{\"x\":591.9491884262527,\"y\":1167.2693501269214,\"z\":42000,\"width\":152,\"height\":56,\"tabOrder\":40000}}],\"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\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'After commitment discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera12c2a0dc4dccbe5b41b\",\"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\":{}},{\"name\":\"Filteraaa08787790362a27e0a\",\"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\":\"Filterd8fbd80db8e66d803e66\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filterdc6562c24d57b460dd8b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter2711f36306a3b2e28505\",\"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\":{}}]", - "height": 56.0, - "width": 152.0, + "height": 56.00, + "width": 152.00, "x": 591.95, "y": 1167.27, - "z": 42000.0 + "z": 42000.00 }, { "config": "{\"name\":\"7570965db561a09560b7\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":160,\"x\":0,\"y\":40,\"z\":45001,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Savings from \",\"textStyle\":{\"color\":\"#3393dd\"}}],\"horizontalTextAlignment\":\"center\"},{\"textRuns\":[{\"value\":\"negotiated discounts\",\"textStyle\":{\"color\":\"#3393dd\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"dffe9dde41e744568c27\"}", "filters": "[]", - "height": 48.0, - "width": 160.0, - "x": 0.0, - "y": 40.0, - "z": 45001.0 + "height": 48.00, + "width": 160.00, + "x": 0.00, + "y": 40.00, + "z": 45001.00 }, { "config": "{\"name\":\"7a018e0bd098068377d0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":582.8017794802174,\"y\":518.8642358417379,\"z\":78000,\"width\":32,\"height\":56,\"tabOrder\":76000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, - "x": 582.8, + "height": 56.00, + "width": 32.00, + "x": 582.80, "y": 518.86, - "z": 78000.0 + "z": 78000.00 }, { "config": "{\"name\":\"7a22c1c0708be7ce52ad\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":336,\"x\":0,\"y\":40,\"z\":45001,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Savings from\",\"textStyle\":{\"color\":\"#3393dd\"}}],\"horizontalTextAlignment\":\"center\"},{\"textRuns\":[{\"value\":\"commitment discounts\",\"textStyle\":{\"color\":\"#3393dd\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"443e0a8a014024006780\"}", "filters": "[]", - "height": 48.0, - "width": 336.0, - "x": 0.0, - "y": 40.0, - "z": 45001.0 + "height": 48.00, + "width": 336.00, + "x": 0.00, + "y": 40.00, + "z": 45001.00 }, { "config": "{\"name\":\"7a9610ba549e02b30011\",\"layouts\":[{\"id\":0,\"position\":{\"x\":16.00000000000003,\"y\":520.0000000000001,\"z\":70000,\"width\":128,\"height\":56,\"tabOrder\":68000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Savings plan usage\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"12pt\"}}]}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 128.0, - "x": 16.0, - "y": 520.0, - "z": 70000.0 + "height": 56.00, + "width": 128.00, + "x": 16.00, + "y": 520.00, + "z": 70000.00 }, { "config": "{\"name\":\"7b5dd3b6e550b071aaee\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":-0.8809946714031502,\"z\":0,\"width\":1280,\"height\":48,\"tabOrder\":0}}],\"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.0, - "width": 1280.0, - "x": 0.0, + "height": 48.00, + "width": 1280.00, + "x": 0.00, "y": -0.88, - "z": 0.0 + "z": 0.00 }, { "config": "{\"name\":\"7b9e293f567da4b9b714\",\"layouts\":[{\"id\":0,\"position\":{\"x\":902.8580294802173,\"y\":424,\"z\":28000,\"width\":32,\"height\":56,\"tabOrder\":26000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 902.86, - "y": 424.0, - "z": 28000.0 + "y": 424.00, + "z": 28000.00 }, { "config": "{\"name\":\"832eb4ec720073076db5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":750.8580294802174,\"y\":478.8642358417379,\"z\":84000,\"width\":152,\"height\":96,\"tabOrder\":82000}}],\"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\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Unused commitment (waste)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera12c2a0dc4dccbe5b41b\",\"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\":{}},{\"name\":\"Filteraaa08787790362a27e0a\",\"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\":\"Filterd8fbd80db8e66d803e66\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filterdc6562c24d57b460dd8b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter2711f36306a3b2e28505\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'Unused'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"objects\":{}}]", - "height": 96.0, - "width": 152.0, + "height": 96.00, + "width": 152.00, "x": 750.86, "y": 478.86, - "z": 84000.0 + "z": 84000.00 }, { "config": "{\"name\":\"884c7a901ed7012da13c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":430.8017794802174,\"y\":518.8642358417379,\"z\":87000,\"width\":32,\"height\":56,\"tabOrder\":85000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"+\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, - "x": 430.8, + "height": 56.00, + "width": 32.00, + "x": 430.80, "y": 518.86, - "z": 87000.0 + "z": 87000.00 }, { "config": "{\"name\":\"89040899288005501196\",\"layouts\":[{\"id\":0,\"position\":{\"x\":311.8182129371942,\"y\":1070.9839831653585,\"z\":35000,\"width\":128,\"height\":56,\"tabOrder\":33000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Savings plan usage\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"12pt\"}}]}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 128.0, + "height": 56.00, + "width": 128.00, "x": 311.82, "y": 1070.98, - "z": 35000.0 + "z": 35000.00 }, { "config": "{\"name\":\"89dcff01e343011d870c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":144,\"y\":328,\"z\":30000,\"width\":152,\"height\":56,\"tabOrder\":28000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'List 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\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera10ee5ceee4531a0e792\",\"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\":\"Filter87a9078edba7a348e2c9\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter035ee44664270008060d\",\"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\":\"'Standard'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 56.0, - "width": 152.0, - "x": 144.0, - "y": 328.0, - "z": 30000.0 + "height": 56.00, + "width": 152.00, + "x": 144.00, + "y": 328.00, + "z": 30000.00 }, { "config": "{\"name\":\"8b9ded55b1e977b94bdb\",\"layouts\":[{\"id\":0,\"position\":{\"x\":294.80256497284734,\"y\":614.8642358417379,\"z\":63000,\"width\":152,\"height\":56,\"tabOrder\":61000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Contracted cost after negotiated discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filter129e400c7dc2e0083c9c\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter70beaddc01344a005587\",\"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\":\"Filter4bf10f9ab06e46cd0d9a\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter6e7bab30ac398d0bee37\",\"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\":{}},{\"name\":\"Filter1680e704e005d70a06e6\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 56.0, - "width": 152.0, - "x": 294.8, + "height": 56.00, + "width": 152.00, + "x": 294.80, "y": 614.86, - "z": 63000.0 + "z": 63000.00 }, { "config": "{\"name\":\"937ea5c1ae0c2b926798\",\"layouts\":[{\"id\":0,\"position\":{\"x\":16,\"y\":5432,\"z\":92000,\"width\":1248,\"height\":304,\"tabOrder\":90000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.CommitmentDiscountName\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.x_SkuDescription\"},{\"queryRef\":\"Costs.x_SkuOrderName\"},{\"queryRef\":\"Costs.x_SkuOrderId\"},{\"queryRef\":\"Sum(Costs.ListCost)\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.BilledCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"x_SkuDescription\"},{\"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\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"ListCost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuOrderName\"},\"Name\":\"Costs.x_SkuOrderName\",\"NativeReferenceName\":\"x_SkuOrderName\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuOrderId\"},\"Name\":\"Costs.x_SkuOrderId\",\"NativeReferenceName\":\"x_SkuOrderId\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"Costs.CommitmentDiscountName\",\"NativeReferenceName\":\"CommitmentDiscountName\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"Type\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"}}}]},\"columnProperties\":{\"Costs.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"Costs.CommitmentDiscountName\":{}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"472.6959847227845D\"}}}},\"selector\":{\"metadata\":\"Costs.x_SkuDescription\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}}}}]}}}", "filters": "[{\"name\":\"Filter99d0a0928548c95e3087\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false},{\"name\":\"Filter2719e5872ea81ee82b88\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_FreeReason\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{}}]}},{\"name\":\"Filterd44666f24dd519a0dfed\",\"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\":{}},{\"name\":\"Filter4b6b22de60bf6bbb415c\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuOrderName\"}},\"type\":\"Categorical\",\"howCreated\":0,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},{\"name\":\"Filterf9b00e0aca972c6c201b\",\"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": 304.0, - "width": 1248.0, - "x": 16.0, - "y": 5432.0, - "z": 92000.0 + "height": 304.00, + "width": 1248.00, + "x": 16.00, + "y": 5432.00, + "z": 92000.00 }, { "config": "{\"name\":\"94ac4900553db7310608\",\"layouts\":[{\"id\":0,\"position\":{\"x\":446.8017794802174,\"y\":478.8642358417378,\"z\":71000,\"width\":152,\"height\":96,\"tabOrder\":69000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Contracted cost equivalent'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filter129e400c7dc2e0083c9c\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter70beaddc01344a005587\",\"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\":\"Filter4bf10f9ab06e46cd0d9a\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter6e7bab30ac398d0bee37\",\"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": 96.0, - "width": 152.0, - "x": 446.8, + "height": 96.00, + "width": 152.00, + "x": 446.80, "y": 478.86, - "z": 71000.0 + "z": 71000.00 }, { "config": "{\"name\":\"95c0d52d33b0ce0abb22\",\"layouts\":[{\"id\":0,\"position\":{\"x\":942.8580294802173,\"y\":189.6730017298514,\"z\":29000,\"width\":176,\"height\":112,\"tabOrder\":27000}}],\"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\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"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\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}}}]}}}", "filters": "[{\"name\":\"Filterf31c3d3aae424e79a635\",\"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\":\"'Purchase'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 112.0, - "width": 176.0, + "height": 112.00, + "width": 176.00, "x": 942.86, "y": 189.67, - "z": 29000.0 + "z": 29000.00 }, { "config": "{\"name\":\"970d7b47964704510030\",\"layouts\":[{\"id\":0,\"position\":{\"x\":936,\"y\":1038.4384798295835,\"z\":23000,\"width\":176,\"height\":104,\"tabOrder\":21000}}],\"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\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"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\":\"32D\"}}}}}],\"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\":\"'Commitment savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}}}]}}}", "filters": "[{\"name\":\"Filter5f0c1579a14c4b460b04\",\"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\":\"Filter5af08250b5b9c07ed590\",\"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\":{}},{\"name\":\"Filterbf70b6bd66692898e9e2\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter166be6ee82701315598b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 104.0, - "width": 176.0, - "x": 936.0, + "height": 104.00, + "width": 176.00, + "x": 936.00, "y": 1038.44, - "z": 23000.0 + "z": 23000.00 }, { "config": "{\"name\":\"98fb6e974e37d2921124\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1120.0054384262526,\"y\":1246.078116015035,\"z\":49000,\"width\":136,\"height\":88,\"tabOrder\":47000}}],\"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\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.5}}}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0.4}}}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Cost not included'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.5}}}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.3}}}}}}}]}}}", "filters": "[{\"name\":\"Filtera10ee5ceee4531a0e792\",\"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\":\"Filter0780a1c02b7ac2062e55\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filterf8dcfa0170682ac24502\",\"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\":{}}]", - "height": 88.0, - "width": 136.0, + "height": 88.00, + "width": 136.00, "x": 1120.01, "y": 1246.08, - "z": 49000.0 + "z": 49000.00 }, { "config": "{\"name\":\"9973e1f91b890d14029c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":278.91427946378485,\"y\":326.8642358444371,\"z\":34000,\"width\":32,\"height\":56,\"tabOrder\":32000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 278.91, "y": 326.86, - "z": 34000.0 + "z": 34000.00 }, { "config": "{\"name\":\"9b6679024349d2418e4a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":942.8580294802173,\"y\":406.80876588811356,\"z\":46000,\"width\":176,\"height\":88,\"tabOrder\":44000}}],\"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\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"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\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}}}]}}}", "filters": "[{\"name\":\"Filterf31c3d3aae424e79a635\",\"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\":\"Filter9737721cb5c78e09e20b\",\"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\":\"'Dynamic'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 88.0, - "width": 176.0, + "height": 88.00, + "width": 176.00, "x": 942.86, "y": 406.81, - "z": 46000.0 + "z": 46000.00 }, { "config": "{\"name\":\"9d43bcaad1ebd940bc8a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":446.8017794802174,\"y\":614.8642358417379,\"z\":73000,\"width\":152,\"height\":56,\"tabOrder\":71000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Contracted cost after negotiated discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filter70beaddc01344a005587\",\"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\":\"Filter4bf10f9ab06e46cd0d9a\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter6e7bab30ac398d0bee37\",\"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": 56.0, - "width": 152.0, - "x": 446.8, + "height": 56.00, + "width": 152.00, + "x": 446.80, "y": 614.86, - "z": 73000.0 + "z": 73000.00 }, { "config": "{\"name\":\"9e6d9b30785097c961e0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":16,\"y\":5112,\"z\":91000,\"width\":1248,\"height\":304,\"tabOrder\":89000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_SkuOrderName\"},{\"queryRef\":\"Costs.x_SkuOrderId\"},{\"queryRef\":\"Costs.CommitmentDiscountName\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.x_SkuDescription\"},{\"queryRef\":\"Sum(Costs.ListCost)\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.BilledCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"x_SkuDescription\"},{\"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\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"ListCost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuOrderName\"},\"Name\":\"Costs.x_SkuOrderName\",\"NativeReferenceName\":\"x_SkuOrderName\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuOrderId\"},\"Name\":\"Costs.x_SkuOrderId\",\"NativeReferenceName\":\"x_SkuOrderId\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"Costs.CommitmentDiscountName\",\"NativeReferenceName\":\"Name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"Type\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"}}}]},\"columnProperties\":{\"Costs.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"Costs.CommitmentDiscountName\":{\"displayName\":\"Name\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"472.6959847227845D\"}}}},\"selector\":{\"metadata\":\"Costs.x_SkuDescription\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}}}}]}}}", "filters": "[{\"name\":\"Filter99d0a0928548c95e3087\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false},{\"name\":\"Filter2719e5872ea81ee82b88\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_FreeReason\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{}}]}},{\"name\":\"Filterd44666f24dd519a0dfed\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter4b6b22de60bf6bbb415c\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuOrderName\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuOrderName\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}],[{\"Literal\":{\"Value\":\"'Azure plan'\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":0,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},{\"name\":\"Filter2fa1ac5a15a0847beef4\",\"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\":\"'Purchase'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 304.0, - "width": 1248.0, - "x": 16.0, - "y": 5112.0, - "z": 91000.0 + "height": 304.00, + "width": 1248.00, + "x": 16.00, + "y": 5112.00, + "z": 91000.00 }, { "config": "{\"name\":\"a165e7c58307dd52a777\",\"layouts\":[{\"id\":0,\"position\":{\"x\":902.8580294802173,\"y\":328,\"z\":60000,\"width\":32,\"height\":56,\"tabOrder\":58000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 902.86, - "y": 328.0, - "z": 60000.0 + "y": 328.00, + "z": 60000.00 }, { "config": "{\"name\":\"a3d601ce76d983430390\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1120,\"y\":1038.4384798295835,\"z\":47000,\"width\":136,\"height\":104,\"tabOrder\":45000}}],\"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\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.5}}}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.5}}}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Cost not included'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.5}}}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}]}}}", "filters": "[{\"name\":\"Filtera10ee5ceee4531a0e792\",\"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\":\"Filter87a9078edba7a348e2c9\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter1f5b26abd21cd013de0c\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingCategory\"}},\"type\":\"Categorical\",\"howCreated\":1},{\"name\":\"Filterf1bb82286209506dad41\",\"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": 104.0, - "width": 136.0, - "x": 1120.0, + "height": 104.00, + "width": 136.00, + "x": 1120.00, "y": 1038.44, - "z": 47000.0 + "z": 47000.00 }, { "config": "{\"name\":\"a625477e0e21146ebec4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":743.8182129371943,\"y\":1030.9839831653585,\"z\":38000,\"width\":152,\"height\":96,\"tabOrder\":36000}}],\"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\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Unused commitment (waste)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera12c2a0dc4dccbe5b41b\",\"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\":{}},{\"name\":\"Filteraaa08787790362a27e0a\",\"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\":\"Filterd8fbd80db8e66d803e66\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filterdc6562c24d57b460dd8b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter2711f36306a3b2e28505\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'Unused'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"objects\":{}}]", - "height": 96.0, - "width": 152.0, + "height": 96.00, + "width": 152.00, "x": 743.82, "y": 1030.98, - "z": 38000.0 + "z": 38000.00 }, { "config": "{\"name\":\"a6e70525bec823b07650\",\"layouts\":[{\"id\":0,\"position\":{\"x\":598.8017794802174,\"y\":478.8642358417379,\"z\":67000,\"width\":152,\"height\":96,\"tabOrder\":65000}}],\"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\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"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\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera12c2a0dc4dccbe5b41b\",\"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\":{}},{\"name\":\"Filteraaa08787790362a27e0a\",\"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\":\"Filter2711f36306a3b2e28505\",\"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\":{}}]", - "height": 96.0, - "width": 152.0, - "x": 598.8, + "height": 96.00, + "width": 152.00, + "x": 598.80, "y": 478.86, - "z": 67000.0 + "z": 67000.00 }, { "config": "{\"name\":\"aa4f651b0cb85b51080d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":942.8580294802173,\"y\":310.80876588811356,\"z\":33000,\"width\":176,\"height\":88,\"tabOrder\":31000}}],\"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\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"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\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}}}]}}}", "filters": "[{\"name\":\"Filterf31c3d3aae424e79a635\",\"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\":\"Filter4de46032594cdc70a323\",\"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\":\"'Standard'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 88.0, - "width": 176.0, + "height": 88.00, + "width": 176.00, "x": 942.86, "y": 310.81, - "z": 33000.0 + "z": 33000.00 }, { "config": "{\"name\":\"af10ae5ac658c62a2e35\",\"layouts\":[{\"id\":0,\"position\":{\"x\":16.00505056554392,\"y\":2158.738223553031,\"z\":2000,\"width\":1248,\"height\":272,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.CommitmentDiscountName\"},{\"queryRef\":\"Sum(Costs.x_CommitmentDiscountPercent)\"},{\"queryRef\":\"Sum(Costs.ContractedUnitPrice)\"},{\"queryRef\":\"Sum(Costs.x_EffectiveUnitPrice)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveUnitPrice\"},\"Name\":\"Sum(Costs.x_EffectiveUnitPrice)\",\"NativeReferenceName\":\"x_EffectiveUnitPrice1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedUnitPrice\"},\"Name\":\"Sum(Costs.ContractedUnitPrice)\",\"NativeReferenceName\":\"ContractedUnitPrice1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"Costs.CommitmentDiscountName\",\"NativeReferenceName\":\"CommitmentDiscountName\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"CommitmentDiscountType\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountPercent\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_CommitmentDiscountPercent)\",\"NativeReferenceName\":\"x_CommitmentDiscountPercent\"}]},\"drillFilterOtherVisuals\":true,\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment price discount (contracted - effective)'\"}}}}}]}}}", "filters": "[{\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_CommitmentDiscountPercent\"}},\"Function\":0}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountPercent\"}},\"Function\":0}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false},{\"name\":\"d0fba154662f0747581f\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountId\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountId\"}},\"Right\":{\"Literal\":{\"Value\":\"''\"}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 272.0, - "width": 1248.0, + "height": 272.00, + "width": 1248.00, "x": 16.01, "y": 2158.74, - "z": 2000.0 + "z": 2000.00 }, { "config": "{\"name\":\"b541c9ab1b25b9b73903\",\"layouts\":[{\"id\":0,\"position\":{\"x\":440.00000000000006,\"y\":1031.2192431822218,\"z\":37000,\"width\":152,\"height\":96,\"tabOrder\":35000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Contracted cost equivalent'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filter129e400c7dc2e0083c9c\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter70beaddc01344a005587\",\"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\":\"Filter4bf10f9ab06e46cd0d9a\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter6e7bab30ac398d0bee37\",\"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\":{}},{\"name\":\"Filter1680e704e005d70a06e6\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 96.0, - "width": 152.0, - "x": 440.0, + "height": 96.00, + "width": 152.00, + "x": 440.00, "y": 1031.22, - "z": 37000.0 + "z": 37000.00 }, { "config": "{\"name\":\"b607f2470e344595035b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":336,\"x\":0,\"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\":{\"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\"}}]}},\"parentGroupName\":\"443e0a8a014024006780\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 336.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 32.00, + "width": 336.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"b88dab428ab5ed9e4e20\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":936,\"z\":66000,\"width\":1280,\"height\":80,\"tabOrder\":64000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Commitment savings\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"Below is commitment savings only without factoring in list cost since it is not always available for commitment discounts. For details, see the the \\\"Missing list price/cost\\\" section below.\"}]}]}}]},\"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.0, - "width": 1280.0, - "x": 0.0, - "y": 936.0, - "z": 66000.0 + "height": 80.00, + "width": 1280.00, + "x": 0.00, + "y": 936.00, + "z": 66000.00 }, { "config": "{\"name\":\"b8e878a3a08349d9d04c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":294.8580294802174,\"y\":518.8642358417379,\"z\":62000,\"width\":152,\"height\":56,\"tabOrder\":60000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Contracted cost equivalent'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filter129e400c7dc2e0083c9c\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter70beaddc01344a005587\",\"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\":\"Filter4bf10f9ab06e46cd0d9a\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter6e7bab30ac398d0bee37\",\"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\":{}},{\"name\":\"Filter1680e704e005d70a06e6\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 56.0, - "width": 152.0, + "height": 56.00, + "width": 152.00, "x": 294.86, "y": 518.86, - "z": 62000.0 + "z": 62000.00 }, { "config": "{\"name\":\"c0612c06c510235783cd\",\"layouts\":[{\"id\":0,\"position\":{\"x\":902.8580294802173,\"y\":616.0000000000001,\"z\":81000,\"width\":32,\"height\":56,\"tabOrder\":79000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 902.86, - "y": 616.0, - "z": 81000.0 + "y": 616.00, + "z": 81000.00 }, { "config": "{\"name\":\"c62a01a56aa07d4a73c2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":3312,\"z\":8000,\"width\":1280,\"height\":112,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Missing list price/cost\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"The following SKUs are not free but the \"},{\"value\":\"ListUnitPrice and \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"ListCost are both 0. This is the result of 2 known bugs in Cost Management where some rows are missing these values (for example, for reservations) and where, when a value is missing, it is shown as \\\"0\\\" instead of null. Please contact support to help raise the priority of either bug if they are impeding your reporting. Total savings will be lower than expected due to these records because we cannot accurately calculate negotiated discounts. \"},{\"value\":\"For additional details, see \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"issue #873\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://github.com/microsoft/finops-toolkit/issues/873\"},{\"value\":\". To prioritize a workaround in the toolkit reports, please leave a thumbs up (👍) on \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"issue #835.\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://github.com/microsoft/finops-toolkit/issues/835\"}]}]}}]},\"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": 112.0, - "width": 1280.0, - "x": 0.0, - "y": 3312.0, - "z": 8000.0 + "height": 112.00, + "width": 1280.00, + "x": 0.00, + "y": 3312.00, + "z": 8000.00 }, { "config": "{\"name\":\"cf153ba4a4d84456c0cc\",\"layouts\":[{\"id\":0,\"position\":{\"x\":942.8580294802173,\"y\":598.8087658881136,\"z\":76000,\"width\":176,\"height\":88,\"tabOrder\":74000}}],\"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\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"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\":\"32D\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"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\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}}}]}}}", "filters": "[{\"name\":\"Filter5f0c1579a14c4b460b04\",\"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\":\"Filter5af08250b5b9c07ed590\",\"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": 88.0, - "width": 176.0, + "height": 88.00, + "width": 176.00, "x": 942.86, "y": 598.81, - "z": 76000.0 + "z": 76000.00 }, { "config": "{\"name\":\"d06c025c676386ea2d22\",\"layouts\":[{\"id\":0,\"position\":{\"x\":8,\"y\":1248,\"z\":89000,\"width\":696,\"height\":216,\"tabOrder\":87000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ChargeCategory\"},{\"queryRef\":\"Costs.CommitmentDiscountStatus\"},{\"queryRef\":\"Costs.PricingCategory\"},{\"queryRef\":\"Costs.x_PricingSubcategory\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Sum(Costs.x_CommitmentDiscountSavings)\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"CommitmentDiscountType\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"},\"Name\":\"Costs.CommitmentDiscountStatus\",\"NativeReferenceName\":\"CommitmentDiscountStatus\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_PricingSubcategory\"},\"Name\":\"Costs.x_PricingSubcategory\",\"NativeReferenceName\":\"x_PricingSubcategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingCategory\"},\"Name\":\"Costs.PricingCategory\",\"NativeReferenceName\":\"PricingCategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeCategory\"},\"Name\":\"Costs.ChargeCategory\",\"NativeReferenceName\":\"ChargeCategory\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"x_CommitmentDiscountSavings\"}]},\"drillFilterOtherVisuals\":true}}", "filters": "[]", - "height": 216.0, - "width": 696.0, - "x": 8.0, - "y": 1248.0, - "z": 89000.0 + "height": 216.00, + "width": 696.00, + "x": 8.00, + "y": 1248.00, + "z": 89000.00 }, { "config": "{\"name\":\"d0f5f8c114198a15000b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":144,\"y\":424,\"z\":44000,\"width\":152,\"height\":56,\"tabOrder\":42000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'List 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\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera10ee5ceee4531a0e792\",\"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\":\"Filter87a9078edba7a348e2c9\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filterac2af06bbba88bdc1720\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter0784f6c3eede70625b0e\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter9f9b168e613673359517\",\"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\":\"'Dynamic'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 56.0, - "width": 152.0, - "x": 144.0, - "y": 424.0, - "z": 44000.0 + "height": 56.00, + "width": 152.00, + "x": 144.00, + "y": 424.00, + "z": 44000.00 }, { "config": "{\"name\":\"d461adaf5004e396c703\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":2448,\"z\":17000,\"width\":1280,\"height\":128,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Missing contracted cost\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"The following SKUs are not free but the \"},{\"value\":\"ContractedCost was \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"0. This is the result of 2 known bugs in Cost Management where MCA accounts do not have contracted price/cost for reservations and when missing, it is shown as \\\"0\\\" instead of null. We have copied EffectiveCost to support calculating partial savings, but the savings will be incomplete due to the missing data. Please contact support to help raise the priority of either bug if they are impeding your reporting. Commitment cost savings cannot be calculated and total savings will be lower than expected due to these values being missing. For additional details, see \"},{\"value\":\"issue #874\",\"textStyle\":{},\"url\":\"https://github.com/microsoft/finops-toolkit/issues/874\"},{\"value\":\". To prioritize a workaround in the toolkit reports, please leave a thumbs up (👍) on \"},{\"value\":\"issue #835.\",\"textStyle\":{},\"url\":\"https://github.com/microsoft/finops-toolkit/issues/835\"}]}]}}]},\"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": 128.0, - "width": 1280.0, - "x": 0.0, - "y": 2448.0, - "z": 17000.0 + "height": 128.00, + "width": 1280.00, + "x": 0.00, + "y": 2448.00, + "z": 17000.00 }, { "config": "{\"name\":\"d6d47e51118328c0aa8e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":144,\"y\":520.0000000000001,\"z\":36000,\"width\":152,\"height\":56,\"tabOrder\":34000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'List 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\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera10ee5ceee4531a0e792\",\"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\":\"Filter87a9078edba7a348e2c9\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filterac2af06bbba88bdc1720\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter2664c1e9ca84a4244e7e\",\"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\":{}},{\"name\":\"Filter0784f6c3eede70625b0e\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 56.0, - "width": 152.0, - "x": 144.0, - "y": 520.0, - "z": 36000.0 + "height": 56.00, + "width": 152.00, + "x": 144.00, + "y": 520.00, + "z": 36000.00 }, { "config": "{\"name\":\"d8695bb08a4622bc4699\",\"layouts\":[{\"id\":0,\"position\":{\"x\":16,\"y\":3024,\"z\":14000,\"width\":1248,\"height\":272,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ChargeCategory\"},{\"queryRef\":\"Costs.x_SkuDescription\"},{\"queryRef\":\"Costs.x_SkuRegion\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.CommitmentDiscountName\"},{\"queryRef\":\"Costs.ContractedUnitPrice\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Costs.x_EffectiveUnitPrice\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.PricingQuantity)\"},{\"queryRef\":\"Costs.PricingUnit\"},{\"queryRef\":\"Costs.x_PricingBlockSize\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"x_SkuDescription\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveUnitPrice\"},\"Name\":\"Costs.x_EffectiveUnitPrice\",\"NativeReferenceName\":\"x_EffectiveUnitPrice\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedUnitPrice\"},\"Name\":\"Costs.ContractedUnitPrice\",\"NativeReferenceName\":\"ContractedUnitPrice\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"CommitmentDiscountType\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeCategory\"},\"Name\":\"Costs.ChargeCategory\",\"NativeReferenceName\":\"ChargeCategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"Costs.CommitmentDiscountName\",\"NativeReferenceName\":\"CommitmentDiscountName\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuRegion\"},\"Name\":\"Costs.x_SkuRegion\",\"NativeReferenceName\":\"x_SkuRegion\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.PricingQuantity)\",\"NativeReferenceName\":\"PricingQuantity\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingUnit\"},\"Name\":\"Costs.PricingUnit\",\"NativeReferenceName\":\"PricingUnit\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_PricingBlockSize\"},\"Name\":\"Costs.x_PricingBlockSize\",\"NativeReferenceName\":\"x_PricingBlockSize\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"}}}]},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"455.2380618884485D\"}}}},\"selector\":{\"metadata\":\"Costs.x_SkuDescription\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Missing List Cost'\"}}}}}]}}}", "filters": "[{\"name\":\"Filterfc817c6d46d45a58b9b6\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_FreeReason\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"6d55f92d329cdc9b6de0\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SourceChanges\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Contains\":{\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SourceChanges\"}},\"Right\":{\"Literal\":{\"Value\":\"'ContractedUnitPriceMissing'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 272.0, - "width": 1248.0, - "x": 16.0, - "y": 3024.0, - "z": 14000.0 + "height": 272.00, + "width": 1248.00, + "x": 16.00, + "y": 3024.00, + "z": 14000.00 }, { "config": "{\"name\":\"d950dd2e2d901cc051c3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":112,\"x\":24,\"y\":8,\"z\":44000,\"tabOrder\":0}}],\"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\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0.2}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"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\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"dffe9dde41e744568c27\"}", "filters": "[{\"name\":\"Filterf31c3d3aae424e79a635\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter65175bcc836ce25cd031\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 48.0, - "width": 112.0, - "x": 24.0, - "y": 8.0, - "z": 44000.0 + "height": 48.00, + "width": 112.00, + "x": 24.00, + "y": 8.00, + "z": 44000.00 }, { "config": "{\"name\":\"db83ba666b4a89133e11\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1232,\"y\":-0.8809946714031502,\"z\":19000,\"width\":48,\"height\":48,\"tabOrder\":19000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}},\"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/rateoptimization#dq'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}]}}}", "filters": "[]", - "height": 48.0, - "width": 48.0, - "x": 1232.0, + "height": 48.00, + "width": 48.00, + "x": 1232.00, "y": -0.88, - "z": 19000.0 + "z": 19000.00 }, { "config": "{\"name\":\"de7847efa013da12d0d0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":16,\"y\":2592,\"z\":16000,\"width\":1248,\"height\":272,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ChargeCategory\"},{\"queryRef\":\"Costs.x_SkuDescription\"},{\"queryRef\":\"Costs.x_SkuRegion\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.CommitmentDiscountName\"},{\"queryRef\":\"Costs.ContractedUnitPrice\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Costs.x_EffectiveUnitPrice\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.PricingQuantity)\"},{\"queryRef\":\"Costs.PricingUnit\"},{\"queryRef\":\"Costs.x_PricingBlockSize\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"x_SkuDescription\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveUnitPrice\"},\"Name\":\"Costs.x_EffectiveUnitPrice\",\"NativeReferenceName\":\"x_EffectiveUnitPrice\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedUnitPrice\"},\"Name\":\"Costs.ContractedUnitPrice\",\"NativeReferenceName\":\"ContractedUnitPrice\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"CommitmentDiscountType\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeCategory\"},\"Name\":\"Costs.ChargeCategory\",\"NativeReferenceName\":\"ChargeCategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"Costs.CommitmentDiscountName\",\"NativeReferenceName\":\"CommitmentDiscountName\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuRegion\"},\"Name\":\"Costs.x_SkuRegion\",\"NativeReferenceName\":\"x_SkuRegion\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.PricingQuantity)\",\"NativeReferenceName\":\"PricingQuantity\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingUnit\"},\"Name\":\"Costs.PricingUnit\",\"NativeReferenceName\":\"PricingUnit\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_PricingBlockSize\"},\"Name\":\"Costs.x_PricingBlockSize\",\"NativeReferenceName\":\"x_PricingBlockSize\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"}}}]},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"455.2380618884485D\"}}}},\"selector\":{\"metadata\":\"Costs.x_SkuDescription\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Missing List Cost'\"}}}}}]}}}", "filters": "[{\"name\":\"Filterfc817c6d46d45a58b9b6\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_FreeReason\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"b814b90e68dd4b3975e2\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SourceChanges\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Contains\":{\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SourceChanges\"}},\"Right\":{\"Literal\":{\"Value\":\"'ContractedCostMissing'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 272.0, - "width": 1248.0, - "x": 16.0, - "y": 2592.0, - "z": 16000.0 + "height": 272.00, + "width": 1248.00, + "x": 16.00, + "y": 2592.00, + "z": 16000.00 }, { "config": "{\"name\":\"de7ce8ca360ca7ec8d9d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":5000,\"z\":90000,\"width\":1280,\"height\":96,\"tabOrder\":88000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Commitment orders\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"Commitment purchases are identified by the x_SkuOrderId. To map commitment usage back to the purchase, you will need to use this column.\"}]}]}}]},\"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": 96.0, - "width": 1280.0, - "x": 0.0, - "y": 5000.0, - "z": 90000.0 + "height": 96.00, + "width": 1280.00, + "x": 0.00, + "y": 5000.00, + "z": 90000.00 }, { "config": "{\"name\":\"dedce2f6305e0070de96\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":1470.7382235530315,\"z\":5000,\"width\":1280,\"height\":112,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Unit price discounts\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"Calculating savings at a price per unit level is fundamentally the same with list, contracted, and effective unit prices, but since the price changes per SKU, the key to understanding savings at this level is evaluating each row with the right supplemental data. Note that Cost Management is missing some values that makes this incomplete. For simplicity, the tables in this section only include rows where savings can be calculated. View the sections below to identify data gaps.\"}]}]}}]},\"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.0, - "width": 1280.0, - "x": 0.0, + "height": 112.00, + "width": 1280.00, + "x": 0.00, "y": 1470.74, - "z": 5000.0 + "z": 5000.00 }, { "config": "{\"name\":\"dfeca67a89a96db8b207\",\"layouts\":[{\"id\":0,\"position\":{\"x\":15.998640309133702,\"y\":4185.23822355303,\"z\":9000,\"width\":1248,\"height\":304,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ChargeCategory\"},{\"queryRef\":\"Costs.x_SkuDescription\"},{\"queryRef\":\"Sum(Costs.PricingQuantity)\"},{\"queryRef\":\"Costs.PricingUnit\"},{\"queryRef\":\"Sum(Costs.x_PricingBlockSize)\"},{\"queryRef\":\"Sum(Costs.ListUnitPrice)\"},{\"queryRef\":\"Costs.ContractedUnitPrice\"},{\"queryRef\":\"Sum(Costs.x_EffectiveUnitPrice)\"},{\"queryRef\":\"Costs.x_BilledUnitPrice\"},{\"queryRef\":\"Sum(Costs.BilledCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Sum(Costs.ListCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveUnitPrice\"},\"Name\":\"Sum(Costs.x_EffectiveUnitPrice)\",\"NativeReferenceName\":\"x_EffectiveUnitPrice1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListUnitPrice\"},\"Name\":\"Sum(Costs.ListUnitPrice)\",\"NativeReferenceName\":\"ListUnitPrice1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"x_SkuDescription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedUnitPrice\"},\"Name\":\"Costs.ContractedUnitPrice\",\"NativeReferenceName\":\"ContractedUnitPrice\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_BilledUnitPrice\"},\"Name\":\"Costs.x_BilledUnitPrice\",\"NativeReferenceName\":\"x_BilledUnitPrice\"},{\"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\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeCategory\"},\"Name\":\"Costs.ChargeCategory\",\"NativeReferenceName\":\"ChargeCategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_PricingBlockSize\"},\"Name\":\"Sum(Costs.x_PricingBlockSize)\",\"NativeReferenceName\":\"x_PricingBlockSize1\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.PricingQuantity)\",\"NativeReferenceName\":\"PricingQuantity\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingUnit\"},\"Name\":\"Costs.PricingUnit\",\"NativeReferenceName\":\"PricingUnit\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"ListCost\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"}}}]},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"306.7688229176549D\"}}}},\"selector\":{\"metadata\":\"Costs.x_SkuDescription\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}}}}]}}}", "filters": "[{\"name\":\"Filter99d0a0928548c95e3087\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false},{\"name\":\"Filter29d3511900b08a46964b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_FreeReason\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_FreeReason\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}],[{\"Literal\":{\"Value\":\"'Other'\"}}],[{\"Literal\":{\"Value\":\"'Preview'\"}}],[{\"Literal\":{\"Value\":\"'Trial'\"}}],[{\"Literal\":{\"Value\":\"'Unknown Unused Commitment'\"}}],[{\"Literal\":{\"Value\":\"'Unknown Used Commitment'\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},{\"name\":\"Filter3ce81818518db0292705\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingCategory\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false}]", - "height": 304.0, - "width": 1248.0, - "x": 16.0, + "height": 304.00, + "width": 1248.00, + "x": 16.00, "y": 4185.24, - "z": 9000.0 + "z": 9000.00 }, { "config": "{\"name\":\"dffe9dde41e744568c27\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":160,\"x\":206.91427948010266,\"y\":662.8642358417568,\"z\":21000,\"tabOrder\":91000}}],\"singleVisualGroup\":{\"displayName\":\"Group 1\",\"groupMode\":0}}", - "height": 88.0, - "width": 160.0, + "height": 88.00, + "width": 160.00, "x": 206.91, "y": 662.86, - "z": 21000.0 + "z": 21000.00 }, { "config": "{\"name\":\"e24a4c04c5ba05e2552e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":608,\"y\":792,\"z\":83000,\"width\":656,\"height\":112,\"tabOrder\":81000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"⚠️ Cannot calculate full cost savings\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"Cost Management is missing the list and contracted cost for some records. Without list cost, we cannot calculate the full negotiated cost savings and, without contracted cost, we cannot calculate the full commitment discount savings. To track resolution of these bugs, subscribe to \"},{\"value\":\"issue #873\",\"textStyle\":{},\"url\":\"https://github.com/microsoft/finops-toolkit/issues/873\"},{\"value\":\" and \"},{\"value\":\"issue #874\",\"textStyle\":{},\"url\":\"https://github.com/microsoft/finops-toolkit/issues/874\"},{\"value\":\".\"}]}]}}]},\"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\":\"'#FFEECC'\"}}}}}}}]}}}", "filters": "[]", - "height": 112.0, - "width": 656.0, - "x": 608.0, - "y": 792.0, - "z": 83000.0 + "height": 112.00, + "width": 656.00, + "x": 608.00, + "y": 792.00, + "z": 83000.00 }, { "config": "{\"name\":\"e29777238b95a620a83a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":430.8017794802174,\"y\":614.8642358417379,\"z\":86000,\"width\":32,\"height\":56,\"tabOrder\":84000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"+\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, - "x": 430.8, + "height": 56.00, + "width": 32.00, + "x": 430.80, "y": 614.86, - "z": 86000.0 + "z": 86000.00 }, { "config": "{\"name\":\"e3e10c7136b150a1658c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":295.8882854926301,\"y\":424,\"z\":45000,\"width\":152,\"height\":56,\"tabOrder\":43000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Contracted cost after negotiated discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filter129e400c7dc2e0083c9c\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter70beaddc01344a005587\",\"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\":\"Filter4bf10f9ab06e46cd0d9a\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter1680e704e005d70a06e6\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter613c55630ab960604849\",\"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\":\"'Dynamic'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 56.0, - "width": 152.0, + "height": 56.00, + "width": 152.00, "x": 295.89, - "y": 424.0, - "z": 45000.0 + "y": 424.00, + "z": 45000.00 }, { "config": "{\"name\":\"e40af102411acb99d52c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":-0.0013596908662998957,\"y\":3737.23822355303,\"z\":13000,\"width\":1280,\"height\":112,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Unknown commitment usage\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"The following charges are for used and unused commitments that have no billed or effective cost. In general, all commitment usage should have 0 billed but some effective (amortized) cost. At the time this report was created, it was not clear why some records were being written with 0 quantity and others with a 0 unit price. Neither is expected and may be due to using a test account. If you have rows here, please contact support to get a better explanation of these rows.\"}]}]}}]},\"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\":\"'#FFCC66'\"}}}}}}}]}}}", "filters": "[]", - "height": 112.0, - "width": 1280.0, - "x": 0.0, + "height": 112.00, + "width": 1280.00, + "x": 0.00, "y": 3737.24, - "z": 13000.0 + "z": 13000.00 }, { "config": "{\"name\":\"e986fb403072c9c2310e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":16,\"y\":3432,\"z\":3000,\"width\":1248,\"height\":296,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ChargeCategory\"},{\"queryRef\":\"Costs.x_SkuDescription\"},{\"queryRef\":\"Costs.x_SkuRegion\"},{\"queryRef\":\"Costs.CommitmentDiscountType\"},{\"queryRef\":\"Costs.CommitmentDiscountName\"},{\"queryRef\":\"Costs.ListUnitPrice\"},{\"queryRef\":\"Sum(Costs.ListCost)\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.PricingQuantity)\"},{\"queryRef\":\"Costs.PricingUnit\"},{\"queryRef\":\"Costs.x_PricingBlockSize\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"ListCost1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"x_SkuDescription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListUnitPrice\"},\"Name\":\"Costs.ListUnitPrice\",\"NativeReferenceName\":\"ListUnitPrice\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"CommitmentDiscountType\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeCategory\"},\"Name\":\"Costs.ChargeCategory\",\"NativeReferenceName\":\"ChargeCategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"Costs.CommitmentDiscountName\",\"NativeReferenceName\":\"CommitmentDiscountName\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuRegion\"},\"Name\":\"Costs.x_SkuRegion\",\"NativeReferenceName\":\"x_SkuRegion\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.PricingQuantity)\",\"NativeReferenceName\":\"PricingQuantity\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingUnit\"},\"Name\":\"Costs.PricingUnit\",\"NativeReferenceName\":\"PricingUnit\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_PricingBlockSize\"},\"Name\":\"Costs.x_PricingBlockSize\",\"NativeReferenceName\":\"x_PricingBlockSize\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"421.5054350700155D\"}}}},\"selector\":{\"metadata\":\"Costs.x_SkuDescription\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Missing List Cost'\"}}}}}]}}}", "filters": "[{\"name\":\"Filtercc429bd6bb44e04e890a\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_FreeReason\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"2686c6ea5f58d6349f92\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SourceChanges\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Or\":{\"Left\":{\"Contains\":{\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SourceChanges\"}},\"Right\":{\"Literal\":{\"Value\":\"'ListCostMissing'\"}}}},\"Right\":{\"Contains\":{\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SourceChanges\"}},\"Right\":{\"Literal\":{\"Value\":\"'ListUnitPriceMissing'\"}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 296.0, - "width": 1248.0, - "x": 16.0, - "y": 3432.0, - "z": 3000.0 + "height": 296.00, + "width": 1248.00, + "x": 16.00, + "y": 3432.00, + "z": 3000.00 }, { "config": "{\"name\":\"eb44059e7b0e42ab46e0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1120.0054384262526,\"y\":1150.078116015035,\"z\":48000,\"width\":136,\"height\":88,\"tabOrder\":46000}}],\"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\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.5}}}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.5}}}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Cost not included'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.5}}}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}]}}}", "filters": "[{\"name\":\"Filtera10ee5ceee4531a0e792\",\"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\":\"Filter87a9078edba7a348e2c9\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter1f5b26abd21cd013de0c\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingCategory\"}},\"type\":\"Categorical\",\"howCreated\":1},{\"name\":\"Filterf1bb82286209506dad41\",\"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\":{}},{\"name\":\"Filterf48f2a787a3d1ebbde73\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]", - "height": 88.0, - "width": 136.0, + "height": 88.00, + "width": 136.00, "x": 1120.01, "y": 1150.08, - "z": 48000.0 + "z": 48000.00 }, { "config": "{\"name\":\"ef301a0fd0a5a2c8d406\",\"layouts\":[{\"id\":0,\"position\":{\"x\":14.858029480217397,\"y\":326.8642358417379,\"z\":31000,\"width\":136,\"height\":56,\"tabOrder\":29000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"On-demand usage\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"12pt\"}}]}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 136.0, + "height": 56.00, + "width": 136.00, "x": 14.86, "y": 326.86, - "z": 31000.0 + "z": 31000.00 }, { "config": "{\"name\":\"f1146d8a2c7963067a00\",\"layouts\":[{\"id\":0,\"position\":{\"x\":304,\"y\":192,\"z\":27000,\"width\":176,\"height\":96,\"tabOrder\":25000}}],\"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\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Contracted cost after negotiated discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filter129e400c7dc2e0083c9c\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter70beaddc01344a005587\",\"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\":\"'Purchase'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]", - "height": 96.0, - "width": 176.0, - "x": 304.0, - "y": 192.0, - "z": 27000.0 + "height": 96.00, + "width": 176.00, + "x": 304.00, + "y": 192.00, + "z": 27000.00 }, { "config": "{\"name\":\"f1f0d2a920ce0b10eb43\",\"layouts\":[{\"id\":0,\"position\":{\"x\":806.8580294802174,\"y\":702.8642358417379,\"z\":82000,\"width\":128,\"height\":80,\"tabOrder\":80000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Total savings\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"18pt\",\"color\":\"#7fba00\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 80.0, - "width": 128.0, + "height": 80.00, + "width": 128.00, "x": 806.86, "y": 702.86, - "z": 82000.0 + "z": 82000.00 }, { "config": "{\"name\":\"f31832b90b42e30a65ec\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":2880,\"z\":15000,\"width\":1280,\"height\":128,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Missing contracted price\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"The following SKUs are not free but the \"},{\"value\":\"ContractedUnitPrice is \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"0. This is the result of 2 known bugs in Cost Management where some rows are missing these values (for example, for reservations) and where, when a value is missing, it is shown as \\\"0\\\" instead of null. \"},{\"value\":\"We have copied EffectiveCost to support calculating partial savings, but the savings will be incomplete due to the missing data. \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Please contact support to help raise the priority of either bug if they are impeding your reporting. Commitment unit price savings cannot be calculated for these rows as-is. \"},{\"value\":\"For additional details, see \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"issue #874\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://github.com/microsoft/finops-toolkit/issues/874\"},{\"value\":\". To prioritize a workaround in the toolkit reports, please leave a thumbs up (👍) on \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"issue #835\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://github.com/microsoft/finops-toolkit/issues/835\"},{\"value\":\".\"}]}]}}]},\"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": 128.0, - "width": 1280.0, - "x": 0.0, - "y": 2880.0, - "z": 15000.0 + "height": 128.00, + "width": 1280.00, + "x": 0.00, + "y": 2880.00, + "z": 15000.00 }, { "config": "{\"name\":\"f783e62e0c95d7c6e4b2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":278.91427946378485,\"y\":614.8642358444372,\"z\":64000,\"width\":32,\"height\":56,\"tabOrder\":62000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 278.91, "y": 614.86, - "z": 64000.0 + "z": 64000.00 }, { "config": "{\"name\":\"f94bfcd3a097b3eb0436\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":160,\"x\":0,\"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\":{\"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\"}}]}},\"parentGroupName\":\"dffe9dde41e744568c27\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", - "height": 32.0, - "width": 160.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 + "height": 32.00, + "width": 160.00, + "x": 0.00, + "y": 0.00, + "z": 0.00 }, { "config": "{\"name\":\"f99b2603a8a2ee095e20\",\"layouts\":[{\"id\":0,\"position\":{\"x\":15.998640309133702,\"y\":4681.238223553032,\"z\":6000,\"width\":1248,\"height\":304,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ChargeCategory\"},{\"queryRef\":\"Costs.x_SkuDescription\"},{\"queryRef\":\"Sum(Costs.PricingQuantity)\"},{\"queryRef\":\"Costs.PricingUnit\"},{\"queryRef\":\"Sum(Costs.x_PricingBlockSize)\"},{\"queryRef\":\"Sum(Costs.BilledCost)\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.ContractedCost)\"},{\"queryRef\":\"Sum(Costs.ListCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"Costs.x_SkuDescription\",\"NativeReferenceName\":\"x_SkuDescription\"},{\"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\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeCategory\"},\"Name\":\"Costs.ChargeCategory\",\"NativeReferenceName\":\"ChargeCategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_PricingBlockSize\"},\"Name\":\"Sum(Costs.x_PricingBlockSize)\",\"NativeReferenceName\":\"x_PricingBlockSize1\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingQuantity\"}},\"Function\":0},\"Name\":\"Sum(Costs.PricingQuantity)\",\"NativeReferenceName\":\"PricingQuantity\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingUnit\"},\"Name\":\"Costs.PricingUnit\",\"NativeReferenceName\":\"PricingUnit\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"ListCost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"}}}]},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"472.6959847227845D\"}}}},\"selector\":{\"metadata\":\"Costs.x_SkuDescription\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"93.76234956166823D\"}}}},\"selector\":{\"metadata\":\"Costs.PricingUnit\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}}}}]}}}", "filters": "[{\"name\":\"Filter99d0a0928548c95e3087\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false},{\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"BilledCost\"}},\"Function\":0}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BilledCost\"}},\"Function\":0}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false},{\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false},{\"name\":\"Filter2719e5872ea81ee82b88\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_FreeReason\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_FreeReason\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Preview'\"}}],[{\"Literal\":{\"Value\":\"'Trial'\"}}],[{\"Literal\":{\"Value\":\"'Other'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{}}]}}]", - "height": 304.0, - "width": 1248.0, - "x": 16.0, + "height": 304.00, + "width": 1248.00, + "x": 16.00, "y": 4681.24, - "z": 6000.0 + "z": 6000.00 }, { "config": "{\"name\":\"fb2ee6815a0758d3a743\",\"layouts\":[{\"id\":0,\"position\":{\"x\":278.91427946378485,\"y\":518.8642358444372,\"z\":65000,\"width\":32,\"height\":56,\"tabOrder\":63000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 278.91, "y": 518.86, - "z": 65000.0 + "z": 65000.00 }, { "config": "{\"name\":\"fc73b13ba9610ca420d2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":936.0054384262527,\"y\":1247.2138801732972,\"z\":24000,\"width\":176,\"height\":88,\"tabOrder\":22000}}],\"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,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#DEF7AA'\"}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"preserveWhitespace\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"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\"}}}}}]}}}", "filters": "[{\"name\":\"Filter72199da057b650ab95bb\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_DiscountCostSavings\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filter0ef39c03524503151378\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ListCost\"}},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":1},{\"name\":\"Filter683679acaa2c06ec9db0\",\"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\":{},\"ordinal\":2},{\"name\":\"Filtera89957212ee70c51005e\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_CommitmentCostSavings\"}},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":3},{\"name\":\"Filterfe90d01078200cbd5c0b\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_CommitmentCostSavings\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":4},{\"name\":\"Filter5cd89b8dca0041000b39\",\"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\":{},\"ordinal\":5}]", - "height": 88.0, - "width": 176.0, + "height": 88.00, + "width": 176.00, "x": 936.01, "y": 1247.21, - "z": 24000.0 + "z": 24000.00 }, { "config": "{\"name\":\"fe921c308199e00d7650\",\"layouts\":[{\"id\":0,\"position\":{\"x\":728.0054384262527,\"y\":1167.2693501269214,\"z\":55000,\"width\":32,\"height\":56,\"tabOrder\":53000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"24pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]}}}", "filters": "[]", - "height": 56.0, - "width": 32.0, + "height": 56.00, + "width": 32.00, "x": 728.01, "y": 1167.27, - "z": 55000.0 + "z": 55000.00 }, { "config": "{\"name\":\"ffe6e7ed0ad971bebdcd\",\"layouts\":[{\"id\":0,\"position\":{\"x\":598.8017794802174,\"y\":614.864235841738,\"z\":74000,\"width\":152,\"height\":56,\"tabOrder\":72000}}],\"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\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"11D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"28D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'After commitment discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}}}", "filters": "[{\"name\":\"Filtera12c2a0dc4dccbe5b41b\",\"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\":{}},{\"name\":\"Filteraaa08787790362a27e0a\",\"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\":\"Filterdc6562c24d57b460dd8b\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ContractedCost\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"Filter2711f36306a3b2e28505\",\"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\":{}}]", - "height": 56.0, - "width": 152.0, - "x": 598.8, + "height": 56.00, + "width": 152.00, + "x": 598.80, "y": 614.86, - "z": 74000.0 + "z": 74000.00 } ], - "width": 1280.0 + "width": 1280.00 } ], "theme": "Microsoft_FinOps_light_theme6084012566499879.json" -} +} \ No newline at end of file diff --git a/src/power-bi/storage/Shared.Dataset/definition/cultures/en-US.tmdl b/src/power-bi/storage/Shared.Dataset/definition/cultures/en-US.tmdl index 4e3e5409c..4781bacee 100644 --- a/src/power-bi/storage/Shared.Dataset/definition/cultures/en-US.tmdl +++ b/src/power-bi/storage/Shared.Dataset/definition/cultures/en-US.tmdl @@ -1743,7 +1743,7 @@ cultureInfo en-US } }, { - "Effective Savings Rate": { + "ESR": { "State": "Suggested", "Source": { "Type": "External", @@ -1763,7 +1763,7 @@ cultureInfo en-US } }, { - "ESR": { + "Effective Savings Rate": { "State": "Suggested", "Source": { "Type": "External", @@ -6364,7 +6364,7 @@ cultureInfo en-US } }, { - "SKU": { + "Size": { "State": "Suggested", "Source": { "Type": "External", @@ -76881,33 +76881,6 @@ cultureInfo en-US }, "State": "Generated" }, - "costdetails.resourcenameunique": { - "Definition": { - "Binding": { - "ConceptualEntity": "Costs", - "ConceptualProperty": "ResourceNameUnique" - } - }, - "State": "Generated" - }, - "costdetails.subaccountnameunique": { - "Definition": { - "Binding": { - "ConceptualEntity": "Costs", - "ConceptualProperty": "SubAccountNameUnique" - } - }, - "State": "Generated" - }, - "costdetails.x_resourcegroupnameunique": { - "Definition": { - "Binding": { - "ConceptualEntity": "Costs", - "ConceptualProperty": "x_ResourceGroupNameUnique" - } - }, - "State": "Generated" - }, "costdetails.x_chargemonth": { "Definition": { "Binding": { @@ -77053,7 +77026,7 @@ cultureInfo en-US "State": "Generated", "Terms": [ { - "Flexibility group": { + "Normalized group": { "State": "Suggested", "Source": { "Type": "External", @@ -77084,6 +77057,79 @@ cultureInfo en-US } } ] + }, + "costs.x_skucorecountmeasure": { + "Definition": { + "Binding": { + "ConceptualEntity": "Costs", + "ConceptualProperty": "x_SkuCoreCountMeasure" + } + }, + "State": "Generated", + "Terms": [ + { + "vCPUs": { + "State": "Suggested", + "Source": { + "Type": "External", + "Agent": "PowerBI.VisualColumnRename" + }, + "Weight": 0.9 + } + } + ] + }, + "costs.x_skulicensequantitymeasure": { + "Definition": { + "Binding": { + "ConceptualEntity": "Costs", + "ConceptualProperty": "x_SkuLicenseQuantityMeasure" + } + }, + "State": "Generated", + "Terms": [ + { + "AHB CPUs": { + "State": "Suggested", + "Source": { + "Type": "External", + "Agent": "PowerBI.VisualColumnRename" + }, + "Weight": 0.9 + } + }, + { + "Hybrid Benefit CPUs": { + "State": "Suggested", + "Source": { + "Type": "External", + "Agent": "PowerBI.VisualColumnRename" + }, + "Weight": 0.9 + } + } + ] + }, + "reservationrecommendations.x_breakevendate": { + "Definition": { + "Binding": { + "ConceptualEntity": "ReservationRecommendations", + "ConceptualProperty": "x_BreakEvenDate" + } + }, + "State": "Generated", + "Terms": [ + { + "Target": { + "State": "Suggested", + "Source": { + "Type": "External", + "Agent": "PowerBI.VisualColumnRename" + }, + "Weight": 0.9 + } + } + ] } }, "Relationships": { diff --git a/src/power-bi/storage/Shared.Dataset/definition/expressions.tmdl b/src/power-bi/storage/Shared.Dataset/definition/expressions.tmdl index cb8952658..a3a8736e2 100644 --- a/src/power-bi/storage/Shared.Dataset/definition/expressions.tmdl +++ b/src/power-bi/storage/Shared.Dataset/definition/expressions.tmdl @@ -119,235 +119,235 @@ expression 'Number of Months' = 1 meta [IsParameterQuery=true, Type="Number", Is /// /// Learn more about FinOps hubs @ https://aka.ms/finops/hubs expression ftk_Storage = ``` - (optional datasetType as text) => - let - // Config - url = #"Storage URL", - end = if RangeEnd <> null then Date.From(RangeEnd, Culture.Current) else null, - start = - if RangeStart <> null then Date.From(RangeStart, Culture.Current) - else if #"Number of Months" <> null and #"Number of Months" > 0 then Date.AddMonths(if end <> null then end else Date.StartOfMonth(Date.From(DateTime.LocalNow())), -(#"Number of Months"+1)) - else null, - data = if datasetType <> null and datasetType <> "" then Text.Lower(datasetType) else "focuscost", - - // Determine if the URL is a hub URL - StorageurlSegments = Text.Split(url, "/"), - isHubStorage = List.Count(StorageurlSegments) = 4 and StorageurlSegments{3} = "ingestion", // Storage path = https://{storage-account-uri}/ingestion/{dataset}/{yyyy}/{MM}/{scope} - isHubOneLake = List.Count(StorageurlSegments) = 7 and StorageurlSegments{5} = "Files" and StorageurlSegments{6} = "ingestion", // OneLake path = https://{onelake-uri}/{guid}/{guid}/Files/ingestion/{dataset}/{yyyy}/{MM}/{scope} - containerOffset = if isHubOneLake then 6 else 3, - - // Connect to ADLS - HubStorage = if isHubStorage or isHubOneLake then ( - try let - DataStore = AzureStorage.DataLake(url), - FilterHub = Table.SelectRows( - DataStore, - each [Attributes]?[Hidden]? <> true - and [Extension] = ".parquet" - and ( - data = Text.Lower(List.Last(List.RemoveLastN(Text.Split([Folder Path],"/"), 1))) // Supports 0.2-0.5 folder structure: //{storage-account-uri}/ingestion/{scope}/{yyyyMM}/{dataset} - or data = Text.Lower(Text.Split([Folder Path],"/"){containerOffset+1}) // Supports 0.6 folder structure: .../ingestion/{dataset}/{yyyy}/{MM}/{scope} - // Handle 0.7 dataset folder names - or (data = "focuscost" and "Costs" = Text.Split([Folder Path],"/"){containerOffset+1}) - or (data = "pricesheet" and "Prices" = Text.Split([Folder Path],"/"){containerOffset+1}) - or (data = "reservationdetails" and "CommitmentDiscountUsage" = Text.Split([Folder Path],"/"){containerOffset+1}) - or (data = "reservationrecommendations" and "Recommendations" = Text.Split([Folder Path],"/"){containerOffset+1}) - or (data = "reservationtransactions" and "Transactions" = Text.Split([Folder Path],"/"){containerOffset+1}) - ) - ), - HubMonth = Table.AddColumn( - FilterHub, - "StartDate", - each try - // Supports 0.6+ folder structure: {dataset}/{yyyy}/{MM}/{scope} - if Text.Length(Text.Split([Folder Path],"/"){containerOffset+2}) = 4 and Text.Length(Text.Split([Folder Path],"/"){containerOffset+3}) = 2 then - _toMonth(Text.Split([Folder Path],"/"){containerOffset+2} & Text.Split([Folder Path],"/"){containerOffset+3}) - // Supports 0.2-0.5 folder structure: {scope}/{yyyyMM}/{dataset} - else _toMonth(List.Last(List.RemoveLastN(List.RemoveLastN(Text.Split([Folder Path],"/"), 1), 1))) - otherwise _toMonth(List.Last(List.RemoveLastN(List.RemoveLastN(Text.Split([Folder Path],"/"), 1), 1))), - type date - ) - in HubMonth otherwise null - ) else null, - hasHubData = (HubStorage = null or Table.RowCount(HubStorage) = 0) = false, - ExpStorage = if hasHubData then null else ( - try let - // Filter out anything that doesn't look like a CM export - DataStore = AzureStorage.DataLake(url), - DataStoreRows = Table.SelectRows(DataStore, each [Attributes]?[Hidden]? <> true), - Segments = Table.AddColumn(Table.AddColumn(DataStoreRows, - "Segments", each Text.Split(Text.Replace(Text.Trim([Folder Path], "/"), "https://", ""), "/")), - "SegmentCount", each List.Count([Segments])), - FilterExports = Table.SelectRows(Segments, - each ([SegmentCount] >= 7 and Text.Length([Segments]{[SegmentCount]-1}) = 36 and Text.Length([Segments]{[SegmentCount]-2}) = 12 and Text.Length([Segments]{[SegmentCount]-3}) = 17) - or ([SegmentCount] >= 6 and Text.Length([Segments]{[SegmentCount]-1}) = 36 and Text.Length([Segments]{[SegmentCount]-2}) = 17) // Exports v2 preview bug had a missing folder (remove after June 2025) - or ([SegmentCount] >= 5 and Text.Length([Segments]{[SegmentCount]-1}) = 36 and data = "reservationrecommendations") // Reservation recommendations do not have a date folder - ), - - // Find the paths that have the desired dataset with overwriting enabled (so we don't show duplicate data) - DatasetPaths = Table.SelectColumns( - Table.SelectRows( - Table.AddColumn(FilterExports, "Json", each try if [Name] = "manifest.json" then Json.Document([Content]) else null otherwise null), - each try [Name] = "manifest.json" - and Text.Lower([Json][exportConfig][type]) = data - and [Json][deliveryConfig][dataOverwriteBehavior] = "OverwritePreviousReport" - otherwise false - ), - {"Folder Path"} - ), - FilterExpData = Table.SelectRows(FilterExports, each ([Extension] = ".parquet" or [Extension] = ".csv") and List.Contains(Table.Column(DatasetPaths, "Folder Path"), [Folder Path])), - ExportMonth = Table.AddColumn(FilterExpData, "StartDate", each if data = "reservationrecommendations" then null else _toMonth([Segments]{[SegmentCount]-(if Text.Length([Segments]{[SegmentCount]-2}) = 17 then 2 else 3)}), type date) - in ExportMonth - otherwise null - ), - Source = if hasHubData then HubStorage else ExpStorage, - - // NOTE: Do not convert to UTC - UTC dates can show as the previous month based on the local timezone - _toMonth = (s) => Date.FromText(Text.Range(s, 0, 4) & "-" & Text.Range(s, 4, 2) & "-01"), - - // Only process files for months within the date range - FilterFilesByDate = - if start = null and end = null then Source - else Table.SelectRows( - Table.AddColumn(Source, "EndDate", each if [StartDate] = null then null else Date.EndOfMonth([StartDate]), type datetime), - each (start = null or [StartDate] = null or [StartDate] >= Date.StartOfMonth(start)) and (end = null or [EndDate] = null or [EndDate] <= Date.EndOfMonth(end)) - ), - AddMetadata = Table.AddColumn(FilterFilesByDate, "Metadata", each - if Text.Lower([Extension]) = ".parquet" and datasetType = "focuscost" then ftk_Metadata([Content], "ChargePeriodStart") - else null ), - ExpandMetadata = Table.ExpandTableColumn(AddMetadata, "Metadata", {"Min"}, {"ChargePeriodStart"}), - FilterMetadata = Table.SelectRows(ExpandMetadata, each (start = null or [ChargePeriodStart] = null or [ChargePeriodStart] >= ftk_DatetimeToJulianDate(start)) and (end = null or [ChargePeriodStart] = null or [ChargePeriodStart] < ftk_DatetimeToJulianDate(end))), - // Extract - _dataNotFound = () => - if isHubStorage or isHubOneLake then "HubDataNotFound: No " & data & " data found in the storage account (" & Text.SplitAny(url, "/."){2} & "). Please confirm data was exported and processed by hub ingestion pipelines. Refer to the troubleshooting guide for assistance: https://aka.ms/finops/hubs/troubleshoot." - else "ExportDataNotFound: No " & data & " exports found in the storage path. Please confirm exports were run and configured to push data to the storage account (" & Text.SplitAny(url, "/."){2} & "), container (" & Text.Split(url, "/"){3} & "), and path (" & Text.Combine(List.RemoveFirstN(Text.Split(url, "/"), 3), "/") & ").", - _parseCsv = (d) => Table.PromoteHeaders(Csv.Document(d, [Delimiter=",", Encoding=1252, QuoteStyle=QuoteStyle.Csv, CsvStyle=CsvStyle.QuoteAlways]), [PromoteAllScalars=true]), - _getColumnRenames = (tbl) => - let - // Remove spaces and capitalize all columns - _original = Table.ColumnNames(tbl), - _updated = List.Transform(_original, each Text.Replace(Text.Upper(Text.Start(_, 1)) & Text.Range(_, 1), " ", "")), - columnRenames = List.Zip({_original, _updated}) - in - columnRenames - , - ReadContent = if FilterFilesByDate = null then null else Table.SelectRows( - Table.SelectColumns( - Table.AddColumn(FilterMetadata, "Data", - each if [Extension] = ".parquet" then Parquet.Document([Content]) - else if [Extension] = ".gz" then _parseCsv(Binary.Decompress([Content], Compression.GZip)) - else if [Extension] = ".csv" then _parseCsv([Content]) - else [Content] - ), - {"Data"} - ), - each Table.RowCount([Data]) > 0 - ), - ExtractColumns = - if ReadContent <> null and Table.RowCount(ReadContent) > 0 then - Table.ExpandTableColumn(ReadContent, "Data", List.Distinct(List.Combine(List.Transform(ReadContent[Data], each Table.ColumnNames(_))))) - else if data = "focuscost" then - #table( - { "BilledCost", "BillingAccountId", "BillingAccountName", "BillingAccountType", "BillingCurrency", "BillingPeriodEnd", "BillingPeriodStart", "ChargeCategory", "ChargeClass", "ChargeDescription", "ChargeFrequency", "ChargePeriodEnd", "ChargePeriodStart", "CommitmentDiscountCategory", "CommitmentDiscountId", "CommitmentDiscountName", "CommitmentDiscountStatus", "CommitmentDiscountType", "ConsumedQuantity", "ConsumedUnit", "ContractedCost", "ContractedUnitPrice", "EffectiveCost", "InvoiceIssuerName", "ListCost", "ListUnitPrice", "PricingCategory", "PricingQuantity", "PricingUnit", "ProviderName", "PublisherName", "RegionId", "RegionName", "ResourceId", "ResourceName", "ResourceType", "ServiceCategory", "ServiceName", "SkuId", "SkuPriceId", "SubAccountId", "SubAccountName", "SubAccountType", "Tags", "x_AccountId", "x_AccountName", "x_AccountOwnerId", "x_BilledCostInUsd", "x_BilledUnitPrice", "x_BillingAccountId", "x_BillingAccountName", "x_BillingExchangeRate", "x_BillingExchangeRateDate", "x_BillingProfileId", "x_BillingProfileName", "x_ContractedCostInUsd", "x_CostAllocationRuleName", "x_CostCenter", "x_CustomerId", "x_CustomerName", "x_EffectiveCostInUsd", "x_EffectiveUnitPrice", "x_InvoiceId", "x_InvoiceIssuerId", "x_InvoiceSectionId", "x_InvoiceSectionName", "x_ListCostInUsd", "x_PartnerCreditApplied", "x_PartnerCreditRate", "x_PricingBlockSize", "x_PricingCurrency", "x_PricingSubcategory", "x_PricingUnitDescription", "x_PublisherCategory", "x_PublisherId", "x_ResellerId", "x_ResellerName", "x_ResourceGroupName", "x_ResourceType", "x_ServicePeriodEnd", "x_ServicePeriodStart", "x_SkuDescription", "x_SkuDetails", "x_SkuIsCreditEligible", "x_SkuMeterCategory", "x_SkuMeterId", "x_SkuMeterName", "x_SkuMeterSubcategory", "x_SkuOfferId", "x_SkuOrderId", "x_SkuOrderName", "x_SkuPartNumber", "x_SkuRegion", "x_SkuServiceFamily", "x_SkuTerm", "x_SkuTier" }, - {} // {{ null, null, null, null, null, null, null, null, null, _dataNotFound(), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null }} - ) - else if data = "pricesheet" then - #table( - { "BasePrice", "CurrencyCode", "EffectiveEndDate", "EffectiveStartDate", "EnrollmentNumber", "IncludedQuantity", "MarketPrice", "MeterCategory", "MeterID", "MeterName", "MeterRegion", "MeterSubCategory", "MeterType", "OfferID", "PartNumber", "PriceType", "Product", "ProductID", "ServiceFamily", "SkuID", "Term", "UnitOfMeasure", "UnitPrice" }, - {} // {{ null, null, null, null, null, null, null, null, null, _dataNotFound(), null, null, null, null, null, null, null, null, null, null, null, null, null }} - ) - else if data = "reservationdetails" then - #table( - { "InstanceFlexibilityGroup", "InstanceFlexibilityRatio", "InstanceId", "Kind", "ReservationId", "ReservationOrderId", "ReservedHours", "SkuName", "TotalReservedQuantity", "UsageDate", "UsedHours" }, - {} // {{ null, null, null, null, null, null, null, _dataNotFound(), null, null, null }} - ) - else if data = "reservationtransactions" then - #table( - { "AccountName", "AccountOwnerEmail", "Amount", "ArmSkuName", "BillingFrequency", "BillingMonth", "CostCenter", "Currency", "CurrentEnrollmentId", "DepartmentName", "Description", "EventDate", "EventType", "MonetaryCommitment", "Overage", "PurchasingEnrollment", "PurchasingSubscriptionGuid", "PurchasingSubscriptionName", "Quantity", "Region", "ReservationOrderId", "ReservationOrderName", "Term" }, - {} // {{ null, null, null, _dataNotFound(), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null }} - ) - else if data = "reservationrecommendations" then - #table( - { "CostWithNoReservedInstances", "FirstUsageDate", "InstanceFlexibilityGroup", "InstanceFlexibilityRatio", "Location", "LookBackPeriod", "MeterId", "NetSavings", "NormalizedSize", "RecommendedQuantity", "RecommendedQuantityNormlized", "ResourceType", "SKU", "Scope", "SkuProperties", "Term", "TotaCostWithReservedInstances" }, - {} // {{ null, null, null, null, null, null, null, null, null, null, null, _dataNotFound(), null, null, null, null }} - ) - else - #table( - { "Error" }, - {{ _dataNotFound() }} - ), - - // Fix column name inconsistencies across channels - CleanColumns = if data = "focuscost" then ExtractColumns else List.Accumulate( - List.Select(_getColumnRenames(ExtractColumns), each _{0} <> _{1}), - ExtractColumns, - (state, columns) => - // Copy old value to a temp column, then remove original columns, then rename the temp column - Table.RenameColumns( - Table.RemoveColumns( - Table.AddColumn(state, "Temp" & columns{1}, each if Record.Field(_, columns{0}) <> null then Record.Field(_, columns{0}) else Record.Field(_, columns{1})), - columns - ), - {{"Temp" & columns{1}, columns{1}}} - ) - ), - - // Only pull from the predefined date range (if specified) - _parseCostManagementDate = (d) => - let - segments = if d = null then null else Text.SplitAny(Text.From(d), "/- T"), - output = - try Number.From(Date.From( - if Text.Length(segments{0}) = 4 then segments{0} & "-" & Text.PadStart(segments{1}, 2, "0") & "-" & Text.PadStart(segments{2}, 2, "0") - else if Text.Length(segments{2}) = 4 then segments{2} & "-" & Text.PadStart(segments{0}, 2, "0") & "-" & Text.PadStart(segments{1}, 2, "0") - else d, - "en-US" - )) otherwise null - in output, - RefreshDate = Table.AddColumn( - Table.ReplaceValue(CleanColumns, "", null, Replacer.ReplaceValue, Table.ColumnsOfType(CleanColumns, {type text, type any})), - "x_IncrementalRefreshDate", - each _parseCostManagementDate( - if data = "focuscost" then [ChargePeriodStart] - else if data = "pricesheet" then [EffectiveStartDate] - else if data = "reservationdetails" then [UsageDate] - else if data = "reservationtransactions" then [EventDate] - else null // Will not support incremental refresh - ) - ), - FilterRowsByDate = if (start = null and end = null) then RefreshDate else Table.SelectRows(RefreshDate, each - (start = null or [x_IncrementalRefreshDate] = null or [x_IncrementalRefreshDate] >= Number.From(DateTime.From(start))) - and (end = null or [x_IncrementalRefreshDate] = null or [x_IncrementalRefreshDate] < Number.From(DateTime.From(end))) - ), - - // TODO: Try using "_" instead of "FilterRowsByDate" - CustomColumns = Table.AddColumn(Table.AddColumn(Table.AddColumn(FilterRowsByDate, - "x_SourceType", each data), - "x_SourceVersion", - // TODO: Extract from the manifest - each if data = "focuscost" then (if Table.HasColumns(FilterRowsByDate, {"ChargeSubcategory"}) and [ChargeSubcategory] <> null then "1.0-preview(v1)" else "1.0") - else if data = "pricesheet" then "2023-05-01" - else if data = "reservationdetails" then "2023-03-01" - else if data = "reservationtransactions" then "2023-05-01" - else if data = "reservationrecommendations" then "2023-05-01" - else null - ), - "x_BillingAccountAgreement", - each if data = "focuscost" then ( - if [BillingAccountId] = [SubAccountId] then "MOSA" - else if ftk_ParseResourceName([BillingAccountId]) = [x_BillingAccountId] then "EA" - else if ftk_ParseResourceName([BillingAccountId]) = [x_BillingProfileId] then (if [InvoiceIssuerName] = "Microsoft" then "MCA" else "MPA") - else "Unknown" - ) - else if data = "pricesheet" then (if Table.HasColumns(FilterRowsByDate, "EnrollmentNumber") and [EnrollmentNumber] <> null then "EA" else "MCA") // TODO: Can we detect MPA separately? - else if data = "reservationdetails" then "Unknown" // TODO: Consider using export manifest if we get feedback that this should always be available - else if data = "reservationtransactions" then (if Table.HasColumns(FilterRowsByDate, "CurrentEnrollmentId") and [CurrentEnrollmentId] <> null then "EA" else "MCA") // TODO: Can we detect MPA separately? - else if data = "reservationrecommendations" then (if Table.HasColumns(FilterRowsByDate, "Scope") and [Scope] <> null then "EA" else "MCA") - else "Unknown" - ), - Output = Table.SelectColumns(CustomColumns, List.Sort(Table.ColumnNames(CustomColumns))) - in - Output + (optional datasetType as text) => + let + // Config + url = #"Storage URL", + end = if RangeEnd <> null then Date.From(RangeEnd, Culture.Current) else null, + start = + if RangeStart <> null then Date.From(RangeStart, Culture.Current) + else if #"Number of Months" <> null and #"Number of Months" > 0 then Date.AddMonths(if end <> null then end else Date.StartOfMonth(Date.From(DateTime.LocalNow())), -(#"Number of Months"+1)) + else null, + data = if datasetType <> null and datasetType <> "" then Text.Lower(datasetType) else "focuscost", + + // Determine if the URL is a hub URL + StorageurlSegments = Text.Split(url, "/"), + isHubStorage = List.Count(StorageurlSegments) = 4 and StorageurlSegments{3} = "ingestion", // Storage path = https://{storage-account-uri}/ingestion/{dataset}/{yyyy}/{MM}/{scope} + isHubOneLake = List.Count(StorageurlSegments) = 7 and StorageurlSegments{5} = "Files" and StorageurlSegments{6} = "ingestion", // OneLake path = https://{onelake-uri}/{guid}/{guid}/Files/ingestion/{dataset}/{yyyy}/{MM}/{scope} + containerOffset = if isHubOneLake then 6 else 3, + + // Connect to ADLS + HubStorage = if isHubStorage or isHubOneLake then ( + try let + DataStore = AzureStorage.DataLake(url), + FilterHub = Table.SelectRows( + DataStore, + each [Attributes]?[Hidden]? <> true + and [Extension] = ".parquet" + and ( + data = Text.Lower(List.Last(List.RemoveLastN(Text.Split([Folder Path],"/"), 1))) // Supports 0.2-0.5 folder structure: //{storage-account-uri}/ingestion/{scope}/{yyyyMM}/{dataset} + or data = Text.Lower(Text.Split([Folder Path],"/"){containerOffset+1}) // Supports 0.6 folder structure: .../ingestion/{dataset}/{yyyy}/{MM}/{scope} + // Handle 0.7 dataset folder names + or (data = "focuscost" and "Costs" = Text.Split([Folder Path],"/"){containerOffset+1}) + or (data = "pricesheet" and "Prices" = Text.Split([Folder Path],"/"){containerOffset+1}) + or (data = "reservationdetails" and "CommitmentDiscountUsage" = Text.Split([Folder Path],"/"){containerOffset+1}) + or (data = "reservationrecommendations" and "Recommendations" = Text.Split([Folder Path],"/"){containerOffset+1}) + or (data = "reservationtransactions" and "Transactions" = Text.Split([Folder Path],"/"){containerOffset+1}) + ) + ), + HubMonth = Table.AddColumn( + FilterHub, + "StartDate", + each try + // Supports 0.6+ folder structure: {dataset}/{yyyy}/{MM}/{scope} + if Text.Length(Text.Split([Folder Path],"/"){containerOffset+2}) = 4 and Text.Length(Text.Split([Folder Path],"/"){containerOffset+3}) = 2 then + _toMonth(Text.Split([Folder Path],"/"){containerOffset+2} & Text.Split([Folder Path],"/"){containerOffset+3}) + // Supports 0.2-0.5 folder structure: {scope}/{yyyyMM}/{dataset} + else _toMonth(List.Last(List.RemoveLastN(List.RemoveLastN(Text.Split([Folder Path],"/"), 1), 1))) + otherwise _toMonth(List.Last(List.RemoveLastN(List.RemoveLastN(Text.Split([Folder Path],"/"), 1), 1))), + type date + ) + in HubMonth otherwise null + ) else null, + hasHubData = (HubStorage = null or Table.RowCount(HubStorage) = 0) = false, + ExpStorage = if hasHubData then null else ( + try let + // Filter out anything that doesn't look like a CM export + DataStore = AzureStorage.DataLake(url), + DataStoreRows = Table.SelectRows(DataStore, each [Attributes]?[Hidden]? <> true), + Segments = Table.AddColumn(Table.AddColumn(DataStoreRows, + "Segments", each Text.Split(Text.Replace(Text.Trim([Folder Path], "/"), "https://", ""), "/")), + "SegmentCount", each List.Count([Segments])), + FilterExports = Table.SelectRows(Segments, + each ([SegmentCount] >= 7 and Text.Length([Segments]{[SegmentCount]-1}) = 36 and Text.Length([Segments]{[SegmentCount]-2}) = 12 and Text.Length([Segments]{[SegmentCount]-3}) = 17) + or ([SegmentCount] >= 6 and Text.Length([Segments]{[SegmentCount]-1}) = 36 and Text.Length([Segments]{[SegmentCount]-2}) = 17) // Exports v2 preview bug had a missing folder (remove after June 2025) + or ([SegmentCount] >= 5 and Text.Length([Segments]{[SegmentCount]-1}) = 36 and data = "reservationrecommendations") // Reservation recommendations do not have a date folder + ), + + // Find the paths that have the desired dataset with overwriting enabled (so we don't show duplicate data) + DatasetPaths = Table.SelectColumns( + Table.SelectRows( + Table.AddColumn(FilterExports, "Json", each try if [Name] = "manifest.json" then Json.Document([Content]) else null otherwise null), + each try [Name] = "manifest.json" + and Text.Lower([Json][exportConfig][type]) = data + and [Json][deliveryConfig][dataOverwriteBehavior] = "OverwritePreviousReport" + otherwise false + ), + {"Folder Path"} + ), + FilterExpData = Table.SelectRows(FilterExports, each ([Extension] = ".parquet" or [Extension] = ".csv") and List.Contains(Table.Column(DatasetPaths, "Folder Path"), [Folder Path])), + ExportMonth = Table.AddColumn(FilterExpData, "StartDate", each if data = "reservationrecommendations" then null else _toMonth([Segments]{[SegmentCount]-(if Text.Length([Segments]{[SegmentCount]-2}) = 17 then 2 else 3)}), type date) + in ExportMonth + otherwise null + ), + Source = if hasHubData then HubStorage else ExpStorage, + + // NOTE: Do not convert to UTC - UTC dates can show as the previous month based on the local timezone + _toMonth = (s) => Date.FromText(Text.Range(s, 0, 4) & "-" & Text.Range(s, 4, 2) & "-01"), + + // Only process files for months within the date range + FilterFilesByDate = + if start = null and end = null then Source + else Table.SelectRows( + Table.AddColumn(Source, "EndDate", each if [StartDate] = null then null else Date.EndOfMonth([StartDate]), type datetime), + each (start = null or [StartDate] = null or [StartDate] >= Date.StartOfMonth(start)) and (end = null or [EndDate] = null or [EndDate] <= Date.EndOfMonth(end)) + ), + AddMetadata = Table.AddColumn(FilterFilesByDate, "Metadata", each + if Text.Lower([Extension]) = ".parquet" and data = "focuscost" then ftk_Metadata([Content], "ChargePeriodStart") + else null ), + ExpandMetadata = Table.ExpandTableColumn(AddMetadata, "Metadata", {"Min"}, {"ChargePeriodStart"}), + FilterMetadata = Table.SelectRows(ExpandMetadata, each (start = null or [ChargePeriodStart] = null or [ChargePeriodStart] >= ftk_DatetimeToJulianDate(start)) and (end = null or [ChargePeriodStart] = null or [ChargePeriodStart] < ftk_DatetimeToJulianDate(end))), + // Extract + _dataNotFound = () => + if isHubStorage or isHubOneLake then "HubDataNotFound: No " & data & " data found in the storage account (" & Text.SplitAny(url, "/."){2} & "). Please confirm data was exported and processed by hub ingestion pipelines. Refer to the troubleshooting guide for assistance: https://aka.ms/finops/hubs/troubleshoot." + else "ExportDataNotFound: No " & data & " exports found in the storage path. Please confirm exports were run and configured to push data to the storage account (" & Text.SplitAny(url, "/."){2} & "), container (" & Text.Split(url, "/"){3} & "), and path (" & Text.Combine(List.RemoveFirstN(Text.Split(url, "/"), 3), "/") & ").", + _parseCsv = (d) => Table.PromoteHeaders(Csv.Document(d, [Delimiter=",", Encoding=1252, QuoteStyle=QuoteStyle.Csv, CsvStyle=CsvStyle.QuoteAlways]), [PromoteAllScalars=true]), + _getColumnRenames = (tbl) => + let + // Remove spaces and capitalize all columns + _original = Table.ColumnNames(tbl), + _updated = List.Transform(_original, each Text.Replace(Text.Upper(Text.Start(_, 1)) & Text.Range(_, 1), " ", "")), + columnRenames = List.Zip({_original, _updated}) + in + columnRenames + , + ReadContent = if FilterFilesByDate = null then null else Table.SelectRows( + Table.SelectColumns( + Table.AddColumn(FilterMetadata, "Data", + each if [Extension] = ".parquet" then Parquet.Document([Content]) + else if [Extension] = ".gz" then _parseCsv(Binary.Decompress([Content], Compression.GZip)) + else if [Extension] = ".csv" then _parseCsv([Content]) + else [Content] + ), + {"Data"} + ), + each Table.RowCount([Data]) > 0 + ), + ExtractColumns = + if ReadContent <> null and Table.RowCount(ReadContent) > 0 then + Table.ExpandTableColumn(ReadContent, "Data", List.Distinct(List.Combine(List.Transform(ReadContent[Data], each Table.ColumnNames(_))))) + else if data = "focuscost" then + #table( + { "BilledCost", "BillingAccountId", "BillingAccountName", "BillingAccountType", "BillingCurrency", "BillingPeriodEnd", "BillingPeriodStart", "ChargeCategory", "ChargeClass", "ChargeDescription", "ChargeFrequency", "ChargePeriodEnd", "ChargePeriodStart", "CommitmentDiscountCategory", "CommitmentDiscountId", "CommitmentDiscountName", "CommitmentDiscountStatus", "CommitmentDiscountType", "ConsumedQuantity", "ConsumedUnit", "ContractedCost", "ContractedUnitPrice", "EffectiveCost", "InvoiceIssuerName", "ListCost", "ListUnitPrice", "PricingCategory", "PricingQuantity", "PricingUnit", "ProviderName", "PublisherName", "RegionId", "RegionName", "ResourceId", "ResourceName", "ResourceType", "ServiceCategory", "ServiceName", "SkuId", "SkuPriceId", "SubAccountId", "SubAccountName", "SubAccountType", "Tags", "x_AccountId", "x_AccountName", "x_AccountOwnerId", "x_BilledCostInUsd", "x_BilledUnitPrice", "x_BillingAccountId", "x_BillingAccountName", "x_BillingExchangeRate", "x_BillingExchangeRateDate", "x_BillingProfileId", "x_BillingProfileName", "x_ContractedCostInUsd", "x_CostAllocationRuleName", "x_CostCenter", "x_CustomerId", "x_CustomerName", "x_EffectiveCostInUsd", "x_EffectiveUnitPrice", "x_InvoiceId", "x_InvoiceIssuerId", "x_InvoiceSectionId", "x_InvoiceSectionName", "x_ListCostInUsd", "x_PartnerCreditApplied", "x_PartnerCreditRate", "x_PricingBlockSize", "x_PricingCurrency", "x_PricingSubcategory", "x_PricingUnitDescription", "x_PublisherCategory", "x_PublisherId", "x_ResellerId", "x_ResellerName", "x_ResourceGroupName", "x_ResourceType", "x_ServicePeriodEnd", "x_ServicePeriodStart", "x_SkuDescription", "x_SkuDetails", "x_SkuIsCreditEligible", "x_SkuMeterCategory", "x_SkuMeterId", "x_SkuMeterName", "x_SkuMeterSubcategory", "x_SkuOfferId", "x_SkuOrderId", "x_SkuOrderName", "x_SkuPartNumber", "x_SkuRegion", "x_SkuServiceFamily", "x_SkuTerm", "x_SkuTier" }, + {} // {{ null, null, null, null, null, null, null, null, null, _dataNotFound(), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null }} + ) + else if data = "pricesheet" then + #table( + { "BasePrice", "CurrencyCode", "EffectiveEndDate", "EffectiveStartDate", "EnrollmentNumber", "IncludedQuantity", "MarketPrice", "MeterCategory", "MeterID", "MeterName", "MeterRegion", "MeterSubCategory", "MeterType", "OfferID", "PartNumber", "PriceType", "Product", "ProductID", "ServiceFamily", "SkuID", "Term", "UnitOfMeasure", "UnitPrice" }, + {} // {{ null, null, null, null, null, null, null, null, null, _dataNotFound(), null, null, null, null, null, null, null, null, null, null, null, null, null }} + ) + else if data = "reservationdetails" then + #table( + { "InstanceFlexibilityGroup", "InstanceFlexibilityRatio", "InstanceId", "Kind", "ReservationId", "ReservationOrderId", "ReservedHours", "SkuName", "TotalReservedQuantity", "UsageDate", "UsedHours" }, + {} // {{ null, null, null, null, null, null, null, _dataNotFound(), null, null, null }} + ) + else if data = "reservationtransactions" then + #table( + { "AccountName", "AccountOwnerEmail", "Amount", "ArmSkuName", "BillingFrequency", "BillingMonth", "CostCenter", "Currency", "CurrentEnrollmentId", "DepartmentName", "Description", "EventDate", "EventType", "MonetaryCommitment", "Overage", "PurchasingEnrollment", "PurchasingSubscriptionGuid", "PurchasingSubscriptionName", "Quantity", "Region", "ReservationOrderId", "ReservationOrderName", "Term" }, + {} // {{ null, null, null, _dataNotFound(), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null }} + ) + else if data = "reservationrecommendations" then + #table( + { "CostWithNoReservedInstances", "FirstUsageDate", "InstanceFlexibilityGroup", "InstanceFlexibilityRatio", "Location", "LookBackPeriod", "MeterId", "NetSavings", "NormalizedSize", "RecommendedQuantity", "RecommendedQuantityNormlized", "ResourceType", "SKU", "Scope", "SkuProperties", "Term", "TotaCostWithReservedInstances" }, + {} // {{ null, null, null, null, null, null, null, null, null, null, null, _dataNotFound(), null, null, null, null }} + ) + else + #table( + { "Error" }, + {{ _dataNotFound() }} + ), + + // Fix column name inconsistencies across channels + CleanColumns = if data = "focuscost" then ExtractColumns else List.Accumulate( + List.Select(_getColumnRenames(ExtractColumns), each _{0} <> _{1}), + ExtractColumns, + (state, columns) => + // Copy old value to a temp column, then remove original columns, then rename the temp column + Table.RenameColumns( + Table.RemoveColumns( + Table.AddColumn(state, "Temp" & columns{1}, each if Record.Field(_, columns{0}) <> null then Record.Field(_, columns{0}) else Record.Field(_, columns{1})), + columns + ), + {{"Temp" & columns{1}, columns{1}}} + ) + ), + + // Only pull from the predefined date range (if specified) + _parseCostManagementDate = (d) => + let + segments = if d = null then null else Text.SplitAny(Text.From(d), "/- T"), + output = + try Number.From(Date.From( + if Text.Length(segments{0}) = 4 then segments{0} & "-" & Text.PadStart(segments{1}, 2, "0") & "-" & Text.PadStart(segments{2}, 2, "0") + else if Text.Length(segments{2}) = 4 then segments{2} & "-" & Text.PadStart(segments{0}, 2, "0") & "-" & Text.PadStart(segments{1}, 2, "0") + else d, + "en-US" + )) otherwise null + in output, + RefreshDate = Table.AddColumn( + Table.ReplaceValue(CleanColumns, "", null, Replacer.ReplaceValue, Table.ColumnsOfType(CleanColumns, {type text, type any})), + "x_IncrementalRefreshDate", + each _parseCostManagementDate( + if data = "focuscost" then [ChargePeriodStart] + else if data = "pricesheet" then [EffectiveStartDate] + else if data = "reservationdetails" then [UsageDate] + else if data = "reservationtransactions" then [EventDate] + else null // Will not support incremental refresh + ) + ), + FilterRowsByDate = if (start = null and end = null) then RefreshDate else Table.SelectRows(RefreshDate, each + (start = null or [x_IncrementalRefreshDate] = null or [x_IncrementalRefreshDate] >= Number.From(DateTime.From(start))) + and (end = null or [x_IncrementalRefreshDate] = null or [x_IncrementalRefreshDate] < Number.From(DateTime.From(end))) + ), + + // TODO: Try using "_" instead of "FilterRowsByDate" + CustomColumns = Table.AddColumn(Table.AddColumn(Table.AddColumn(FilterRowsByDate, + "x_SourceType", each data), + "x_SourceVersion", + // TODO: Extract from the manifest + each if data = "focuscost" then (if Table.HasColumns(FilterRowsByDate, {"ChargeSubcategory"}) and [ChargeSubcategory] <> null then "1.0-preview(v1)" else "1.0") + else if data = "pricesheet" then "2023-05-01" + else if data = "reservationdetails" then "2023-03-01" + else if data = "reservationtransactions" then "2023-05-01" + else if data = "reservationrecommendations" then "2023-05-01" + else null + ), + "x_BillingAccountAgreement", + each if data = "focuscost" then ( + if [BillingAccountId] = [SubAccountId] then "MOSA" + else if ftk_ParseResourceName([BillingAccountId]) = [x_BillingAccountId] then "EA" + else if ftk_ParseResourceName([BillingAccountId]) = [x_BillingProfileId] then (if [InvoiceIssuerName] = "Microsoft" then "MCA" else "MPA") + else "Unknown" + ) + else if data = "pricesheet" then (if Table.HasColumns(FilterRowsByDate, "EnrollmentNumber") and [EnrollmentNumber] <> null then "EA" else "MCA") // TODO: Can we detect MPA separately? + else if data = "reservationdetails" then "Unknown" // TODO: Consider using export manifest if we get feedback that this should always be available + else if data = "reservationtransactions" then (if Table.HasColumns(FilterRowsByDate, "CurrentEnrollmentId") and [CurrentEnrollmentId] <> null then "EA" else "MCA") // TODO: Can we detect MPA separately? + else if data = "reservationrecommendations" then (if Table.HasColumns(FilterRowsByDate, "SKU") and [SKU] <> null then "EA" else "MCA") + else "Unknown" + ), + Output = Table.SelectColumns(CustomColumns, List.Sort(Table.ColumnNames(CustomColumns))) + in + Output ``` lineageTag: 1195459e-bb6d-4ef2-8823-5f63c16fbcf5 queryGroup: Functions @@ -475,7 +475,7 @@ expression 'Experimental: Add Missing Prices' = false meta [IsParameterQuery=tru annotation PBI_NavigationStepName = Navigation - annotation PBI_ResultType = Logical + annotation PBI_ResultType = Exception /// Generates a KQL filter to be used in Resource Graph queries to filter out test data. expression ftk_DemoFilter = @@ -498,13 +498,13 @@ expression ftk_DemoFilter = /// Optional. Experimental feature to join the prices with the cost to populate missing list and contracted unit price and calculate missing cost values. This enables calculating total savings. Allowed values = "TRUE", "FALSE". /// /// This experimental feature is extremely slow to run and has not been fully tested. We are investigating alternative means to perform this join. -expression 'Deprecated: Perform Extra Query Optimizations' = true meta [IsParameterQuery=true, List={false, true}, DefaultValue=true, Type="Logical", IsParameterQueryRequired=false] +expression 'Deprecated: Perform Extra Query Optimizations' = false meta [IsParameterQuery=true, List={false, true}, DefaultValue=false, Type="Logical", IsParameterQueryRequired=false] lineageTag: f22de62e-d0a2-4f18-be6a-86172ff55b17 queryGroup: '🛠️ Setup' annotation PBI_NavigationStepName = Navigation - annotation PBI_ResultType = Logical + annotation PBI_ResultType = Exception /// Indicate whether you want the default granularity to be daily or monthly in this report. This only impacts visuals configured to use the x_ReportingDate column. Use ChargePeriodStart for daily and x_ChargeMonth for monthly to ignore this setting. expression 'Default Granularity' = "Daily" meta [IsParameterQuery=true, List={"Daily", "Monthly"}, DefaultValue="Daily", Type="Text", IsParameterQueryRequired=true] @@ -513,5 +513,5 @@ expression 'Default Granularity' = "Daily" meta [IsParameterQuery=true, List={"D annotation PBI_NavigationStepName = Navigation - annotation PBI_ResultType = Text + annotation PBI_ResultType = Exception diff --git a/src/power-bi/storage/Shared.Dataset/definition/model.tmdl b/src/power-bi/storage/Shared.Dataset/definition/model.tmdl index f47a3ec3f..d3fc79f43 100644 --- a/src/power-bi/storage/Shared.Dataset/definition/model.tmdl +++ b/src/power-bi/storage/Shared.Dataset/definition/model.tmdl @@ -28,7 +28,7 @@ queryGroup 'Open data' annotation __PBI_TimeIntelligenceEnabled = 0 -annotation PBIDesktopVersion = 2.140.679.0 (25.02)+e2f7796f7ddf473b3f87e4d9e2bee0b29f9956bf +annotation PBIDesktopVersion = 2.141.1177.0 (25.03)+c500dc5720dc9271c2dcfef1230911a0da742ee3 annotation PBI_QueryOrder = ["▶️ START HERE","Storage URL","RangeStart","RangeEnd","Number of Months","Default Granularity","ftk_DatetimeToJulianDate","ftk_DemoFilter","ftk_ImpalaToJulianDate","ftk_Metadata","ftk_ParseResourceId","ftk_ParseResourceName","ftk_ParseResourceType","ftk_Storage","Costs","InstanceSizeFlexibility","PricingUnits","Regions","ResourceTypes","Prices","Experimental: Add Missing Prices","Deprecated: Perform Extra Query Optimizations","HubScopes","HubSettings","StorageData","StorageErrors","AdvisorRecommendations","AdvisorReservationRecommendations","Disks","ManagementGroups","NetworkInterfaces","NetworkSecurityGroups","PolicyAssignments","PolicyDefinitions","PolicyStates","PublicIPAddresses","Resources","SqlDatabases","Subscriptions","VirtualMachines","ReservationRecommendations","ReservationDetails","ReservationTransactions"] @@ -50,7 +50,6 @@ ref table Subscriptions ref table ResourceTypes ref table Regions ref table VirtualMachines -ref table Disks ref table NetworkInterfaces ref table PublicIPAddresses ref table AdvisorReservationRecommendations @@ -62,6 +61,7 @@ ref table SqlDatabases ref table 'Compliance calculation' ref table PricingUnits ref table ReservationRecommendations +ref table Disks ref cultureInfo en-US diff --git a/src/power-bi/storage/Shared.Dataset/definition/relationships.tmdl b/src/power-bi/storage/Shared.Dataset/definition/relationships.tmdl index 45015dfc7..91a65b608 100644 --- a/src/power-bi/storage/Shared.Dataset/definition/relationships.tmdl +++ b/src/power-bi/storage/Shared.Dataset/definition/relationships.tmdl @@ -50,12 +50,6 @@ relationship 52d8acfd-e4eb-fdfe-9d4f-9eae3f716ab4 fromColumn: NetworkInterfaces.'properties.ipConfigurations.properties.publicIPAddress.id' toColumn: PublicIPAddresses.id -relationship f2289f99-f546-f6c2-3c36-724c25d99e09 - crossFilteringBehavior: bothDirections - toCardinality: many - fromColumn: Disks.managedBy - toColumn: VirtualMachines.id - relationship 26e1c802-749f-5e32-3d1c-82aba5427b7e crossFilteringBehavior: bothDirections fromColumn: Resources.type @@ -104,7 +98,14 @@ relationship c0c15128-2725-100f-2945-f99368d742f6 fromColumn: InstanceSizeFlexibility.x_CommitmentDiscountKey toColumn: ReservationRecommendations.x_CommitmentDiscountKey -relationship e0505491-3bd3-169a-45cc-988f783a8946 +relationship 2d0a2bef-ef33-9e59-b9b6-714b0796ce66 + crossFilteringBehavior: bothDirections + toCardinality: many + fromColumn: Disks.managedBy + toColumn: VirtualMachines.id + +relationship ccc483e5-27eb-8e62-2ffb-f7a7d609297d + crossFilteringBehavior: bothDirections fromColumn: Costs.ResourceId toColumn: Disks.id diff --git a/src/power-bi/storage/Shared.Dataset/definition/tables/AdvisorRecommendations.tmdl b/src/power-bi/storage/Shared.Dataset/definition/tables/AdvisorRecommendations.tmdl index c2151e98a..e82c4b100 100644 --- a/src/power-bi/storage/Shared.Dataset/definition/tables/AdvisorRecommendations.tmdl +++ b/src/power-bi/storage/Shared.Dataset/definition/tables/AdvisorRecommendations.tmdl @@ -173,16 +173,6 @@ table AdvisorRecommendations annotation SummarizationSetBy = Automatic - column 'properties.extendedProperties.savingsAmount' - dataType: double - lineageTag: fe066f63-af23-441a-b614-df90e7b459c2 - summarizeBy: sum - sourceColumn: properties.extendedProperties.savingsAmount - - annotation SummarizationSetBy = Automatic - - annotation PBI_FormatHint = {"isGeneralNumber":true} - column 'properties.extendedProperties.DatabaseSize' dataType: string lineageTag: 291bcdda-5321-4bb3-8900-62cb86a30af8 @@ -367,17 +357,6 @@ table AdvisorRecommendations annotation SummarizationSetBy = Automatic - column 'properties.lastUpdated' - dataType: dateTime - formatString: Mmm d h:nn AM/PM - lineageTag: d3bf7cce-83bc-4589-a2da-ece0e146e1d3 - summarizeBy: none - sourceColumn: properties.lastUpdated - - annotation SummarizationSetBy = Automatic - - annotation PBI_FormatHint = {"isCustom":true} - column 'properties.category' dataType: string lineageTag: d4071f11-546e-49cc-9131-675482ae0927 @@ -470,6 +449,25 @@ table AdvisorRecommendations annotation SummarizationSetBy = Automatic + column 'properties.lastUpdated' + dataType: dateTime + formatString: General Date + lineageTag: 432519ca-6b39-470a-875a-7011290482ba + summarizeBy: none + sourceColumn: properties.lastUpdated + + annotation SummarizationSetBy = Automatic + + column 'properties.extendedProperties.savingsAmount' + dataType: double + lineageTag: 588d3c29-5bb7-4bb6-a5bd-b35aedd8131a + summarizeBy: sum + sourceColumn: properties.extendedProperties.savingsAmount + + annotation SummarizationSetBy = Automatic + + annotation PBI_FormatHint = {"isGeneralNumber":true} + partition AdvisorRecommendations = m mode: import queryGroup: 'Resource Graph' diff --git a/src/power-bi/storage/Shared.Dataset/definition/tables/AdvisorReservationRecommendations.tmdl b/src/power-bi/storage/Shared.Dataset/definition/tables/AdvisorReservationRecommendations.tmdl index c3763a840..d64bc449c 100644 --- a/src/power-bi/storage/Shared.Dataset/definition/tables/AdvisorReservationRecommendations.tmdl +++ b/src/power-bi/storage/Shared.Dataset/definition/tables/AdvisorReservationRecommendations.tmdl @@ -133,9 +133,10 @@ table AdvisorReservationRecommendations annotation SummarizationSetBy = Automatic column 'properties.extendedProperties.lookbackPeriod' - dataType: string + dataType: int64 + formatString: 0 lineageTag: 82a3a6d5-01c1-4db7-be17-572b62ceb699 - summarizeBy: none + summarizeBy: sum sourceColumn: properties.extendedProperties.lookbackPeriod annotation SummarizationSetBy = Automatic @@ -385,32 +386,91 @@ table AdvisorReservationRecommendations annotation SummarizationSetBy = Automatic + column properties + dataType: string + lineageTag: 00c54dd6-e308-4af8-8014-2caca1bb3674 + summarizeBy: none + sourceColumn: properties + + annotation SummarizationSetBy = Automatic + + column 'properties.shortDescription' + dataType: string + lineageTag: 34fae73f-1cea-4fab-8ee4-9c406b4e5de2 + summarizeBy: none + sourceColumn: properties.shortDescription + + annotation SummarizationSetBy = Automatic + + column 'properties.resourceMetadata' + dataType: string + lineageTag: 6399ea0e-c284-4fb8-84e4-a8994d38b8d2 + summarizeBy: none + sourceColumn: properties.resourceMetadata + + annotation SummarizationSetBy = Automatic + partition AdvisorReservationRecommendations = m mode: import queryGroup: 'Resource Graph' source = let - Source = AzureResourceGraph.Query(" + query = " advisorresources | where type == 'microsoft.advisor/recommendations' | where properties['category'] == 'Cost' | where properties['shortDescription']['solution'] == 'Consider virtual machine reserved instance to save over your on-demand costs' - " & ftk_DemoFilter(), "Tenant", null, null, [resultTruncated = true]), - #"Expanded properties 1" = Table.ExpandRecordColumn(Source, "properties", {"recommendationTypeId", "extendedProperties", "resourceMetadata", "shortDescription", "suppressionIds", "impactedField", "impactedValue", "lastUpdated", "metadata", "category", "impact"}, {"properties.recommendationTypeId", "properties.extendedProperties", "properties.resourceMetadata", "properties.shortDescription", "properties.suppressionIds", "properties.impactedField", "properties.impactedValue", "properties.lastUpdated", "properties.metadata", "properties.category", "properties.impact"}), - #"Expanded properties.shortDescription 1" = Table.ExpandRecordColumn(#"Expanded properties 1", "properties.shortDescription", {"solution", "problem"}, {"properties.shortDescription.solution", "properties.shortDescription.problem"}), - #"Expanded properties.extendedProperties" = Table.ExpandRecordColumn(#"Expanded properties.shortDescription 1", "properties.extendedProperties", {"reservedResourceType", "annualSavingsAmount", "targetResourceCount", "savingsCurrency", "lookbackPeriod", "savingsAmount", "displaySKU", "displayQty", "location", "region", "vmSize", "subId", "scope", "term", "sku", "qty"}, {"properties.extendedProperties.reservedResourceType", "properties.extendedProperties.annualSavingsAmount", "properties.extendedProperties.targetResourceCount", "properties.extendedProperties.savingsCurrency", "properties.extendedProperties.lookbackPeriod", "properties.extendedProperties.savingsAmount", "properties.extendedProperties.displaySKU", "properties.extendedProperties.displayQty", "properties.extendedProperties.location", "properties.extendedProperties.region", "properties.extendedProperties.vmSize", "properties.extendedProperties.subId", "properties.extendedProperties.scope", "properties.extendedProperties.term", "properties.extendedProperties.sku", "properties.extendedProperties.qty"}), - #"Expanded properties.resourceMetadata" = Table.ExpandRecordColumn(#"Expanded properties.extendedProperties", "properties.resourceMetadata", {"resourceId", "singular", "plural", "action", "source"}, {"properties.resourceMetadata.resourceId", "properties.resourceMetadata.singular", "properties.resourceMetadata.plural", "properties.resourceMetadata.action", "properties.resourceMetadata.source"}), - #"Changed column type 2" = Table.TransformColumnTypes(#"Expanded properties.resourceMetadata", {{"properties.extendedProperties.annualSavingsAmount", type number}}, "en-US"), - #"Replaced errors" = Table.ReplaceErrorValues(#"Changed column type 2", {{"properties.extendedProperties.annualSavingsAmount", null}}), - #"Changed column type 1" = Table.TransformColumnTypes(#"Replaced errors", {{"properties.extendedProperties.savingsAmount", type number}}, "en-US"), - #"Replaced errors 1" = Table.ReplaceErrorValues(#"Changed column type 1", {{"properties.extendedProperties.savingsAmount", null}}), - #"Replaced value" = Table.ReplaceValue(#"Replaced errors 1", null, 0, Replacer.ReplaceValue, {"properties.extendedProperties.savingsAmount"}), - #"Replaced value 1" = Table.ReplaceValue(#"Replaced value", null, 0, Replacer.ReplaceValue, {"properties.extendedProperties.annualSavingsAmount"}), - #"Changed column type" = Table.TransformColumnTypes(#"Replaced value 1", {{"properties.lastUpdated", type datetimezone}}), - #"Added custom" = Table.TransformColumnTypes(Table.AddColumn(#"Changed column type", "recommendedActions", each [properties.extendedProperties.displaySKU] & " virtual machines in " & [properties.extendedProperties.location]), {{"recommendedActions", type text}}), - #"Changed column type 3" = Table.TransformColumnTypes(#"Added custom", {{"properties.extendedProperties.targetResourceCount", Int64.Type}, {"properties.extendedProperties.displayQty", Int64.Type}, {"properties.extendedProperties.qty", Int64.Type}}) + | extend + ['properties.recommendationTypeId'] = properties.recommendationTypeId, + ['properties.shortDescription'] = properties.shortDescription, + ['properties.resourceMetadata'] = properties.resourceMetadata, + ['properties.suppressionIds'] = properties.suppressionIds, + ['properties.impactedField'] = properties.impactedField, + ['properties.impactedValue'] = properties.impactedValue, + ['properties.lastUpdated'] = todatetime(properties.lastUpdated), + ['properties.category'] = properties.category, + ['properties.metadata'] = properties.metadata, + ['properties.impact'] = properties.impact, + ['properties.shortDescription.problem'] = properties.shortDescription.problem, + ['properties.shortDescription.solution'] = properties.shortDescription.solution, + ['properties.extendedProperties.reservedResourceType'] = properties.extendedProperties.reservedResourceType, + ['properties.extendedProperties.annualSavingsAmount'] = properties.extendedProperties.annualSavingsAmount, + ['properties.extendedProperties.targetResourceCount'] = toint(properties.extendedProperties.targetResourceCount), + ['properties.extendedProperties.savingsCurrency'] = properties.extendedProperties.savingsCurrency, + ['properties.extendedProperties.lookbackPeriod'] = properties.extendedProperties.lookbackPeriod, + ['properties.extendedProperties.savingsAmount'] = properties.extendedProperties.savingsAmount, + ['properties.extendedProperties.displaySKU'] = properties.extendedProperties.displaySKU, + ['properties.extendedProperties.displayQty'] = toint(properties.extendedProperties.displayQty), + ['properties.extendedProperties.location'] = properties.extendedProperties.location, + ['properties.extendedProperties.region'] = properties.extendedProperties.region, + ['properties.extendedProperties.vmSize'] = properties.extendedProperties.vmSize, + ['properties.extendedProperties.subId'] = properties.extendedProperties.subId, + ['properties.extendedProperties.scope'] = properties.extendedProperties.scope, + ['properties.extendedProperties.term'] = properties.extendedProperties.term, + ['properties.extendedProperties.sku'] = properties.extendedProperties.sku, + ['properties.extendedProperties.qty'] = toint(properties.extendedProperties.qty), + ['properties.resourceMetadata.resourceId'] = tolower(properties.resourceMetadata.resourceId), + ['properties.resourceMetadata.singular'] = properties.resourceMetadata.singular, + ['properties.resourceMetadata.plural'] = properties.resourceMetadata.plural, + ['properties.resourceMetadata.action'] = properties.resourceMetadata.action, + ['properties.resourceMetadata.source'] = properties.resourceMetadata.source, + recommendedActions = strcat(properties.extendedProperties.displaySKU, ' virtual machines in ', properties.extendedProperties.location), + SortOrder = case(properties.impact == 'High', 1, properties.impact == 'Medium', 2, properties.impact == 'Low', 3, 9) + | order by SortOrder asc + | project-away SortOrder + " & ftk_DemoFilter(), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]), + Types = Table.TransformColumnTypes(Source, { + {"properties.extendedProperties.annualSavingsAmount", type number}, + {"properties.extendedProperties.savingsAmount", type number}, + {"properties.extendedProperties.qty", Int64.Type}, + {"properties.extendedProperties.displayQty", Int64.Type}, + {"properties.extendedProperties.lookbackPeriod", Int64.Type}, + {"properties.extendedProperties.targetResourceCount", Int64.Type}, + {"properties.lastUpdated", type datetimezone} + }) in - #"Changed column type 3" + Types annotation PBI_NavigationStepName = Navigation 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 e23dea98b..7ec8bac09 100644 --- a/src/power-bi/storage/Shared.Dataset/definition/tables/Costs.tmdl +++ b/src/power-bi/storage/Shared.Dataset/definition/tables/Costs.tmdl @@ -112,6 +112,34 @@ table Costs RETURN IF(ComputeCondition, "Compute", ConcatenatedValues) lineageTag: ac79fd49-6124-47a6-8538-0d4cc28df316 + measure x_SkuCoreCountMeasure = ``` + + SUMX( + SUMMARIZE( + Costs, + Costs[ResourceId], + "DistinctCoreCount", MAX(Costs[x_SkuCoreCount]) + ), + [DistinctCoreCount] + ) + ``` + formatString: 0 + lineageTag: 1711f914-63b0-4377-b235-10898e6fc4ab + + measure x_SkuLicenseQuantityMeasure = ``` + + SUMX( + SUMMARIZE( + Costs, + Costs[ResourceId], + "DistinctCoreCount", MAX(Costs[x_SkuLicenseQuantity]) + ), + [DistinctCoreCount] + ) + ``` + formatString: 0 + lineageTag: 902eb4c9-763a-4b55-952d-5f8321aebbe2 + column ResourceId dataType: string lineageTag: 62265a48-5fe0-4b5c-8440-16f5b641adc8 @@ -1175,54 +1203,6 @@ table Costs annotation SummarizationSetBy = Automatic - column CommitmentDiscountNameUnique - dataType: string - lineageTag: fab2c83c-a0da-40d2-aeaf-3f147d997db8 - summarizeBy: none - sourceColumn: CommitmentDiscountNameUnique - - annotation SummarizationSetBy = Automatic - - column ResourceNameUnique - dataType: string - lineageTag: 2f597d4c-4e4c-46ff-bf5c-451758ac5988 - summarizeBy: none - sourceColumn: ResourceNameUnique - - annotation SummarizationSetBy = Automatic - - column SubAccountNameUnique - dataType: string - lineageTag: 075b0376-91cf-4627-8408-7231aa14294c - summarizeBy: none - sourceColumn: SubAccountNameUnique - - annotation SummarizationSetBy = Automatic - - column x_FreeReason - dataType: string - lineageTag: ae4d18e7-7ce7-453a-b5ae-6f33d44459fa - summarizeBy: none - sourceColumn: x_FreeReason - - annotation SummarizationSetBy = Automatic - - column x_ResourceGroupNameUnique - dataType: string - lineageTag: 8998d466-48f5-4f38-befa-ff5058fb71ff - summarizeBy: none - sourceColumn: x_ResourceGroupNameUnique - - annotation SummarizationSetBy = Automatic - - column x_SourceChanges - dataType: string - lineageTag: a4435a0f-a472-4469-be00-bd732eedae86 - summarizeBy: none - sourceColumn: x_SourceChanges - - annotation SummarizationSetBy = Automatic - column x_ChargeMonth dataType: dateTime formatString: Mmm yyyy @@ -1622,7 +1602,7 @@ table Costs Table.ReplaceErrorValues(Table.AddColumn(FTK, "tmp_Tags", each [x_TagsDictionary]), {{"tmp_Tags", null}}), "tmp_Tags", PromotedTags, - List.Transform(PromotedTags, each "tag_" & _) + List.Transform(PromotedTags, each "tag_" & Text.Replace(_, " ", "")) ), // AHB columns @@ -1644,9 +1624,7 @@ table Costs "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 if [x_SkuCoreCount] > 8 then [x_SkuCoreCount] else 0, type number ), diff --git a/src/power-bi/storage/Shared.Dataset/definition/tables/Disks.tmdl b/src/power-bi/storage/Shared.Dataset/definition/tables/Disks.tmdl index 925d3347b..5e7aea6ad 100644 --- a/src/power-bi/storage/Shared.Dataset/definition/tables/Disks.tmdl +++ b/src/power-bi/storage/Shared.Dataset/definition/tables/Disks.tmdl @@ -1,337 +1,215 @@ table Disks - lineageTag: ca0025b1-6be2-4a29-af32-30ef5f20fe5f + lineageTag: 0008230d-7a07-40e4-ba7f-cef258f5ac62 - column id + column subscriptionId dataType: string - lineageTag: deeae826-f875-4504-8131-757498d8759a + lineageTag: 7622c7b1-5d51-4063-97f3-75e8098198d4 summarizeBy: none - sourceColumn: id + sourceColumn: subscriptionId annotation SummarizationSetBy = Automatic column name dataType: string - lineageTag: a5fefea2-4fe5-484f-aed7-3d13f6323531 + lineageTag: d7dc5a6b-6850-421c-90be-26ef85476a28 summarizeBy: none sourceColumn: name annotation SummarizationSetBy = Automatic - column type - dataType: string - lineageTag: a311742d-a3f5-4432-b707-8dcd17c7d279 - summarizeBy: none - sourceColumn: type - - annotation SummarizationSetBy = Automatic - column tenantId dataType: string - lineageTag: 956716b4-925c-4fd7-966e-a3e3d8a8a4ce + lineageTag: 70f65b8a-76e4-4f5f-8b89-28b315f2366a summarizeBy: none sourceColumn: tenantId annotation SummarizationSetBy = Automatic - column kind - dataType: string - lineageTag: 4c524547-d15c-4cfd-a1b6-eed57b7f75a1 - summarizeBy: none - sourceColumn: kind - - annotation SummarizationSetBy = Automatic - column location dataType: string - lineageTag: e2c9aac1-398d-407d-b62f-43596f401420 + lineageTag: bae1fb2b-ef36-4a5c-b266-7ee626ecafc1 summarizeBy: none sourceColumn: location annotation SummarizationSetBy = Automatic - column resourceGroup - dataType: string - lineageTag: d2ec8b97-974d-4273-ab54-a99d67396140 - summarizeBy: none - sourceColumn: resourceGroup - - annotation SummarizationSetBy = Automatic - - column subscriptionId - dataType: string - lineageTag: bddb0cc5-51dd-4fd2-9bcf-16f5e4f9f18a - summarizeBy: none - sourceColumn: subscriptionId - - annotation SummarizationSetBy = Automatic - column managedBy dataType: string - lineageTag: c25abab2-269e-4428-9632-f00ff63cf033 + lineageTag: cf9f6e5f-aa49-49d0-a6c0-5a86337daaaf summarizeBy: none sourceColumn: managedBy annotation SummarizationSetBy = Automatic - column 'sku.name' - dataType: string - lineageTag: f1132ac0-604d-47d1-9b06-74db3b2d443c - summarizeBy: none - sourceColumn: sku.name - - annotation SummarizationSetBy = Automatic - - column 'sku.tier' - dataType: string - lineageTag: e9b4cfc4-81eb-4d94-bc14-ff38f90cbd8b - summarizeBy: none - sourceColumn: sku.tier - - annotation SummarizationSetBy = Automatic - - column plan - dataType: string - lineageTag: a48ec8c3-8134-47be-83e4-42c24554add2 - summarizeBy: none - sourceColumn: plan - - annotation SummarizationSetBy = Automatic - - column 'properties.provisioningState' - dataType: string - lineageTag: e0422dd9-490b-46ea-bba7-58623656ad8d - summarizeBy: none - sourceColumn: properties.provisioningState - - annotation SummarizationSetBy = Automatic - - column 'properties.publicNetworkAccess' - dataType: string - lineageTag: e66bb3fa-7deb-49fc-9be6-130494ad2e20 - summarizeBy: none - sourceColumn: properties.publicNetworkAccess - - annotation SummarizationSetBy = Automatic - - column 'properties.encryption' - dataType: string - lineageTag: 4b8960fb-6583-473c-bd60-9575871b4e94 - summarizeBy: none - sourceColumn: properties.encryption - - annotation SummarizationSetBy = Automatic - - column 'properties.networkAccessPolicy' + column osType dataType: string - lineageTag: 5c055ec0-604c-49f1-99fa-d87cff2131d4 + lineageTag: 2813c211-256f-4d18-8bed-13509d542b05 summarizeBy: none - sourceColumn: properties.networkAccessPolicy + sourceColumn: osType annotation SummarizationSetBy = Automatic - column 'properties.timeCreated' + column skuName dataType: string - lineageTag: cf636967-ce8c-4922-a10a-a8ce6349380c + lineageTag: b7e73136-b3db-4353-9c6d-b589f11dcd80 summarizeBy: none - sourceColumn: properties.timeCreated - - annotation SummarizationSetBy = Automatic - - column 'properties.diskSizeGB' - dataType: double - lineageTag: 12ec3d0b-32dc-41a7-9b06-8adc11f4ead9 - summarizeBy: sum - sourceColumn: properties.diskSizeGB + sourceColumn: skuName annotation SummarizationSetBy = Automatic - annotation PBI_FormatHint = {"isGeneralNumber":true} - - column 'properties.hyperVGeneration' + column skuTier dataType: string - lineageTag: 846d8ace-16fa-4fc8-83b0-d77ff75b9e60 + lineageTag: 56d25952-5baa-43b1-995b-1e4b2de85c12 summarizeBy: none - sourceColumn: properties.hyperVGeneration + sourceColumn: skuTier annotation SummarizationSetBy = Automatic - column 'properties.diskSizeBytes' + column diskSizeGB dataType: double - lineageTag: 69588c16-e1f7-4423-a050-147e83823716 + formatString: 0 + lineageTag: 3d096969-5e1d-4c86-b27b-4a5052afaade summarizeBy: sum - sourceColumn: properties.diskSizeBytes - - annotation SummarizationSetBy = Automatic - - annotation PBI_FormatHint = {"isGeneralNumber":true} - - column 'properties.creationData.createOption' - dataType: string - lineageTag: 967b33c4-a659-4e78-a76b-63edba801366 - summarizeBy: none - sourceColumn: properties.creationData.createOption + sourceColumn: diskSizeGB annotation SummarizationSetBy = Automatic - column 'properties.creationData.imageReference.id' - dataType: string - lineageTag: 819ebb4b-c380-49d6-9b18-59d807d2ea91 - summarizeBy: none - sourceColumn: properties.creationData.imageReference.id - - annotation SummarizationSetBy = Automatic - - column 'properties.osType' - dataType: string - lineageTag: 666c7b76-3df6-4cfb-b908-f81d7ffecdf8 - summarizeBy: none - sourceColumn: properties.osType - - annotation SummarizationSetBy = Automatic - - column 'properties.LastOwnershipUpdateTime' - dataType: string - lineageTag: fcef111b-7b03-4329-a762-37ed1fbdf4ff - summarizeBy: none - sourceColumn: properties.LastOwnershipUpdateTime - - annotation SummarizationSetBy = Automatic + annotation PBI_FormatHint = {"isDecimal":true} - column 'properties.diskState' - dataType: string - lineageTag: 515cbaa6-df64-484c-aef0-0e3804620405 - summarizeBy: none - sourceColumn: properties.diskState - - annotation SummarizationSetBy = Automatic - - column 'properties.uniqueId' - dataType: string - lineageTag: 3ac2b374-3003-48ff-8fa4-f7d98991ac05 - summarizeBy: none - sourceColumn: properties.uniqueId - - annotation SummarizationSetBy = Automatic - - column 'properties.diskMBpsReadWrite' + column diskMBpsReadWrite dataType: double - lineageTag: 2f95f7e9-da97-4689-87e0-84b3903aff7d + lineageTag: 553574b1-e3d9-4770-8f7f-c05d6a1763e3 summarizeBy: sum - sourceColumn: properties.diskMBpsReadWrite + sourceColumn: diskMBpsReadWrite annotation SummarizationSetBy = Automatic annotation PBI_FormatHint = {"isGeneralNumber":true} - column 'properties.diskIOPSReadWrite' + column diskIOPSReadWrite dataType: double - lineageTag: 490d018d-7a97-4546-ac90-157d803c424f + lineageTag: d614472f-ffe3-45dd-ba19-50ddd2e628e6 summarizeBy: sum - sourceColumn: properties.diskIOPSReadWrite + sourceColumn: diskIOPSReadWrite annotation SummarizationSetBy = Automatic annotation PBI_FormatHint = {"isGeneralNumber":true} - column 'properties.tier' + column diskState dataType: string - lineageTag: 9cdaeebc-4e7e-4795-9026-53f5cdc4a43e + lineageTag: 0c4f4703-181e-4f33-8b15-f16a72d2278c summarizeBy: none - sourceColumn: properties.tier + sourceColumn: diskState annotation SummarizationSetBy = Automatic - column tags - dataType: string - lineageTag: 72b832d7-5eb6-4a58-9b2b-d135d659d231 + column timeCreated + dataType: dateTime + formatString: General Date + lineageTag: f329e820-03af-4e98-849d-e94e9de82d56 summarizeBy: none - sourceColumn: tags + sourceColumn: timeCreated annotation SummarizationSetBy = Automatic - column identity - dataType: string - lineageTag: 032ff0cb-1cc0-48b6-a95d-d835578f742f + column LastOwnershipUpdateTime + dataType: dateTime + formatString: dd/mm/yyyy + lineageTag: 48d08bc6-f897-48a9-9447-788df9150f94 summarizeBy: none - sourceColumn: identity + sourceColumn: LastOwnershipUpdateTime annotation SummarizationSetBy = Automatic - column zones - dataType: string - lineageTag: 96b63e5f-b360-4135-b384-cf4a4f0c0e88 - summarizeBy: none - sourceColumn: zones - - annotation SummarizationSetBy = Automatic + annotation PBI_FormatHint = {"isDateTimeCustom":true} - column extendedLocation + column diskType dataType: string - lineageTag: dc3f509c-ea2b-4c19-9085-2c6167e21d62 + lineageTag: cb5aa8fb-6998-4746-b91a-c4241254bf26 summarizeBy: none - sourceColumn: extendedLocation + sourceColumn: diskType annotation SummarizationSetBy = Automatic - column diskType + column parentVM dataType: string - lineageTag: efab8b0e-646d-4b4a-93c6-8196f1379fec + lineageTag: c3703ad8-91fb-4863-867e-c77389dd7d35 summarizeBy: none - sourceColumn: diskType + sourceColumn: parentVM annotation SummarizationSetBy = Automatic - column parentVM + column Redundancy dataType: string - lineageTag: 8abc188f-2c52-4db8-967f-5447de969f33 + lineageTag: 757f9390-cb96-46cb-8cad-ef02b08ba1ae summarizeBy: none - sourceColumn: parentVM + sourceColumn: Redundancy annotation SummarizationSetBy = Automatic - column apiVersion + column id dataType: string - lineageTag: 9119af66-9eac-4189-a9ef-4e638296163a + lineageTag: aced1051-4fe8-4335-8f7d-b1bd4987f29c summarizeBy: none - sourceColumn: apiVersion + sourceColumn: id annotation SummarizationSetBy = Automatic - column systemData + column resourceGroup dataType: string - lineageTag: 23170a02-4cd5-4a36-94e6-7def321f9cf4 + lineageTag: 20d3ce4e-e586-49c6-a1c2-ce16d524d12a summarizeBy: none - sourceColumn: systemData + sourceColumn: resourceGroup annotation SummarizationSetBy = Automatic partition Disks = m mode: import queryGroup: 'Resource Graph' - source = ``` + source = let - Source = AzureResourceGraph.Query(" - - + query = " resources | where type =~ 'microsoft.compute/disks' | extend id = tolower(id) - - - " & ftk_DemoFilter(), "Tenant", null, null, [resultTruncated = false]), - #"Expanded properties" = Table.ExpandRecordColumn(Source, "properties", {"provisioningState", "publicNetworkAccess", "encryption", "networkAccessPolicy", "timeCreated", "diskSizeGB", "hyperVGeneration", "diskSizeBytes", "creationData", "osType", "LastOwnershipUpdateTime", "diskState", "uniqueId", "diskMBpsReadWrite", "diskIOPSReadWrite", "tier"}, {"properties.provisioningState", "properties.publicNetworkAccess", "properties.encryption", "properties.networkAccessPolicy", "properties.timeCreated", "properties.diskSizeGB", "properties.hyperVGeneration", "properties.diskSizeBytes", "properties.creationData", "properties.osType", "properties.LastOwnershipUpdateTime", "properties.diskState", "properties.uniqueId", "properties.diskMBpsReadWrite", "properties.diskIOPSReadWrite", "properties.tier"}), - #"Expanded sku" = Table.ExpandRecordColumn(#"Expanded properties", "sku", {"name", "tier"}, {"sku.name", "sku.tier"}), - #"Expanded properties.creationData" = Table.ExpandRecordColumn(#"Expanded sku", "properties.creationData", {"createOption", "imageReference"}, {"properties.creationData.createOption", "properties.creationData.imageReference"}), - #"Expanded properties.creationData.imageReference" = Table.ExpandRecordColumn(#"Expanded properties.creationData", "properties.creationData.imageReference", {"id"}, {"properties.creationData.imageReference.id"}), - #"Expanded zones" = Table.ExpandListColumn(#"Expanded properties.creationData.imageReference", "zones"), - #"Inserted conditional column" = Table.AddColumn(#"Expanded zones", "diskType", each if [properties.osType] = null then "Data Disk" else "OS Disk"), - #"Changed column type" = Table.TransformColumnTypes(#"Inserted conditional column", {{"properties.diskSizeGB", type number}, {"properties.diskSizeBytes", type number}, {"properties.diskMBpsReadWrite", type number}, {"properties.diskIOPSReadWrite", type number}}), - #"Duplicated column" = Table.DuplicateColumn(#"Changed column type", "managedBy", "managedBy - Copy"), - #"Extracted text after delimiter" = Table.TransformColumns(#"Duplicated column", {{"managedBy - Copy", each Text.AfterDelimiter(Text.From(_), "/", {0, RelativePosition.FromEnd}), type text}}), - #"Renamed columns" = Table.RenameColumns(#"Extracted text after delimiter", {{"managedBy - Copy", "parentVM"}}) + | extend skuName = sku.name + | extend skuTier = sku.tier + | extend timeCreated = properties.timeCreated + | extend diskSizeGB = properties.diskSizeGB + | extend diskState = properties.diskState + | extend LastOwnershipUpdateTime = properties.LastOwnershipUpdateTime + | extend diskMBpsReadWrite = properties.diskMBpsReadWrite + | extend diskIOPSReadWrite = properties.diskIOPSReadWrite + | extend osType = properties.osType + | extend diskType = iff(isnull(osType), 'Data disk', 'OS disk') + | parse kind=regex skuName with '_' Redundancy + | parse kind=regex managedBy with 'virtualMachines/' parentVM + | project + subscriptionId, + resourceGroup, + id, + name, + tenantId, + location, + managedBy, + osType, + skuName, + skuTier, + diskSizeGB, + diskMBpsReadWrite, + diskIOPSReadWrite, + diskState, + timeCreated, + LastOwnershipUpdateTime, + Redundancy, + parentVM, + diskType + " & ftk_DemoFilter(), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]), + #"Changed Type" = Table.TransformColumnTypes(Source,{{"diskSizeGB", type number}, {"diskMBpsReadWrite", type number}, {"diskIOPSReadWrite", type number}, {"timeCreated", type datetimezone}, {"LastOwnershipUpdateTime", type datetimezone}}) in - #"Renamed columns" - ``` + #"Changed Type" annotation PBI_NavigationStepName = Navigation diff --git a/src/power-bi/storage/Shared.Dataset/definition/tables/ManagementGroups.tmdl b/src/power-bi/storage/Shared.Dataset/definition/tables/ManagementGroups.tmdl index 2f00168aa..ce0c664bc 100644 --- a/src/power-bi/storage/Shared.Dataset/definition/tables/ManagementGroups.tmdl +++ b/src/power-bi/storage/Shared.Dataset/definition/tables/ManagementGroups.tmdl @@ -89,107 +89,139 @@ table ManagementGroups annotation SummarizationSetBy = Automatic - column displayName + column tags dataType: string - lineageTag: c95adf9e-155b-4db2-a6e8-83d630a2892e + lineageTag: 9084e19a-6639-447c-b365-671cd2e81486 summarizeBy: none - sourceColumn: displayName + sourceColumn: tags annotation SummarizationSetBy = Automatic - column 'managementGroupAncestorsChain.displayName' + column identity dataType: string - lineageTag: 6c8a61d3-6351-4374-b38b-85f967964e05 + lineageTag: 5ffd94bb-922a-4e28-a475-b818e035a90f summarizeBy: none - sourceColumn: managementGroupAncestorsChain.displayName + sourceColumn: identity annotation SummarizationSetBy = Automatic - column 'managementGroupAncestorsChain.name' + column zones dataType: string - lineageTag: 34bc6713-be52-4615-b9d5-dd89193cda7d + lineageTag: 843d2718-8d1a-41a2-be04-8010408f4f84 summarizeBy: none - sourceColumn: managementGroupAncestorsChain.name + sourceColumn: zones annotation SummarizationSetBy = Automatic - column updatedTime + column extendedLocation dataType: string - lineageTag: 7df50bf9-576b-4d14-ac15-b2e380019699 + lineageTag: 1536d8ca-3e8b-492f-9ebd-1760fcda0656 summarizeBy: none - sourceColumn: updatedTime + sourceColumn: extendedLocation annotation SummarizationSetBy = Automatic - column updatedBy + column properties dataType: string - lineageTag: 0534e99a-a2a7-444c-88ea-26d6e6a060f5 + lineageTag: 3b170688-85ae-4e9d-890e-7e5661c505d0 summarizeBy: none - sourceColumn: updatedBy + sourceColumn: properties annotation SummarizationSetBy = Automatic - column version + column 'properties.displayName' dataType: string - lineageTag: 775e305e-38e1-4c55-988b-4f2b8a3b57d6 + lineageTag: c2a83af4-ecb0-48e2-8c91-c539f010c832 summarizeBy: none - sourceColumn: version + sourceColumn: properties.displayName annotation SummarizationSetBy = Automatic - column 'parent.displayName' + column 'properties.details' dataType: string - lineageTag: d766d044-4796-4bef-9dbb-5abc1f8a9366 + lineageTag: 22995768-4815-4e93-8dbd-380eb7d44f43 summarizeBy: none - sourceColumn: parent.displayName + sourceColumn: properties.details annotation SummarizationSetBy = Automatic - column 'parent.name' + column 'properties.details.managementGroupAncestorsChain' dataType: string - lineageTag: 363e53e3-8504-4dd9-bd88-8df6c587a964 + lineageTag: d19480fb-6f16-49e7-b2b7-4fad83c35e7d summarizeBy: none - sourceColumn: parent.name + sourceColumn: properties.details.managementGroupAncestorsChain annotation SummarizationSetBy = Automatic - column 'parent.id' + column 'properties.details.updatedTime' dataType: string - lineageTag: ded0c0a5-dc3f-42ff-8ee0-fbaca8fff87e + lineageTag: 008e6ba3-287b-47b4-a4ab-739a14ac19fa summarizeBy: none - sourceColumn: parent.id + sourceColumn: properties.details.updatedTime annotation SummarizationSetBy = Automatic - column tags + column 'properties.details.updatedBy' dataType: string - lineageTag: 9084e19a-6639-447c-b365-671cd2e81486 + lineageTag: 7ba4276d-ba03-4243-b330-9b2961829e82 summarizeBy: none - sourceColumn: tags + sourceColumn: properties.details.updatedBy annotation SummarizationSetBy = Automatic - column identity + column 'properties.details.version' dataType: string - lineageTag: 5ffd94bb-922a-4e28-a475-b818e035a90f + lineageTag: cc74e405-4d3e-4c8f-b35f-2dd4d388b1d4 summarizeBy: none - sourceColumn: identity + sourceColumn: properties.details.version annotation SummarizationSetBy = Automatic - column zones + column 'properties.details.parent' dataType: string - lineageTag: 843d2718-8d1a-41a2-be04-8010408f4f84 + lineageTag: 107025bb-de26-4e8b-8c2a-64c244d292d8 summarizeBy: none - sourceColumn: zones + sourceColumn: properties.details.parent annotation SummarizationSetBy = Automatic - column extendedLocation + column 'properties.details.parent.displayName' dataType: string - lineageTag: 1536d8ca-3e8b-492f-9ebd-1760fcda0656 + lineageTag: b160c643-8416-4ffd-a945-3c0119eafadb summarizeBy: none - sourceColumn: extendedLocation + sourceColumn: properties.details.parent.displayName + + annotation SummarizationSetBy = Automatic + + column 'properties.details.parent.name' + dataType: string + lineageTag: e5cbe777-4e50-4c62-aec7-67ead1fe0b8d + summarizeBy: none + sourceColumn: properties.details.parent.name + + annotation SummarizationSetBy = Automatic + + column 'properties.details.parent.id' + dataType: string + lineageTag: 42790a1e-b547-4fdb-808f-8c49218e9530 + summarizeBy: none + sourceColumn: properties.details.parent.id + + annotation SummarizationSetBy = Automatic + + column 'properties.details.managementGroupAncestorsChain.displayName' + dataType: string + lineageTag: 4ca64703-7f49-4170-93f3-16087702156f + summarizeBy: none + sourceColumn: properties.details.managementGroupAncestorsChain.displayName + + annotation SummarizationSetBy = Automatic + + column 'properties.details.managementGroupAncestorsChain.name' + dataType: string + lineageTag: f5aa191d-ef68-4b44-92f7-63bdca6bc16c + summarizeBy: none + sourceColumn: properties.details.managementGroupAncestorsChain.name annotation SummarizationSetBy = Automatic @@ -198,17 +230,28 @@ table ManagementGroups queryGroup: 'Resource Graph' source = let - Source = AzureResourceGraph.Query(" + query = " resourcecontainers | where type == 'microsoft.management/managementgroups' - " & (if ftk_DemoFilter() = "" then "" else "| where name startswith 'Trey'"), "Tenant", null, null, [resultTruncated = false]), - #"Expanded properties" = Table.ExpandRecordColumn(Source, "properties", {"displayName", "details"}, {"displayName", "details"}), - #"Expanded details" = Table.ExpandRecordColumn(#"Expanded properties", "details", {"managementGroupAncestorsChain", "updatedTime", "updatedBy", "version", "parent"}, {"managementGroupAncestorsChain", "updatedTime", "updatedBy", "version", "parent"}), - #"Expanded parent" = Table.ExpandRecordColumn(#"Expanded details", "parent", {"displayName", "name", "id"}, {"parent.displayName", "parent.name", "parent.id"}), - #"Expanded managementGroupAncestorsChain" = Table.ExpandListColumn(#"Expanded parent", "managementGroupAncestorsChain"), - #"Expanded managementGroupAncestorsChain 1" = Table.ExpandRecordColumn(#"Expanded managementGroupAncestorsChain", "managementGroupAncestorsChain", {"displayName", "name"}, {"managementGroupAncestorsChain.displayName", "managementGroupAncestorsChain.name"}) + | extend + ['properties.displayName'] = properties.displayName, + ['properties.details'] = properties.details, + ['properties.details.managementGroupAncestorsChain'] = properties.details.managementGroupAncestorsChain, + ['properties.details.updatedTime'] = properties.details.updatedTime, + ['properties.details.updatedBy'] = properties.details.updatedBy, + ['properties.details.version'] = properties.details.version, + ['properties.details.parent'] = properties.details.parent, + ['properties.details.parent.displayName'] = properties.details.parent.displayName, + ['properties.details.parent.name'] = properties.details.parent.name, + ['properties.details.parent.id'] = properties.details.parent.id + | mv-expand ['properties.details.managementGroupAncestorsChain'] + | extend + ['properties.details.managementGroupAncestorsChain.displayName'] = properties.details.managementGroupAncestorsChain.displayName, + ['properties.details.managementGroupAncestorsChain.name'] = properties.details.managementGroupAncestorsChain.name + " & (if ftk_DemoFilter() = "" then "" else "| where name startswith 'Trey'"), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]) in - #"Expanded managementGroupAncestorsChain 1" + Source annotation PBI_NavigationStepName = Navigation diff --git a/src/power-bi/storage/Shared.Dataset/definition/tables/NetworkInterfaces.tmdl b/src/power-bi/storage/Shared.Dataset/definition/tables/NetworkInterfaces.tmdl index 4b2ca23a1..9f692894b 100644 --- a/src/power-bi/storage/Shared.Dataset/definition/tables/NetworkInterfaces.tmdl +++ b/src/power-bi/storage/Shared.Dataset/definition/tables/NetworkInterfaces.tmdl @@ -345,24 +345,102 @@ table NetworkInterfaces annotation SummarizationSetBy = Automatic + column properties + dataType: string + lineageTag: 073e38fe-ab5b-489f-a6e6-ff6744cf4e09 + summarizeBy: none + sourceColumn: properties + + annotation SummarizationSetBy = Automatic + + column 'properties.networkSecurityGroup' + dataType: string + lineageTag: 8ff1ceae-7275-4140-97ff-2b5966d113ee + summarizeBy: none + sourceColumn: properties.networkSecurityGroup + + annotation SummarizationSetBy = Automatic + + column 'properties.ipConfigurations' + dataType: string + lineageTag: 5b7294e2-2846-4688-91ba-a7de264bad07 + summarizeBy: none + sourceColumn: properties.ipConfigurations + + annotation SummarizationSetBy = Automatic + + column 'properties.virtualMachine' + dataType: string + lineageTag: 6223842f-24da-46ce-8346-627044237497 + summarizeBy: none + sourceColumn: properties.virtualMachine + + annotation SummarizationSetBy = Automatic + + column 'properties.ipConfigurations.properties' + dataType: string + lineageTag: 961de273-fb7c-4805-8df8-0f6a1ddb345b + summarizeBy: none + sourceColumn: properties.ipConfigurations.properties + + annotation SummarizationSetBy = Automatic + + column 'properties.ipConfigurations.properties.publicIPAddress' + dataType: string + lineageTag: 0481ca01-dae9-474b-8233-501ab1bfe9ef + summarizeBy: none + sourceColumn: properties.ipConfigurations.properties.publicIPAddress + + annotation SummarizationSetBy = Automatic + partition NetworkInterfaces = m mode: import queryGroup: 'Resource Graph' source = let - Source = AzureResourceGraph.Query(" + query = " Resources | where type =~ 'microsoft.network/networkinterfaces' - " & ftk_DemoFilter(), "Tenant", null, null, [resultTruncated = false]), - #"Expanded properties" = Table.ExpandRecordColumn(Source, "properties", {"provisioningState", "resourceGuid", "enableAcceleratedNetworking", "disableTcpStateTracking", "vnetEncryptionSupported", "networkSecurityGroup", "ipConfigurations", "enableIPForwarding", "tapConfigurations", "hostedWorkloads", "allowPort25Out", "auxiliaryMode", "dnsSettings", "auxiliarySku", "macAddress", "nicType", "primary", "virtualMachine"}, {"properties.provisioningState", "properties.resourceGuid", "properties.enableAcceleratedNetworking", "properties.disableTcpStateTracking", "properties.vnetEncryptionSupported", "properties.networkSecurityGroup", "properties.ipConfigurations", "properties.enableIPForwarding", "properties.tapConfigurations", "properties.hostedWorkloads", "properties.allowPort25Out", "properties.auxiliaryMode", "properties.dnsSettings", "properties.auxiliarySku", "properties.macAddress", "properties.nicType", "properties.primary", "properties.virtualMachine"}), - #"Expanded properties.virtualMachine" = Table.ExpandRecordColumn(#"Expanded properties", "properties.virtualMachine", {"id"}, {"properties.virtualMachine.id"}), - #"Expanded properties.ipConfigurations" = Table.ExpandListColumn(#"Expanded properties.virtualMachine", "properties.ipConfigurations"), - #"Expanded properties.ipConfigurations 1" = Table.ExpandRecordColumn(#"Expanded properties.ipConfigurations", "properties.ipConfigurations", {"type", "name", "properties", "id", "etag"}, {"properties.ipConfigurations.type", "properties.ipConfigurations.name", "properties.ipConfigurations.properties", "properties.ipConfigurations.id", "properties.ipConfigurations.etag"}), - #"Expanded properties.ipConfigurations.properties" = Table.ExpandRecordColumn(#"Expanded properties.ipConfigurations 1", "properties.ipConfigurations.properties", {"provisioningState", "privateIPAddressVersion", "privateIPAllocationMethod", "subnet", "privateIPAddress", "primary", "publicIPAddress"}, {"properties.ipConfigurations.properties.provisioningState", "properties.ipConfigurations.properties.privateIPAddressVersion", "properties.ipConfigurations.properties.privateIPAllocationMethod", "properties.ipConfigurations.properties.subnet", "properties.ipConfigurations.properties.privateIPAddress", "properties.ipConfigurations.properties.primary", "properties.ipConfigurations.properties.publicIPAddress"}), - #"Expanded properties.ipConfigurations.properties.publicIPAddress" = Table.ExpandRecordColumn(#"Expanded properties.ipConfigurations.properties", "properties.ipConfigurations.properties.publicIPAddress", {"id"}, {"properties.ipConfigurations.properties.publicIPAddress.id"}), - #"Expanded properties.networkSecurityGroup" = Table.ExpandRecordColumn(#"Expanded properties.ipConfigurations.properties.publicIPAddress", "properties.networkSecurityGroup", {"id"}, {"properties.networkSecurityGroup.id"}) + | extend + ['properties.provisioningState'] = properties.provisioningState, + ['properties.resourceGuid'] = properties.resourceGuid, + ['properties.enableAcceleratedNetworking'] = properties.enableAcceleratedNetworking, + ['properties.disableTcpStateTracking'] = properties.disableTcpStateTracking, + ['properties.vnetEncryptionSupported'] = properties.vnetEncryptionSupported, + ['properties.networkSecurityGroup'] = properties.networkSecurityGroup, + ['properties.ipConfigurations'] = properties.ipConfigurations, + ['properties.enableIPForwarding'] = properties.enableIPForwarding, + ['properties.tapConfigurations'] = properties.tapConfigurations, + ['properties.hostedWorkloads'] = properties.hostedWorkloads, + ['properties.allowPort25Out'] = properties.allowPort25Out, + ['properties.auxiliaryMode'] = properties.auxiliaryMode, + ['properties.dnsSettings'] = properties.dnsSettings, + ['properties.auxiliarySku'] = properties.auxiliarySku, + ['properties.macAddress'] = properties.macAddress, + ['properties.nicType'] = properties.nicType, + ['properties.primary'] = properties.primary, + ['properties.virtualMachine'] = properties.virtualMachine, + ['properties.virtualMachine.id'] = properties.virtualMachine.id + | mv-expand ['properties.ipConfigurations'] + | extend + ['properties.ipConfigurations.type'] = properties.ipConfigurations.type, + ['properties.ipConfigurations.name'] = properties.ipConfigurations.name, + ['properties.ipConfigurations.properties'] = properties.ipConfigurations.properties, + ['properties.ipConfigurations.id'] = properties.ipConfigurations.id, + ['properties.ipConfigurations.etag'] = properties.ipConfigurations.etag, + ['properties.ipConfigurations.properties.provisioningState'] = properties.ipConfigurations.properties.provisioningState, + ['properties.ipConfigurations.properties.privateIPAddressVersion'] = properties.ipConfigurations.properties.privateIPAddressVersion, + ['properties.ipConfigurations.properties.privateIPAllocationMethod'] = properties.ipConfigurations.properties.privateIPAllocationMethod, + ['properties.ipConfigurations.properties.subnet'] = properties.ipConfigurations.properties.subnet, + ['properties.ipConfigurations.properties.privateIPAddress'] = properties.ipConfigurations.properties.privateIPAddress, + ['properties.ipConfigurations.properties.primary'] = properties.ipConfigurations.properties.primary, + ['properties.ipConfigurations.properties.publicIPAddress'] = properties.ipConfigurations.properties.publicIPAddress, + ['properties.ipConfigurations.properties.publicIPAddress.id'] = properties.ipConfigurations.properties.publicIPAddress.id, + ['properties.networkSecurityGroup.id'] = properties.networkSecurityGroup.id + " & ftk_DemoFilter(), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]) in - #"Expanded properties.networkSecurityGroup" + Source annotation PBI_NavigationStepName = Navigation diff --git a/src/power-bi/storage/Shared.Dataset/definition/tables/NetworkSecurityGroups.tmdl b/src/power-bi/storage/Shared.Dataset/definition/tables/NetworkSecurityGroups.tmdl index 27b2a2bb6..83ab6a677 100644 --- a/src/power-bi/storage/Shared.Dataset/definition/tables/NetworkSecurityGroups.tmdl +++ b/src/power-bi/storage/Shared.Dataset/definition/tables/NetworkSecurityGroups.tmdl @@ -441,34 +441,124 @@ table NetworkSecurityGroups annotation SummarizationSetBy = Automatic + column properties + dataType: string + lineageTag: 2c418807-334f-402c-8ca7-c396b7d32d00 + summarizeBy: none + sourceColumn: properties + + annotation SummarizationSetBy = Automatic + + column 'properties.networkInterfaces' + dataType: string + lineageTag: 6fc5e2d1-6b7e-4e7c-9df2-2b2764b330d1 + summarizeBy: none + sourceColumn: properties.networkInterfaces + + annotation SummarizationSetBy = Automatic + + column 'properties.defaultSecurityRules' + dataType: string + lineageTag: e710fe3e-af71-498d-8315-c8c14df2bf72 + summarizeBy: none + sourceColumn: properties.defaultSecurityRules + + annotation SummarizationSetBy = Automatic + + column 'properties.securityRules' + dataType: string + lineageTag: 49da77d4-1ae6-486d-8e0a-e05c49d44e91 + summarizeBy: none + sourceColumn: properties.securityRules + + annotation SummarizationSetBy = Automatic + + column 'properties.defaultSecurityRules.properties' + dataType: string + lineageTag: c9544b13-ebb9-4fa3-b238-62e8ccc867cb + summarizeBy: none + sourceColumn: properties.defaultSecurityRules.properties + + annotation SummarizationSetBy = Automatic + + column 'properties.securityRules.properties' + dataType: string + lineageTag: cec2baf4-bee3-4d7c-a26c-4a7280faeaa7 + summarizeBy: none + sourceColumn: properties.securityRules.properties + + annotation SummarizationSetBy = Automatic + partition NetworkSecurityGroups = m mode: import queryGroup: 'Resource Graph' source = let - Source = AzureResourceGraph.Query(" + query = " Resources | where type =~ 'microsoft.network/networksecuritygroups' - " & ftk_DemoFilter(), "Tenant", null, null, [resultTruncated = false]), - #"Expanded properties" = Table.ExpandRecordColumn(Source, "properties", {"provisioningState", "networkInterfaces", "resourceGuid", "defaultSecurityRules", "securityRules"}, {"properties.provisioningState", "properties.networkInterfaces", "properties.resourceGuid", "properties.defaultSecurityRules", "properties.securityRules"}), - #"Expanded properties.networkInterfaces" = Table.ExpandListColumn(#"Expanded properties", "properties.networkInterfaces"), - #"Expanded properties.networkInterfaces 1" = Table.ExpandRecordColumn(#"Expanded properties.networkInterfaces", "properties.networkInterfaces", {"id"}, {"properties.networkInterfaces.id"}), - #"Expanded properties.defaultSecurityRules" = Table.ExpandListColumn(#"Expanded properties.networkInterfaces 1", "properties.defaultSecurityRules"), - #"Expanded properties.defaultSecurityRules 1" = Table.ExpandRecordColumn(#"Expanded properties.defaultSecurityRules", "properties.defaultSecurityRules", {"type", "properties", "name", "id", "etag"}, {"properties.defaultSecurityRules.type", "properties.defaultSecurityRules.properties", "properties.defaultSecurityRules.name", "properties.defaultSecurityRules.id", "properties.defaultSecurityRules.etag"}), - #"Expanded properties.defaultSecurityRules.properties" = Table.ExpandRecordColumn(#"Expanded properties.defaultSecurityRules 1", "properties.defaultSecurityRules.properties", {"provisioningState", "destinationAddressPrefixes", "destinationAddressPrefix", "destinationPortRanges", "sourceAddressPrefixes", "sourceAddressPrefix", "destinationPortRange", "sourcePortRanges", "sourcePortRange", "description", "protocol", "direction", "priority", "access"}, {"properties.defaultSecurityRules.properties.provisioningState", "properties.defaultSecurityRules.properties.destinationAddressPrefixes", "properties.defaultSecurityRules.properties.destinationAddressPrefix", "properties.defaultSecurityRules.properties.destinationPortRanges", "properties.defaultSecurityRules.properties.sourceAddressPrefixes", "properties.defaultSecurityRules.properties.sourceAddressPrefix", "properties.defaultSecurityRules.properties.destinationPortRange", "properties.defaultSecurityRules.properties.sourcePortRanges", "properties.defaultSecurityRules.properties.sourcePortRange", "properties.defaultSecurityRules.properties.description", "properties.defaultSecurityRules.properties.protocol", "properties.defaultSecurityRules.properties.direction", "properties.defaultSecurityRules.properties.priority", "properties.defaultSecurityRules.properties.access"}), - #"Expanded properties.defaultSecurityRules.properties.destinationAddressPrefixes" = Table.ExpandListColumn(#"Expanded properties.defaultSecurityRules.properties", "properties.defaultSecurityRules.properties.destinationAddressPrefixes"), - #"Expanded properties.defaultSecurityRules.properties.destinationPortRanges" = Table.ExpandListColumn(#"Expanded properties.defaultSecurityRules.properties.destinationAddressPrefixes", "properties.defaultSecurityRules.properties.destinationPortRanges"), - #"Expanded properties.defaultSecurityRules.properties.sourceAddressPrefixes" = Table.ExpandListColumn(#"Expanded properties.defaultSecurityRules.properties.destinationPortRanges", "properties.defaultSecurityRules.properties.sourceAddressPrefixes"), - #"Expanded properties.defaultSecurityRules.properties.sourcePortRanges" = Table.ExpandListColumn(#"Expanded properties.defaultSecurityRules.properties.sourceAddressPrefixes", "properties.defaultSecurityRules.properties.sourcePortRanges"), - #"Expanded properties.securityRules" = Table.ExpandListColumn(#"Expanded properties.defaultSecurityRules.properties.sourcePortRanges", "properties.securityRules"), - #"Expanded properties.securityRules 1" = Table.ExpandRecordColumn(#"Expanded properties.securityRules", "properties.securityRules", {"type", "properties", "name", "id", "etag"}, {"properties.securityRules.type", "properties.securityRules.properties", "properties.securityRules.name", "properties.securityRules.id", "properties.securityRules.etag"}), - #"Expanded properties.securityRules.properties" = Table.ExpandRecordColumn(#"Expanded properties.securityRules 1", "properties.securityRules.properties", {"provisioningState", "destinationAddressPrefixes", "destinationAddressPrefix", "destinationPortRanges", "sourceAddressPrefixes", "sourceAddressPrefix", "destinationPortRange", "sourcePortRanges", "sourcePortRange", "protocol", "direction", "priority", "access"}, {"properties.securityRules.properties.provisioningState", "properties.securityRules.properties.destinationAddressPrefixes", "properties.securityRules.properties.destinationAddressPrefix", "properties.securityRules.properties.destinationPortRanges", "properties.securityRules.properties.sourceAddressPrefixes", "properties.securityRules.properties.sourceAddressPrefix", "properties.securityRules.properties.destinationPortRange", "properties.securityRules.properties.sourcePortRanges", "properties.securityRules.properties.sourcePortRange", "properties.securityRules.properties.protocol", "properties.securityRules.properties.direction", "properties.securityRules.properties.priority", "properties.securityRules.properties.access"}), - #"Expanded properties.securityRules.properties.destinationAddressPrefixes" = Table.ExpandListColumn(#"Expanded properties.securityRules.properties", "properties.securityRules.properties.destinationAddressPrefixes"), - #"Expanded properties.securityRules.properties.destinationPortRanges" = Table.ExpandListColumn(#"Expanded properties.securityRules.properties.destinationAddressPrefixes", "properties.securityRules.properties.destinationPortRanges"), - #"Expanded properties.securityRules.properties.sourceAddressPrefixes" = Table.ExpandListColumn(#"Expanded properties.securityRules.properties.destinationPortRanges", "properties.securityRules.properties.sourceAddressPrefixes"), - #"Expanded properties.securityRules.properties.sourcePortRanges" = Table.ExpandListColumn(#"Expanded properties.securityRules.properties.sourceAddressPrefixes", "properties.securityRules.properties.sourcePortRanges") + | extend + ['properties.provisioningState'] = properties.provisioningState, + ['properties.networkInterfaces'] = properties.networkInterfaces, + ['properties.resourceGuid'] = properties.resourceGuid, + ['properties.defaultSecurityRules'] = properties.defaultSecurityRules, + ['properties.securityRules'] = properties.securityRules + | mv-expand ['properties.networkInterfaces'] + | extend + ['properties.networkInterfaces.id'] = properties.networkInterfaces.id + | mv-expand ['properties.defaultSecurityRules'] + | extend + ['properties.defaultSecurityRules.type'] = properties.defaultSecurityRules.type, + ['properties.defaultSecurityRules.properties'] = properties.defaultSecurityRules.properties, + ['properties.defaultSecurityRules.name'] = properties.defaultSecurityRules.name, + ['properties.defaultSecurityRules.id'] = properties.defaultSecurityRules.id, + ['properties.defaultSecurityRules.etag'] = properties.defaultSecurityRules.etag, + ['properties.defaultSecurityRules.properties.provisioningState'] = properties.defaultSecurityRules.properties.provisioningState, + ['properties.defaultSecurityRules.properties.destinationAddressPrefixes'] = properties.defaultSecurityRules.properties.destinationAddressPrefixes, + ['properties.defaultSecurityRules.properties.destinationAddressPrefix'] = properties.defaultSecurityRules.properties.destinationAddressPrefix, + ['properties.defaultSecurityRules.properties.destinationPortRanges'] = properties.defaultSecurityRules.properties.destinationPortRanges, + ['properties.defaultSecurityRules.properties.sourceAddressPrefixes'] = properties.defaultSecurityRules.properties.sourceAddressPrefixes, + ['properties.defaultSecurityRules.properties.sourceAddressPrefix'] = properties.defaultSecurityRules.properties.sourceAddressPrefix, + ['properties.defaultSecurityRules.properties.destinationPortRange'] = properties.defaultSecurityRules.properties.destinationPortRange, + ['properties.defaultSecurityRules.properties.sourcePortRanges'] = properties.defaultSecurityRules.properties.sourcePortRanges, + ['properties.defaultSecurityRules.properties.sourcePortRange'] = properties.defaultSecurityRules.properties.sourcePortRange, + ['properties.defaultSecurityRules.properties.description'] = properties.defaultSecurityRules.properties.description, + ['properties.defaultSecurityRules.properties.protocol'] = properties.defaultSecurityRules.properties.protocol, + ['properties.defaultSecurityRules.properties.direction'] = properties.defaultSecurityRules.properties.direction, + ['properties.defaultSecurityRules.properties.priority'] = properties.defaultSecurityRules.properties.priority, + ['properties.defaultSecurityRules.properties.access'] = properties.defaultSecurityRules.properties.access + | mv-expand ['properties.defaultSecurityRules.properties.destinationAddressPrefixes'] + | mv-expand ['properties.defaultSecurityRules.properties.destinationPortRanges'] + | mv-expand ['properties.defaultSecurityRules.properties.sourceAddressPrefixes'] + | mv-expand ['properties.defaultSecurityRules.properties.sourcePortRanges'] + | mv-expand ['properties.securityRules'] + | extend + ['properties.securityRules.type'] = properties.securityRules.type, + ['properties.securityRules.properties'] = properties.securityRules.properties, + ['properties.securityRules.name'] = properties.securityRules.name, + ['properties.securityRules.id'] = properties.securityRules.id, + ['properties.securityRules.etag'] = properties.securityRules.etag, + ['properties.securityRules.properties.provisioningState'] = properties.securityRules.properties.provisioningState, + ['properties.securityRules.properties.destinationAddressPrefixes'] = properties.securityRules.properties.destinationAddressPrefixes, + ['properties.securityRules.properties.destinationAddressPrefix'] = properties.securityRules.properties.destinationAddressPrefix, + ['properties.securityRules.properties.destinationPortRanges'] = properties.securityRules.properties.destinationPortRanges, + ['properties.securityRules.properties.sourceAddressPrefixes'] = properties.securityRules.properties.sourceAddressPrefixes, + ['properties.securityRules.properties.sourceAddressPrefix'] = properties.securityRules.properties.sourceAddressPrefix, + ['properties.securityRules.properties.destinationPortRange'] = properties.securityRules.properties.destinationPortRange, + ['properties.securityRules.properties.sourcePortRanges'] = properties.securityRules.properties.sourcePortRanges, + ['properties.securityRules.properties.sourcePortRange'] = properties.securityRules.properties.sourcePortRange, + ['properties.securityRules.properties.protocol'] = properties.securityRules.properties.protocol, + ['properties.securityRules.properties.direction'] = properties.securityRules.properties.direction, + ['properties.securityRules.properties.priority'] = properties.securityRules.properties.priority, + ['properties.securityRules.properties.access'] = properties.securityRules.properties.access + | mv-expand ['properties.securityRules.properties.destinationAddressPrefixes'] + | mv-expand ['properties.securityRules.properties.destinationPortRanges'] + | mv-expand ['properties.securityRules.properties.sourceAddressPrefixes'] + | mv-expand ['properties.securityRules.properties.sourcePortRanges'] + " & ftk_DemoFilter(), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]) in - #"Expanded properties.securityRules.properties.sourcePortRanges" + Source annotation PBI_NavigationStepName = Navigation diff --git a/src/power-bi/storage/Shared.Dataset/definition/tables/PolicyAssignments.tmdl b/src/power-bi/storage/Shared.Dataset/definition/tables/PolicyAssignments.tmdl index ec119591a..bf5a20493 100644 --- a/src/power-bi/storage/Shared.Dataset/definition/tables/PolicyAssignments.tmdl +++ b/src/power-bi/storage/Shared.Dataset/definition/tables/PolicyAssignments.tmdl @@ -337,21 +337,73 @@ table PolicyAssignments annotation SummarizationSetBy = Automatic + column properties + dataType: string + lineageTag: e31bdaa0-3d60-4d4c-aec2-37ee6ec589f8 + summarizeBy: none + sourceColumn: properties + + annotation SummarizationSetBy = Automatic + + column identity + dataType: string + lineageTag: a2bd224c-258b-4291-8968-412ce16ba365 + summarizeBy: none + sourceColumn: identity + + annotation SummarizationSetBy = Automatic + + column 'properties.metadata' + dataType: string + lineageTag: a94cc1c6-bf08-40f6-91b4-5ce811d3b876 + summarizeBy: none + sourceColumn: properties.metadata + + annotation SummarizationSetBy = Automatic + partition PolicyAssignments = m mode: import queryGroup: 'Resource Graph' source = let - Source = AzureResourceGraph.Query( - "policyResources + query = " + policyResources | where type =~'Microsoft.Authorization/PolicyAssignments' - " & ftk_DemoFilter(), "Tenant", null, null, [resultTruncated = false]), - #"Expanded properties" = Table.ExpandRecordColumn(Source, "properties", {"policyDefinitionId", "effectiveDefinitionVersion", "latestDefinitionVersion", "nonComplianceMessages", "definitionVersion", "resourceSelectors", "enforcementMode", "assignmentType", "description", "displayName", "parameters", "notScopes", "overrides", "metadata", "scope"}, {"properties.policyDefinitionId", "properties.effectiveDefinitionVersion", "properties.latestDefinitionVersion", "properties.nonComplianceMessages", "properties.definitionVersion", "properties.resourceSelectors", "properties.enforcementMode", "properties.assignmentType", "properties.description", "properties.displayName", "properties.parameters", "properties.notScopes", "properties.overrides", "properties.metadata", "properties.scope"}), - #"Expanded properties.metadata" = Table.ExpandRecordColumn(#"Expanded properties", "properties.metadata", {"createdOn", "createdBy", "assignedBy", "parameterScopes", "updatedOn", "updatedBy", "category", "managedByResourceId", "securityCenter", "excludedOutOfTheBoxStandards"}, {"properties.metadata.createdOn", "properties.metadata.createdBy", "properties.metadata.assignedBy", "properties.metadata.parameterScopes", "properties.metadata.updatedOn", "properties.metadata.updatedBy", "properties.metadata.category", "properties.metadata.managedByResourceId", "properties.metadata.securityCenter", "properties.metadata.excludedOutOfTheBoxStandards"}), - #"Expanded identity" = Table.ExpandRecordColumn(#"Expanded properties.metadata", "identity", {"userAssignedIdentities", "principalId", "tenantId", "type"}, {"identity.userAssignedIdentities", "identity.principalId", "identity.tenantId", "identity.type"}), - #"Expanded properties.notScopes" = Table.ExpandListColumn(#"Expanded identity", "properties.notScopes") + | extend + ['properties.policyDefinitionId'] = properties.policyDefinitionId, + ['properties.effectiveDefinitionVersion'] = properties.effectiveDefinitionVersion, + ['properties.latestDefinitionVersion'] = properties.latestDefinitionVersion, + ['properties.nonComplianceMessages'] = properties.nonComplianceMessages, + ['properties.definitionVersion'] = properties.definitionVersion, + ['properties.resourceSelectors'] = properties.resourceSelectors, + ['properties.enforcementMode'] = properties.enforcementMode, + ['properties.assignmentType'] = properties.assignmentType, + ['properties.description'] = properties.description, + ['properties.displayName'] = properties.displayName, + ['properties.parameters'] = properties.parameters, + ['properties.notScopes'] = properties.notScopes, + ['properties.overrides'] = properties.overrides, + ['properties.metadata'] = properties.metadata, + ['properties.scope'] = properties.scope, + ['properties.metadata.createdOn'] = properties.metadata.createdOn, + ['properties.metadata.createdBy'] = properties.metadata.createdBy, + ['properties.metadata.assignedBy'] = properties.metadata.assignedBy, + ['properties.metadata.parameterScopes'] = properties.metadata.parameterScopes, + ['properties.metadata.updatedOn'] = properties.metadata.updatedOn, + ['properties.metadata.updatedBy'] = properties.metadata.updatedBy, + ['properties.metadata.category'] = properties.metadata.category, + ['properties.metadata.managedByResourceId'] = properties.metadata.managedByResourceId, + ['properties.metadata.securityCenter'] = properties.metadata.securityCenter, + ['properties.metadata.excludedOutOfTheBoxStandards'] = properties.metadata.excludedOutOfTheBoxStandards, + ['identity.userAssignedIdentities'] = identity.userAssignedIdentities, + ['identity.principalId'] = identity.principalId, + ['identity.tenantId'] = identity.tenantId, + ['identity.type'] = identity.type + | mv-expand ['properties.notScopes'] + " & ftk_DemoFilter(), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]) in - #"Expanded properties.notScopes" + Source annotation PBI_NavigationStepName = Navigation diff --git a/src/power-bi/storage/Shared.Dataset/definition/tables/PolicyDefinitions.tmdl b/src/power-bi/storage/Shared.Dataset/definition/tables/PolicyDefinitions.tmdl index 782b1b095..83bb7e74e 100644 --- a/src/power-bi/storage/Shared.Dataset/definition/tables/PolicyDefinitions.tmdl +++ b/src/power-bi/storage/Shared.Dataset/definition/tables/PolicyDefinitions.tmdl @@ -201,18 +201,37 @@ table PolicyDefinitions annotation SummarizationSetBy = Automatic + column properties + dataType: string + lineageTag: d875559a-f226-4140-9a14-5f75934bcae5 + summarizeBy: none + sourceColumn: properties + + annotation SummarizationSetBy = Automatic + partition PolicyDefinitions = m mode: import queryGroup: 'Resource Graph' source = let - Source = AzureResourceGraph.Query( - "policyResources + query = " + policyResources | where type =~'Microsoft.Authorization/PolicySetDefinitions' or type =~'Microsoft.Authorization/PolicyDefinitions' - " & ftk_DemoFilter(), "Tenant", null, null, [resultTruncated = false]), - #"Expanded properties" = Table.ExpandRecordColumn(Source, "properties", {"displayName", "policyType", "description", "metadata", "version", "parameters", "policyDefinitions", "policyDefinitionGroups", "versions", "oldVersions"}, {"properties.displayName", "properties.policyType", "properties.description", "properties.metadata", "properties.version", "properties.parameters", "properties.policyDefinitions", "properties.policyDefinitionGroups", "properties.versions", "properties.oldVersions"}) + | extend + ['properties.displayName'] = properties.displayName, + ['properties.policyType'] = properties.policyType, + ['properties.description'] = properties.description, + ['properties.metadata'] = properties.metadata, + ['properties.version'] = properties.version, + ['properties.parameters'] = properties.parameters, + ['properties.policyDefinitions'] = properties.policyDefinitions, + ['properties.policyDefinitionGroups'] = properties.policyDefinitionGroups, + ['properties.versions'] = properties.versions, + ['properties.oldVersions'] = properties.oldVersions + " & ftk_DemoFilter(), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]) in - #"Expanded properties" + Source annotation PBI_NavigationStepName = Navigation diff --git a/src/power-bi/storage/Shared.Dataset/definition/tables/PolicyStates.tmdl b/src/power-bi/storage/Shared.Dataset/definition/tables/PolicyStates.tmdl index a23c0d3b0..7f7ed92e8 100644 --- a/src/power-bi/storage/Shared.Dataset/definition/tables/PolicyStates.tmdl +++ b/src/power-bi/storage/Shared.Dataset/definition/tables/PolicyStates.tmdl @@ -328,19 +328,52 @@ table PolicyStates annotation SummarizationSetBy = Automatic + column properties + dataType: string + lineageTag: da64eecc-5703-4249-bd94-d5b831c98757 + summarizeBy: none + sourceColumn: properties + + annotation SummarizationSetBy = Automatic + partition PolicyStates = m mode: import queryGroup: 'Resource Graph' source = let - Source = AzureResourceGraph.Query( - "policyResources + query = " + policyResources | where type =~'Microsoft.PolicyInsights/PolicyStates' - " & ftk_DemoFilter(), "Tenant", null, null, [resultTruncated = false]), - #"Expanded properties" = Table.ExpandRecordColumn(Source, "properties", {"policyAssignmentParameters", "policyDefinitionAction", "policyAssignmentScope", "policyAssignmentName", "policyDefinitionName", "policyDefinitionReferenceId", "policyDefinitionId", "managementGroupIds", "policyAssignmentId", "policySetDefinitionName", "complianceState", "policySetDefinitionId", "subscriptionId", "resourceType", "stateWeight", "resourceGroup", "resourceId", "timestamp", "isDeleted", "resourceLocation", "policySetDefinitionCategory", "policyDefinitionGroupNames", "complianceReasonCode", "stateDetails"}, {"properties.policyAssignmentParameters", "properties.policyDefinitionAction", "properties.policyAssignmentScope", "properties.policyAssignmentName", "properties.policyDefinitionName", "properties.policyDefinitionReferenceId", "properties.policyDefinitionId", "properties.managementGroupIds", "properties.policyAssignmentId", "properties.policySetDefinitionName", "properties.complianceState", "properties.policySetDefinitionId", "properties.subscriptionId", "properties.resourceType", "properties.stateWeight", "properties.resourceGroup", "properties.resourceId", "properties.timestamp", "properties.isDeleted", "properties.resourceLocation", "properties.policySetDefinitionCategory", "properties.policyDefinitionGroupNames", "properties.complianceReasonCode", "properties.stateDetails"}), - #"Extracted Text After Delimiter" = Table.TransformColumns(#"Expanded properties", {{"properties.policyAssignmentScope", each Text.AfterDelimiter(_, "/", {0, RelativePosition.FromEnd}), type text}}) + | extend + ['properties.policyAssignmentParameters'] = properties.policyAssignmentParameters, + ['properties.policyDefinitionAction'] = properties.policyDefinitionAction, + ['properties.policyAssignmentScope'] = properties.policyAssignmentScope, + ['properties.policyAssignmentName'] = properties.policyAssignmentName, + ['properties.policyDefinitionName'] = properties.policyDefinitionName, + ['properties.policyDefinitionReferenceId'] = properties.policyDefinitionReferenceId, + ['properties.policyDefinitionId'] = properties.policyDefinitionId, + ['properties.managementGroupIds'] = properties.managementGroupIds, + ['properties.policyAssignmentId'] = properties.policyAssignmentId, + ['properties.policySetDefinitionName'] = properties.policySetDefinitionName, + ['properties.complianceState'] = properties.complianceState, + ['properties.policySetDefinitionId'] = properties.policySetDefinitionId, + ['properties.subscriptionId'] = properties.subscriptionId, + ['properties.resourceType'] = properties.resourceType, + ['properties.stateWeight'] = properties.stateWeight, + ['properties.resourceGroup'] = properties.resourceGroup, + ['properties.resourceId'] = properties.resourceId, + ['properties.timestamp'] = properties.timestamp, + ['properties.isDeleted'] = properties.isDeleted, + ['properties.resourceLocation'] = properties.resourceLocation, + ['properties.policySetDefinitionCategory'] = properties.policySetDefinitionCategory, + ['properties.policyDefinitionGroupNames'] = properties.policyDefinitionGroupNames, + ['properties.complianceReasonCode'] = properties.complianceReasonCode, + ['properties.stateDetails'] = properties.stateDetails + " & ftk_DemoFilter(), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]), + Types = Table.TransformColumns(Source, {{"properties.policyAssignmentScope", each Text.AfterDelimiter(_, "/", {0, RelativePosition.FromEnd}), type text}}, null, MissingField.Ignore) in - #"Extracted Text After Delimiter" + Types annotation PBI_NavigationStepName = Navigation diff --git a/src/power-bi/storage/Shared.Dataset/definition/tables/PublicIPAddresses.tmdl b/src/power-bi/storage/Shared.Dataset/definition/tables/PublicIPAddresses.tmdl index 975d7acc8..1556788c9 100644 --- a/src/power-bi/storage/Shared.Dataset/definition/tables/PublicIPAddresses.tmdl +++ b/src/power-bi/storage/Shared.Dataset/definition/tables/PublicIPAddresses.tmdl @@ -185,18 +185,35 @@ table PublicIPAddresses annotation SummarizationSetBy = Automatic + column properties + dataType: string + lineageTag: 046aa356-4713-4552-b6ca-6094909a58fd + summarizeBy: none + sourceColumn: properties + + annotation SummarizationSetBy = Automatic + partition PublicIPAddresses = m mode: import queryGroup: 'Resource Graph' source = let - Source = AzureResourceGraph.Query( - "Resources + query = " + Resources | where type =~ 'microsoft.network/publicipaddresses' - " & ftk_DemoFilter(), "Tenant", null, null, [resultTruncated = false]), - #"Expanded properties" = Table.ExpandRecordColumn(Source, "properties", {"provisioningState", "resourceGuid", "idleTimeoutInMinutes", "publicIPAllocationMethod", "publicIPAddressVersion", "ipAddress", "ipConfiguration", "ipTags"}, {"properties.provisioningState", "properties.resourceGuid", "properties.idleTimeoutInMinutes", "properties.publicIPAllocationMethod", "properties.publicIPAddressVersion", "properties.ipAddress", "properties.ipConfiguration", "properties.ipTags"}) + | extend + ['properties.provisioningState'] = properties.provisioningState, + ['properties.resourceGuid'] = properties.resourceGuid, + ['properties.idleTimeoutInMinutes'] = properties.idleTimeoutInMinutes, + ['properties.publicIPAllocationMethod'] = properties.publicIPAllocationMethod, + ['properties.publicIPAddressVersion'] = properties.publicIPAddressVersion, + ['properties.ipAddress'] = properties.ipAddress, + ['properties.ipConfiguration'] = properties.ipConfiguration, + ['properties.ipTags'] = properties.ipTags + " & ftk_DemoFilter(), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]) in - #"Expanded properties" + Source annotation PBI_NavigationStepName = Navigation diff --git a/src/power-bi/storage/Shared.Dataset/definition/tables/ReservationRecommendations.tmdl b/src/power-bi/storage/Shared.Dataset/definition/tables/ReservationRecommendations.tmdl index a2f3b7899..c5b8b2b1a 100644 --- a/src/power-bi/storage/Shared.Dataset/definition/tables/ReservationRecommendations.tmdl +++ b/src/power-bi/storage/Shared.Dataset/definition/tables/ReservationRecommendations.tmdl @@ -196,22 +196,38 @@ table ReservationRecommendations annotation PBI_FormatHint = {"isGeneralNumber":true} - column RecommendedQuantityNormlized - dataType: string - lineageTag: b5b5042f-35e1-449d-93ff-2303c281ab5a + column x_BreakEvenDate + dataType: dateTime + formatString: Mmm d, yyyy + lineageTag: 84494ff0-ef51-4636-8d9b-7bbc7f681633 summarizeBy: none - sourceColumn: RecommendedQuantityNormlized + sourceColumn: x_BreakEvenDate annotation SummarizationSetBy = Automatic - column TotaCostWithReservedInstances - dataType: string - lineageTag: bef2059d-6f01-4caa-aa95-42248227957c - summarizeBy: none - sourceColumn: TotaCostWithReservedInstances + annotation PBI_FormatHint = {"isCustom":true} + + column x_BreakEvenMonths + dataType: double + formatString: 0.0 mo + lineageTag: 4e18a526-f90e-4e01-ae84-44c2f3628b11 + summarizeBy: sum + sourceColumn: x_BreakEvenMonths + + annotation SummarizationSetBy = Automatic + + annotation PBI_FormatHint = {"isCustom":true} + + column x_CommitmentDiscountSavingsDailyRate + dataType: double + lineageTag: 5a1a0a4f-f2fa-4934-bb07-a3079b2bb314 + summarizeBy: sum + sourceColumn: x_CommitmentDiscountSavingsDailyRate annotation SummarizationSetBy = Automatic + annotation PBI_FormatHint = {"isGeneralNumber":true} + partition ReservationRecommendations = m mode: import queryGroup: Storage @@ -221,12 +237,28 @@ table ReservationRecommendations RawData = ftk_Storage("reservationrecommendations"), _addMissing = (tbl, col, typ) => if Table.HasColumns(tbl, {col}) then tbl else Table.AddColumn(tbl, col, each null, typ), - FixTypes = Table.TransformColumnTypes( + _getJsonCost = (tbl, col) => Table.RemoveColumns( + Table.AddColumn( + Table.RenameColumns(_addMissing(_addMissing(tbl, col, type any), col&"Json", type text), {{col, col&"Backup"}}), + col, + each try (Json.Document(Record.Field(_, col&"Json"))[value]) otherwise Record.Field(_, col&"Backup"), + type number + ), + {col&"Json", col&"Backup"}, + MissingField.Ignore + ), + Fixes = Table.TransformColumnTypes( Table.ReplaceValue(Table.ReplaceValue( // Create missing columns - _addMissing(_addMissing(RawData, + _addMissing(_addMissing(_addMissing(_addMissing( + _getJsonCost(_getJsonCost(_getJsonCost(RawData, + "CostWithNoReservedInstances"), + "NetSavings"), + "TotalCostWithReservedInstances"), "RecommendedQuantityNormalized", type number), "TotalCostWithReservedInstances", type number), + "SKU", type text), + "SkuName", type text), // Normalize frequency each [LookBackPeriod], each Text.Replace(Text.Replace([LookBackPeriod], "Last", ""), "Days", " Days"), Replacer.ReplaceValue, {"LookBackPeriod"}), // Fix inconsistent Microsoft term values @@ -244,20 +276,18 @@ table ReservationRecommendations } ), - Rename = Table.RenameColumns(FixTypes, { + Rename = Table.RenameColumns(Fixes, { {"CostWithNoReservedInstances", "x_EffectiveCostBefore"}, {"FirstUsageDate", "x_LookbackPeriodStart"}, {"InstanceFlexibilityGroup", "x_CommitmentDiscountNormalizedGroup"}, {"InstanceFlexibilityRatio", "x_CommitmentDiscountNormalizedRatio"}, {"Location", "RegionName"}, - {"LookBackPeriod", "x_LookbackPeriodLabel"}, {"MeterId", "x_SkuMeterId"}, {"NetSavings", "x_CommitmentDiscountSavings"}, {"NormalizedSize", "x_CommitmentDiscountNormalizedSize"}, {"RecommendedQuantity", "x_RecommendedQuantity"}, {"RecommendedQuantityNormalized", "x_RecommendedQuantityNormalized"}, {"ResourceType", "x_CommitmentDiscountResourceType"}, - {"SKU", "x_SkuSize"}, {"Scope", "tmp_CommitmentDiscountScope"}, {"SkuProperties", "x_SkuDetails"}, {"Term", "x_SkuTerm"}, @@ -265,7 +295,9 @@ table ReservationRecommendations }, MissingField.Ignore), Add = Table.RemoveColumns( - Table.AddColumn(Table.AddColumn(Table.AddColumn(Rename, + Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Rename, + "x_LookbackPeriodLabel", each [LookBackPeriod] & (if Text.Contains([LookBackPeriod], "Days") then "" else " Days")), + "x_SkuSize", each if [SKU] <> null then [SKU] else [SkuName]), "x_CommitmentDiscountKey", each [x_CommitmentDiscountNormalizedSize] & [x_SkuMeterId]), "x_CommitmentDiscountScope", each if [tmp_CommitmentDiscountScope] = "Single" then "Subscription" else [tmp_CommitmentDiscountScope]), "x_SkuTermLabel", @@ -274,7 +306,10 @@ table ReservationRecommendations else if [x_SkuTerm] = 12 then "1 year" else Text.From([x_SkuTerm] / 12) & " years" ), - {"tmp_CommitmentDiscountScope"} + "x_BreakEvenMonths", each [x_EffectiveCostAfter] * [x_SkuTerm] / [x_EffectiveCostBefore], type number), + "x_BreakEvenDate", each Date.AddDays(DateTime.Date(DateTime.LocalNow()), 1 + Number.Round([x_BreakEvenMonths] * 30.437, 0)), type datetimezone), + "x_CommitmentDiscountSavingsDailyRate", each [x_CommitmentDiscountSavings] / ([x_SkuTerm] - [x_BreakEvenMonths]) / (365/12), type number), + {"tmp_CommitmentDiscountScope", "LookBackPeriod", "SKU", "SkuName"} ), // Sort columns alphabetically diff --git a/src/power-bi/storage/Shared.Dataset/definition/tables/Resources.tmdl b/src/power-bi/storage/Shared.Dataset/definition/tables/Resources.tmdl index 15cb8b584..e8b8582f1 100644 --- a/src/power-bi/storage/Shared.Dataset/definition/tables/Resources.tmdl +++ b/src/power-bi/storage/Shared.Dataset/definition/tables/Resources.tmdl @@ -308,9 +308,7 @@ table Resources queryGroup: 'Resource Graph' source = let - Source = AzureResourceGraph.Query(" - - + query = " resources | extend id = tolower(id), @@ -333,9 +331,8 @@ table Resources ['accessTier'] = properties.accessTier, ['isHnsEnabled'] = properties.isHnsEnabled, ['isBlueShiftAccount'] = properties.isBlueShiftAccount - - - " & ftk_DemoFilter(), "Tenant", null, null, [resultTruncated = false]) + " & ftk_DemoFilter(), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]) in Source diff --git a/src/power-bi/storage/Shared.Dataset/definition/tables/SqlDatabases.tmdl b/src/power-bi/storage/Shared.Dataset/definition/tables/SqlDatabases.tmdl index 9617e42ee..cd2540fde 100644 --- a/src/power-bi/storage/Shared.Dataset/definition/tables/SqlDatabases.tmdl +++ b/src/power-bi/storage/Shared.Dataset/definition/tables/SqlDatabases.tmdl @@ -314,20 +314,61 @@ table SqlDatabases annotation SummarizationSetBy = Automatic + column sku + dataType: string + lineageTag: 52f51c91-4d10-4e18-bfc8-17b89180f1a3 + summarizeBy: none + sourceColumn: sku + + annotation SummarizationSetBy = Automatic + + column properties + dataType: string + lineageTag: 7b1ec500-24c1-4b63-b630-d6b6a81cd83e + summarizeBy: none + sourceColumn: properties + + annotation SummarizationSetBy = Automatic + partition SqlDatabases = m mode: import queryGroup: 'Resource Graph' source = let - Source = AzureResourceGraph.Query( - "resources + query = " + resources | where type == 'microsoft.sql/servers/databases' - " & ftk_DemoFilter(), "Tenant", null, null, [resultTruncated = false]), - #"Expanded sku" = Table.ExpandRecordColumn(Source, "sku", {"name", "tier", "capacity", "family"}, {"sku.name", "sku.tier", "sku.capacity", "sku.family"}), - #"Expanded properties" = Table.ExpandRecordColumn(#"Expanded sku", "properties", {"status", "requestedBackupStorageRedundancy", "currentBackupStorageRedundancy", "requestedServiceObjectiveName", "currentServiceObjectiveName", "maintenanceConfigurationId", "defaultSecondaryLocation", "isInfraEncryptionEnabled", "earliestRestoreDate", "zoneRedundant", "availabilityZone", "catalogCollation", "creationDate", "collation", "licenseType", "maxSizeBytes", "isLedgerOn", "databaseId", "currentSku", "readScale", "maxLogSizeBytes"}, {"properties.status", "properties.requestedBackupStorageRedundancy", "properties.currentBackupStorageRedundancy", "properties.requestedServiceObjectiveName", "properties.currentServiceObjectiveName", "properties.maintenanceConfigurationId", "properties.defaultSecondaryLocation", "properties.isInfraEncryptionEnabled", "properties.earliestRestoreDate", "properties.zoneRedundant", "properties.availabilityZone", "properties.catalogCollation", "properties.creationDate", "properties.collation", "properties.licenseType", "properties.maxSizeBytes", "properties.isLedgerOn", "properties.databaseId", "properties.currentSku", "properties.readScale", "properties.maxLogSizeBytes"}), - #"Changed Type" = Table.TransformColumnTypes(#"Expanded properties",{{"properties.creationDate", type datetimezone}}) + | extend + ['sku.name'] = sku.name, + ['sku.tier'] = sku.tier, + ['sku.capacity'] = sku.capacity, + ['sku.family'] = sku.family, + ['properties.status'] = properties.status, + ['properties.requestedBackupStorageRedundancy'] = properties.requestedBackupStorageRedundancy, + ['properties.currentBackupStorageRedundancy'] = properties.currentBackupStorageRedundancy, + ['properties.requestedServiceObjectiveName'] = properties.requestedServiceObjectiveName, + ['properties.currentServiceObjectiveName'] = properties.currentServiceObjectiveName, + ['properties.maintenanceConfigurationId'] = properties.maintenanceConfigurationId, + ['properties.defaultSecondaryLocation'] = properties.defaultSecondaryLocation, + ['properties.isInfraEncryptionEnabled'] = properties.isInfraEncryptionEnabled, + ['properties.earliestRestoreDate'] = properties.earliestRestoreDate, + ['properties.zoneRedundant'] = properties.zoneRedundant, + ['properties.availabilityZone'] = properties.availabilityZone, + ['properties.catalogCollation'] = properties.catalogCollation, + ['properties.creationDate'] = properties.creationDate, + ['properties.collation'] = properties.collation, + ['properties.licenseType'] = properties.licenseType, + ['properties.maxSizeBytes'] = properties.maxSizeBytes, + ['properties.isLedgerOn'] = properties.isLedgerOn, + ['properties.databaseId'] = properties.databaseId, + ['properties.currentSku'] = properties.currentSku, + ['properties.readScale'] = properties.readScale, + ['properties.maxLogSizeBytes'] = properties.maxLogSizeBytes + " & ftk_DemoFilter(), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]), + Types = Table.TransformColumnTypes(Source, {{"properties.creationDate", type datetimezone}}) in - #"Changed Type" + Types annotation PBI_NavigationStepName = Navigation diff --git a/src/power-bi/storage/Shared.Dataset/definition/tables/Subscriptions.tmdl b/src/power-bi/storage/Shared.Dataset/definition/tables/Subscriptions.tmdl index d94d0897e..e70afabf3 100644 --- a/src/power-bi/storage/Shared.Dataset/definition/tables/Subscriptions.tmdl +++ b/src/power-bi/storage/Shared.Dataset/definition/tables/Subscriptions.tmdl @@ -89,22 +89,6 @@ table Subscriptions annotation SummarizationSetBy = Automatic - column managementGroupAncestorsChain - dataType: string - lineageTag: e8cb5088-804a-4a4b-b124-bc1569c32912 - summarizeBy: none - sourceColumn: managementGroupAncestorsChain - - annotation SummarizationSetBy = Automatic - - column state - dataType: string - lineageTag: 004d35f6-d6a8-4c7f-ad7b-05c0dedf2cfe - summarizeBy: none - sourceColumn: state - - annotation SummarizationSetBy = Automatic - column tags dataType: string lineageTag: ff48b324-4a1c-488d-97d3-f9f59e0b7f3c @@ -137,18 +121,46 @@ table Subscriptions annotation SummarizationSetBy = Automatic + column properties + dataType: string + lineageTag: 6a2cd7e5-ed25-4b1c-b06f-29a947c9b8d6 + summarizeBy: none + sourceColumn: properties + + annotation SummarizationSetBy = Automatic + + column 'properties.managementGroupAncestorsChain' + dataType: string + lineageTag: fbb4c9cd-dcfc-4b61-8bc7-42b8dfd82e50 + summarizeBy: none + sourceColumn: properties.managementGroupAncestorsChain + + annotation SummarizationSetBy = Automatic + + column 'properties.state' + dataType: string + lineageTag: c37d69f0-5039-4418-94b9-44fcd6690201 + summarizeBy: none + sourceColumn: properties.state + + annotation SummarizationSetBy = Automatic + partition Subscriptions = m mode: import queryGroup: 'Resource Graph' - source = + source = ``` let - Source = AzureResourceGraph.Query( - "resourcecontainers + query = " + resourcecontainers | where type == 'microsoft.resources/subscriptions' - " & ftk_DemoFilter(), "Tenant", null, null, [resultTruncated = false]), - #"Expanded properties" = Table.ExpandRecordColumn(Source, "properties", {"managementGroupAncestorsChain", "state"}, {"managementGroupAncestorsChain", "state"}) + | extend + ['properties.managementGroupAncestorsChain'] = properties.managementGroupAncestorsChain, + ['properties.state'] = properties.state + " & ftk_DemoFilter(), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]) in - #"Expanded properties" + Source + ``` annotation PBI_NavigationStepName = Navigation diff --git a/src/power-bi/storage/Shared.Dataset/definition/tables/VirtualMachines.tmdl b/src/power-bi/storage/Shared.Dataset/definition/tables/VirtualMachines.tmdl index 221ca516d..8e7198c22 100644 --- a/src/power-bi/storage/Shared.Dataset/definition/tables/VirtualMachines.tmdl +++ b/src/power-bi/storage/Shared.Dataset/definition/tables/VirtualMachines.tmdl @@ -409,37 +409,215 @@ table VirtualMachines annotation SummarizationSetBy = Automatic + column properties + dataType: string + lineageTag: 135b6756-9f20-45a2-9ef6-6325dd00a1db + summarizeBy: none + sourceColumn: properties + + annotation SummarizationSetBy = Automatic + + column networkProfile + dataType: string + lineageTag: 1d17fabc-ac29-4729-bec9-7dd7d2563157 + summarizeBy: none + sourceColumn: networkProfile + + annotation SummarizationSetBy = Automatic + + column osProfile + dataType: string + lineageTag: 9f3d6f62-d5b4-4ba6-861e-21b60f25b808 + summarizeBy: none + sourceColumn: osProfile + + annotation SummarizationSetBy = Automatic + + column storageProfile + dataType: string + lineageTag: abf3f952-863f-4d23-af62-a2ea31887c3a + summarizeBy: none + sourceColumn: storageProfile + + annotation SummarizationSetBy = Automatic + + column hardwareProfile + dataType: string + lineageTag: 18998ba6-333c-4462-bd93-d54814e2361d + summarizeBy: none + sourceColumn: hardwareProfile + + annotation SummarizationSetBy = Automatic + + column diagnosticsProfile + dataType: string + lineageTag: 002811fd-e4da-412c-aec8-789c872382f5 + summarizeBy: none + sourceColumn: diagnosticsProfile + + annotation SummarizationSetBy = Automatic + + column extended + dataType: string + lineageTag: 695947e2-c1e6-440a-9379-d4ace0486833 + summarizeBy: none + sourceColumn: extended + + annotation SummarizationSetBy = Automatic + + column networkInterfaces + dataType: string + lineageTag: 60df4e28-c5a2-4be4-a666-5f6399869a0d + summarizeBy: none + sourceColumn: networkInterfaces + + annotation SummarizationSetBy = Automatic + + column 'networkInterfaces.properties' + dataType: string + lineageTag: b85e2971-0782-48ce-8641-f8e720fef81a + summarizeBy: none + sourceColumn: networkInterfaces.properties + + annotation SummarizationSetBy = Automatic + + column 'storageProfile.imageReference' + dataType: string + lineageTag: fce31b16-8d80-4267-86f7-458827788e2d + summarizeBy: none + sourceColumn: storageProfile.imageReference + + annotation SummarizationSetBy = Automatic + + column 'storageProfile.dataDisks' + dataType: string + lineageTag: bb2a82e8-695a-47a9-bcbb-611e134356ed + summarizeBy: none + sourceColumn: storageProfile.dataDisks + + annotation SummarizationSetBy = Automatic + + column 'storageProfile.osDisk' + dataType: string + lineageTag: 8fdcc755-3ffb-48b1-bf3f-e46db8f67774 + summarizeBy: none + sourceColumn: storageProfile.osDisk + + annotation SummarizationSetBy = Automatic + + column 'storageProfile.dataDisks.managedDisk' + dataType: string + lineageTag: 56634ea0-bbc4-4587-854c-ba252faa1ae8 + summarizeBy: none + sourceColumn: storageProfile.dataDisks.managedDisk + + annotation SummarizationSetBy = Automatic + + column 'storageProfile.osDisk.managedDisk' + dataType: string + lineageTag: a3f5aff1-c5e8-4957-bb33-84f23977d4a2 + summarizeBy: none + sourceColumn: storageProfile.osDisk.managedDisk + + annotation SummarizationSetBy = Automatic + + column 'diagnosticsProfile.bootDiagnostics' + dataType: string + lineageTag: 3ef88619-6923-44d5-a101-36274a025e49 + summarizeBy: none + sourceColumn: diagnosticsProfile.bootDiagnostics + + annotation SummarizationSetBy = Automatic + + column instanceView + dataType: string + lineageTag: af5bca80-4901-41c9-ab40-3fc346f0912f + summarizeBy: none + sourceColumn: instanceView + + annotation SummarizationSetBy = Automatic + + column powerState + dataType: string + lineageTag: 2debf081-3956-4289-a117-8b7af6888ac1 + summarizeBy: none + sourceColumn: powerState + + annotation SummarizationSetBy = Automatic + partition VirtualMachines = m mode: import queryGroup: 'Resource Graph' source = let - Source = AzureResourceGraph.Query( - "Resources + query = " + Resources | where type =~ 'Microsoft.Compute/virtualMachines' - " & ftk_DemoFilter(), "Tenant", null, null, [resultTruncated = false]), - #"Expanded properties" = Table.ExpandRecordColumn(Source, "properties", {"provisioningState", "timeCreated", "networkProfile", "osProfile", "storageProfile", "hardwareProfile", "vmId", "diagnosticsProfile", "extended", "licenseType"}, {"provisioningState", "timeCreated", "networkProfile", "osProfile", "storageProfile", "hardwareProfile", "vmId", "diagnosticsProfile", "extended", "licenseType"}), - #"Expanded osProfile" = Table.ExpandRecordColumn(#"Expanded properties", "osProfile", {"computerName", "requireGuestProvisionSignal", "allowExtensionOperations", "adminUsername", "secrets", "linuxConfiguration", "windowsConfiguration"}, {"osProfile.computerName", "osProfile.requireGuestProvisionSignal", "osProfile.allowExtensionOperations", "osProfile.adminUsername", "osProfile.secrets", "osProfile.linuxConfiguration", "osProfile.windowsConfiguration"}), - #"Expanded networkProfile" = Table.ExpandRecordColumn(#"Expanded osProfile", "networkProfile", {"networkInterfaces"}, {"networkInterfaces"}), - #"Expanded networkInterfaces" = Table.ExpandListColumn(#"Expanded networkProfile", "networkInterfaces"), - #"Expanded networkInterfaces 1" = Table.ExpandRecordColumn(#"Expanded networkInterfaces", "networkInterfaces", {"properties", "id"}, {"networkInterfaces.properties", "networkInterfaces.id"}), - #"Expanded networkInterfaces.properties" = Table.ExpandRecordColumn(#"Expanded networkInterfaces 1", "networkInterfaces.properties", {"deleteOption"}, {"networkInterfaces.properties.deleteOption"}), - #"Expanded storageProfile" = Table.ExpandRecordColumn(#"Expanded networkInterfaces.properties", "storageProfile", {"imageReference", "dataDisks", "osDisk"}, {"storageProfile.imageReference", "storageProfile.dataDisks", "storageProfile.osDisk"}), - #"Expanded storageProfile.imageReference" = Table.ExpandRecordColumn(#"Expanded storageProfile", "storageProfile.imageReference", {"publisher", "sku", "version", "exactVersion", "offer"}, {"storageProfile.imageReference.publisher", "storageProfile.imageReference.sku", "storageProfile.imageReference.version", "storageProfile.imageReference.exactVersion", "storageProfile.imageReference.offer"}), - #"Expanded storageProfile.dataDisks" = Table.ExpandListColumn(#"Expanded storageProfile.imageReference", "storageProfile.dataDisks"), - #"Expanded storageProfile.dataDisks 1" = Table.ExpandRecordColumn(#"Expanded storageProfile.dataDisks", "storageProfile.dataDisks", {"name", "createOption", "deleteOption", "managedDisk", "caching", "toBeDetached", "writeAcceleratorEnabled", "lun"}, {"storageProfile.dataDisks.name", "storageProfile.dataDisks.createOption", "storageProfile.dataDisks.deleteOption", "storageProfile.dataDisks.managedDisk", "storageProfile.dataDisks.caching", "storageProfile.dataDisks.toBeDetached", "storageProfile.dataDisks.writeAcceleratorEnabled", "storageProfile.dataDisks.lun"}), - #"Expanded storageProfile.dataDisks.managedDisk" = Table.ExpandRecordColumn(#"Expanded storageProfile.dataDisks 1", "storageProfile.dataDisks.managedDisk", {"id"}, {"storageProfile.dataDisks.managedDisk.id"}), - #"Expanded storageProfile.osDisk" = Table.ExpandRecordColumn(#"Expanded storageProfile.dataDisks.managedDisk", "storageProfile.osDisk", {"name", "createOption", "osType", "deleteOption", "managedDisk", "caching"}, {"storageProfile.osDisk.name", "storageProfile.osDisk.createOption", "storageProfile.osDisk.osType", "storageProfile.osDisk.deleteOption", "storageProfile.osDisk.managedDisk", "storageProfile.osDisk.caching"}), - #"Expanded storageProfile.osDisk.managedDisk" = Table.ExpandRecordColumn(#"Expanded storageProfile.osDisk", "storageProfile.osDisk.managedDisk", {"id"}, {"storageProfile.osDisk.managedDisk.id"}), - #"Expanded hardwareProfile" = Table.ExpandRecordColumn(#"Expanded storageProfile.osDisk.managedDisk", "hardwareProfile", {"vmSize"}, {"hardwareProfile.vmSize"}), - #"Expanded diagnosticsProfile" = Table.ExpandRecordColumn(#"Expanded hardwareProfile", "diagnosticsProfile", {"bootDiagnostics"}, {"diagnosticsProfile.bootDiagnostics"}), - #"Expanded diagnosticsProfile.bootDiagnostics" = Table.ExpandRecordColumn(#"Expanded diagnosticsProfile", "diagnosticsProfile.bootDiagnostics", {"enabled", "storageUri"}, {"diagnosticsProfile.bootDiagnostics.enabled", "diagnosticsProfile.bootDiagnostics.storageUri"}), - #"Expanded extended" = Table.ExpandRecordColumn(#"Expanded diagnosticsProfile.bootDiagnostics", "extended", {"instanceView"}, {"instanceView"}), - #"Expanded instanceView" = Table.ExpandRecordColumn(#"Expanded extended", "instanceView", {"powerState"}, {"powerState"}), - #"Expanded powerState" = Table.ExpandRecordColumn(#"Expanded instanceView", "powerState", {"displayStatus"}, {"powerState.displayStatus"}), - #"Expanded zones" = Table.ExpandListColumn(#"Expanded powerState", "zones") + | extend + provisioningState = properties.provisioningState, + timeCreated = properties.timeCreated, + networkProfile = properties.networkProfile, + osProfile = properties.osProfile, + storageProfile = properties.storageProfile, + hardwareProfile = properties.hardwareProfile, + vmId = properties.vmId, + diagnosticsProfile = properties.diagnosticsProfile, + extended = properties.extended, + licenseType = properties.licenseType + | extend + ['osProfile.computerName'] = osProfile.computerName, + ['osProfile.requireGuestProvisionSignal'] = osProfile.requireGuestProvisionSignal, + ['osProfile.allowExtensionOperations'] = osProfile.allowExtensionOperations, + ['osProfile.adminUsername'] = osProfile.adminUsername, + ['osProfile.secrets'] = osProfile.secrets, + ['osProfile.linuxConfiguration'] = osProfile.linuxConfiguration, + ['osProfile.windowsConfiguration'] = osProfile.windowsConfiguration, + networkInterfaces = networkProfile.networkInterfaces + | mv-expand ['networkInterfaces'] + | extend + ['networkInterfaces.properties'] = networkInterfaces.properties, + ['networkInterfaces.id'] = networkInterfaces.id, + ['networkInterfaces.properties.deleteOption'] = networkInterfaces.properties.deleteOption, + ['storageProfile.imageReference'] = storageProfile.imageReference, + ['storageProfile.dataDisks'] = storageProfile.dataDisks, + ['storageProfile.osDisk'] = storageProfile.osDisk, + ['storageProfile.imageReference.publisher'] = storageProfile.imageReference.publisher, + ['storageProfile.imageReference.sku'] = storageProfile.imageReference.sku, + ['storageProfile.imageReference.version'] = storageProfile.imageReference.version, + ['storageProfile.imageReference.exactVersion'] = storageProfile.imageReference.exactVersion, + ['storageProfile.imageReference.offer'] = storageProfile.imageReference.offer + | mv-expand ['storageProfile.dataDisks'] + | extend + ['storageProfile.dataDisks.name'] = storageProfile.dataDisks.name, + ['storageProfile.dataDisks.createOption'] = storageProfile.dataDisks.createOption, + ['storageProfile.dataDisks.deleteOption'] = storageProfile.dataDisks.deleteOption, + ['storageProfile.dataDisks.managedDisk'] = storageProfile.dataDisks.managedDisk, + ['storageProfile.dataDisks.caching'] = storageProfile.dataDisks.caching, + ['storageProfile.dataDisks.toBeDetached'] = storageProfile.dataDisks.toBeDetached, + ['storageProfile.dataDisks.writeAcceleratorEnabled'] = storageProfile.dataDisks.writeAcceleratorEnabled, + ['storageProfile.dataDisks.lun'] = storageProfile.dataDisks.lun, + ['storageProfile.dataDisks.managedDisk.id'] = storageProfile.dataDisks.managedDisk.id, + ['storageProfile.osDisk.name'] = storageProfile.osDisk.name, + ['storageProfile.osDisk.createOption'] = storageProfile.osDisk.createOption, + ['storageProfile.osDisk.osType'] = storageProfile.osDisk.osType, + ['storageProfile.osDisk.deleteOption'] = storageProfile.osDisk.deleteOption, + ['storageProfile.osDisk.managedDisk'] = storageProfile.osDisk.managedDisk, + ['storageProfile.osDisk.caching'] = storageProfile.osDisk.caching, + ['storageProfile.osDisk.managedDisk.id'] = storageProfile.osDisk.managedDisk.id, + ['hardwareProfile.vmSize'] = hardwareProfile.vmSize, + ['diagnosticsProfile.bootDiagnostics'] = diagnosticsProfile.bootDiagnostics, + ['diagnosticsProfile.bootDiagnostics.enabled'] = diagnosticsProfile.bootDiagnostics.enabled, + ['diagnosticsProfile.bootDiagnostics.storageUri'] = diagnosticsProfile.bootDiagnostics.storageUri + | extend + instanceView = extended.instanceView, + powerState = extended.instanceView.powerState + | extend + ['powerState.displayStatus'] = powerState.displayStatus + | mv-expand ['zones'] + " & ftk_DemoFilter(), + Source = AzureResourceGraph.Query(query, "Tenant", null, null, [resultTruncated = false]) in - #"Expanded zones" + Source annotation PBI_NavigationStepName = Navigation diff --git a/src/power-bi/storage/Shared.Dataset/diagramLayout.json b/src/power-bi/storage/Shared.Dataset/diagramLayout.json index b1c9f55f2..954ea89e6 100644 --- a/src/power-bi/storage/Shared.Dataset/diagramLayout.json +++ b/src/power-bi/storage/Shared.Dataset/diagramLayout.json @@ -4,8 +4,8 @@ { "ordinal": 0, "scrollPosition": { - "x": 1977.4019546073034, - "y": 0 + "x": 10, + "y": 796.80222898848717 }, "nodes": [ { @@ -19,7 +19,7 @@ "height": 300, "width": 234 }, - "zIndex": 0 + "zIndex": 1 }, { "location": { @@ -32,7 +32,7 @@ "height": 300, "width": 234 }, - "zIndex": 0 + "zIndex": 2 }, { "location": { @@ -45,7 +45,7 @@ "height": 300, "width": 234 }, - "zIndex": 0 + "zIndex": 3 }, { "location": { @@ -58,20 +58,19 @@ "height": 300, "width": 234 }, - "zIndex": 0 + "zIndex": 4 }, { "location": { - "x": 839.7422288098262, - "y": 1148.7397681973748 + "x": 598.08692115945291, + "y": 796.80222898848717 }, "nodeIndex": "Disks", - "nodeLineageTag": "ca0025b1-6be2-4a29-af32-30ef5f20fe5f", "size": { "height": 300, "width": 234 }, - "zIndex": 0 + "zIndex": 29 }, { "location": { @@ -84,7 +83,7 @@ "height": 104, "width": 234 }, - "zIndex": 0 + "zIndex": 5 }, { "location": { @@ -97,7 +96,7 @@ "height": 200, "width": 234 }, - "zIndex": 0 + "zIndex": 6 }, { "location": { @@ -110,7 +109,7 @@ "height": 300, "width": 234 }, - "zIndex": 0 + "zIndex": 7 }, { "location": { @@ -123,7 +122,7 @@ "height": 300, "width": 234 }, - "zIndex": 0 + "zIndex": 8 }, { "location": { @@ -136,7 +135,7 @@ "height": 300, "width": 234 }, - "zIndex": 0 + "zIndex": 9 }, { "location": { @@ -149,7 +148,7 @@ "height": 300, "width": 234 }, - "zIndex": 0 + "zIndex": 10 }, { "location": { @@ -162,7 +161,7 @@ "height": 300, "width": 234 }, - "zIndex": 0 + "zIndex": 11 }, { "location": { @@ -175,7 +174,7 @@ "height": 300, "width": 234 }, - "zIndex": 0 + "zIndex": 12 }, { "location": { @@ -188,7 +187,7 @@ "height": 300, "width": 234 }, - "zIndex": 0 + "zIndex": 13 }, { "location": { @@ -201,7 +200,7 @@ "height": 300, "width": 234 }, - "zIndex": 0 + "zIndex": 14 }, { "location": { @@ -214,7 +213,7 @@ "height": 152, "width": 234 }, - "zIndex": 0 + "zIndex": 15 }, { "location": { @@ -227,7 +226,7 @@ "height": 300, "width": 234 }, - "zIndex": 0 + "zIndex": 16 }, { "location": { @@ -240,7 +239,7 @@ "height": 152, "width": 234 }, - "zIndex": 0 + "zIndex": 17 }, { "location": { @@ -253,7 +252,7 @@ "height": 300, "width": 234 }, - "zIndex": 0 + "zIndex": 18 }, { "location": { @@ -266,7 +265,7 @@ "height": 300, "width": 234 }, - "zIndex": 0 + "zIndex": 19 }, { "location": { @@ -279,7 +278,7 @@ "height": 300, "width": 234 }, - "zIndex": 0 + "zIndex": 20 }, { "location": { @@ -292,7 +291,7 @@ "height": 300, "width": 234 }, - "zIndex": 0 + "zIndex": 21 }, { "location": { @@ -305,7 +304,7 @@ "height": 296, "width": 234 }, - "zIndex": 0 + "zIndex": 22 }, { "location": { @@ -318,7 +317,7 @@ "height": 300, "width": 234 }, - "zIndex": 0 + "zIndex": 23 }, { "location": { @@ -331,7 +330,7 @@ "height": 300, "width": 234 }, - "zIndex": 0 + "zIndex": 24 }, { "location": { @@ -344,7 +343,7 @@ "height": 300, "width": 234 }, - "zIndex": 0 + "zIndex": 25 }, { "location": { @@ -357,7 +356,7 @@ "height": 300, "width": 234 }, - "zIndex": 0 + "zIndex": 26 }, { "location": { @@ -370,11 +369,11 @@ "height": 300, "width": 234 }, - "zIndex": 0 + "zIndex": 27 } ], "name": "All tables", - "zoomValue": 40.052554724883187, + "zoomValue": 70, "pinKeyFieldsToTop": false, "showExtraHeaderInfo": false, "hideKeyFieldsWhenCollapsed": false, diff --git a/src/power-bi/storage/WorkloadOptimization.Report/report.json b/src/power-bi/storage/WorkloadOptimization.Report/report.json index 54d7d3488..f40f22dff 100644 --- a/src/power-bi/storage/WorkloadOptimization.Report/report.json +++ b/src/power-bi/storage/WorkloadOptimization.Report/report.json @@ -343,7 +343,7 @@ "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.WorkloadOptimization/featureName/Storage.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.WorkloadOptimization/featureName/Storage.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.0, "width": 192.0, @@ -560,7 +560,7 @@ "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.WorkloadOptimization/featureName/Storage.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.WorkloadOptimization/featureName/Storage.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.0, "width": 192.0, @@ -1017,7 +1017,7 @@ "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.WorkloadOptimization/featureName/Storage.GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.WorkloadOptimization/featureName/Storage.GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", "height": 32.0, "width": 112.0, @@ -1070,7 +1070,7 @@ "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-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\"}}}}}]}}}", + "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\":\"$$ftkver$$ · $$build-date$$ · 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.0, "width": 240.0, @@ -1240,7 +1240,7 @@ "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\"}", + "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/FTK$$ftkver$$'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'ef79b7aa916210d0d0ad'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", "height": 32.0, "width": 88.0, @@ -1302,7 +1302,7 @@ "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\"}", + "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/FTK$$ftkver$$'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Clear filters'\"}}}}}]}},\"parentGroupName\":\"6a7203d933cbe61a54ab\",\"howCreated\":\"InsertVisualButton\"}", "filters": "[]", "height": 32.0, "width": 88.0, @@ -1617,7 +1617,7 @@ "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.WorkloadOptimization/featureName/Storage.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\"}", + "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/FTK$$ftkver$$/bladeName/PowerBI.WorkloadOptimization/featureName/Storage.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.0, "width": 192.0, diff --git a/src/powershell/Private/Get-OpenDataPricingUnit.ps1 b/src/powershell/Private/Get-OpenDataPricingUnit.ps1 index 21f269f5a..f87ed119e 100644 --- a/src/powershell/Private/Get-OpenDataPricingUnit.ps1 +++ b/src/powershell/Private/Get-OpenDataPricingUnit.ps1 @@ -319,6 +319,7 @@ function Get-OpenDataPricingUnit ,[PSCustomObject]@{ UnitOfMeasure = '150 Hours'; AccountTypes = 'EA'; PricingBlockSize = 150; DistinctUnits = 'Hours'; } ,[PSCustomObject]@{ UnitOfMeasure = '1B'; AccountTypes = 'MCA'; PricingBlockSize = 1000000000; DistinctUnits = 'Units'; } ,[PSCustomObject]@{ UnitOfMeasure = '1K'; AccountTypes = 'MCA, EA'; PricingBlockSize = 1000; DistinctUnits = 'Units'; } + ,[PSCustomObject]@{ UnitOfMeasure = '1K/Day'; AccountTypes = 'MCA'; PricingBlockSize = 1000; DistinctUnits = 'Units/Day'; } ,[PSCustomObject]@{ UnitOfMeasure = '1K/Hour'; AccountTypes = 'MCA'; PricingBlockSize = 1000; DistinctUnits = 'Units/Hour'; } ,[PSCustomObject]@{ UnitOfMeasure = '1K/Month'; AccountTypes = 'MCA'; PricingBlockSize = 1000; DistinctUnits = 'Units/Month'; } ,[PSCustomObject]@{ UnitOfMeasure = '1M'; AccountTypes = 'MCA, EA'; PricingBlockSize = 1000000; DistinctUnits = 'Units'; } diff --git a/src/powershell/Private/Get-OpenDataRegion.ps1 b/src/powershell/Private/Get-OpenDataRegion.ps1 index 0dc8d59a2..85945c1ab 100644 --- a/src/powershell/Private/Get-OpenDataRegion.ps1 +++ b/src/powershell/Private/Get-OpenDataRegion.ps1 @@ -83,7 +83,7 @@ function Get-OpenDataRegion ,[PSCustomObject]@{ OriginalValue = 'cc'; RegionId = 'canadacentral'; RegionName = 'Canada Central'; } ,[PSCustomObject]@{ OriginalValue = 'central india'; RegionId = 'centralindia'; RegionName = 'Central India'; } ,[PSCustomObject]@{ OriginalValue = 'central us'; RegionId = 'centralus'; RegionName = 'Central US'; } - ,[PSCustomObject]@{ OriginalValue = 'centralcanada'; RegionId = 'canadacentral'; RegionName = 'Central Canada'; } + ,[PSCustomObject]@{ OriginalValue = 'centralcanada'; RegionId = 'canadacentral'; RegionName = 'Canada Central'; } ,[PSCustomObject]@{ OriginalValue = 'centralindia'; RegionId = 'centralindia'; RegionName = 'Central India'; } ,[PSCustomObject]@{ OriginalValue = 'centralus'; RegionId = 'centralus'; RegionName = 'Central US'; } ,[PSCustomObject]@{ OriginalValue = 'centraluseuap'; RegionId = 'centraluseuap'; RegionName = 'Central US EUAP'; } @@ -360,6 +360,7 @@ function Get-OpenDataRegion ,[PSCustomObject]@{ OriginalValue = 'southafricaw'; RegionId = 'southafricawest'; RegionName = 'South Africa West'; } ,[PSCustomObject]@{ OriginalValue = 'southafricawest'; RegionId = 'southafricawest'; RegionName = 'South Africa West'; } ,[PSCustomObject]@{ OriginalValue = 'southcentralus'; RegionId = 'southcentralus'; RegionName = 'South Central US'; } + ,[PSCustomObject]@{ OriginalValue = 'southcentralus2'; RegionId = 'southcentralus2'; RegionName = 'South Central US 2'; } ,[PSCustomObject]@{ OriginalValue = 'southcentralusstg'; RegionId = 'southcentralusstg'; RegionName = 'South Central US STG'; } ,[PSCustomObject]@{ OriginalValue = 'southeast asia'; RegionId = 'southeastasia'; RegionName = 'Southeast Asia'; } ,[PSCustomObject]@{ OriginalValue = 'southeast_asia'; RegionId = 'southeastasia'; RegionName = 'Southeast Asia'; } diff --git a/src/powershell/Private/Get-OpenDataResourceType.ps1 b/src/powershell/Private/Get-OpenDataResourceType.ps1 index 85b6d2880..c15238aee 100644 --- a/src/powershell/Private/Get-OpenDataResourceType.ps1 +++ b/src/powershell/Private/Get-OpenDataResourceType.ps1 @@ -9,7 +9,7 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'astronomer.astro/organizations'; SingularDisplayName = 'Astro Organization'; PluralDisplayName = 'Apache Airflow? on Astro - An Azure Native ISV Service'; LowerSingularDisplayName = 'Astro Organization'; LowerPluralDisplayName = 'Astro Organization'; IsPreview = 'false'; Description = 'This SaaS offering allows you to manage your Astro resource as an integrated native service on Azure. You can easily create an Astro organization, login securely via OpenID Single-Sign On, and run and manage as many Airflow deployments as you need. The usage billing will be streamlined alongside other Azure usages via Azure marketplace.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/astronomer.astro/organizations.svg'; Links = '[{"title":"Learn more","uri":"https://docs.astronomer.io/astro"}]'; } ,[PSCustomObject]@{ ResourceType = 'citrix.services/xenappessentials'; SingularDisplayName = 'Citrix Virtual Apps Essentials'; PluralDisplayName = 'Citrix Virtual Apps Essentials'; LowerSingularDisplayName = 'citrix virtual apps essentials'; LowerPluralDisplayName = 'citrix virtual apps essentials'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/citrix.services/xenappessentials.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'citrix.services/xendesktopessentials'; SingularDisplayName = 'Citrix Virtual Desktops Essentials'; PluralDisplayName = 'Citrix Virtual Desktops Essentials'; LowerSingularDisplayName = 'citrix virtual desktops essentials'; LowerPluralDisplayName = 'citrix virtual desktops essentials'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/citrix.services/xendesktopessentials.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'commvault.contentstore/cloudaccounts'; SingularDisplayName = 'Commvault Cloud Account'; PluralDisplayName = 'Commvault Cloud Accounts'; LowerSingularDisplayName = 'commvault cloud account'; LowerPluralDisplayName = 'commvault cloud accounts'; IsPreview = 'false'; Description = 'A Commvault Cloud Account Resource'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/commvault.contentstore/cloudaccounts.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'commvault.contentstore/cloudaccounts'; SingularDisplayName = 'Commvault Cloud Account'; PluralDisplayName = 'Commvault Cloud Accounts'; LowerSingularDisplayName = 'commvault cloud account'; LowerPluralDisplayName = 'commvault cloud accounts'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/commvault.contentstore/cloudaccounts.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'commvault.contentstore/cloudaccounts/plans'; SingularDisplayName = 'Commvault.ContentStore cloud accounts plan'; PluralDisplayName = 'Commvault.ContentStore cloud accounts plans'; LowerSingularDisplayName = 'commvault.contentstore cloud accounts plan'; LowerPluralDisplayName = 'commvault.contentstore cloud accounts plans'; IsPreview = 'false'; Description = 'A Commvault Plan Resource'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/commvault.contentstore/cloudaccounts/plans.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'commvault.contentstore/cloudaccounts/protectiongroups'; SingularDisplayName = 'Commvault.ContentStore cloud accounts protection group'; PluralDisplayName = 'Commvault.ContentStore cloud accounts protection groups'; LowerSingularDisplayName = 'commvault.contentstore cloud accounts protection group'; LowerPluralDisplayName = 'commvault.contentstore cloud accounts protection groups'; IsPreview = 'false'; Description = 'A Commvault Plan Resource'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/commvault.contentstore/cloudaccounts/protectiongroups.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'commvault.contentstore/cloudaccounts/protectiongroups/protecteditems'; SingularDisplayName = 'Commvault.ContentStore cloud accounts protection groups protected item'; PluralDisplayName = 'Commvault.ContentStore cloud accounts protection groups protected items'; LowerSingularDisplayName = 'commvault.contentstore cloud accounts protection groups protected item'; LowerPluralDisplayName = 'commvault.contentstore cloud accounts protection groups protected items'; IsPreview = 'false'; Description = 'Concrete proxy resource types can be created by aliasing this type using a specific property type.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/commvault.contentstore/cloudaccounts/protectiongroups/protecteditems.svg'; Links = ''; } @@ -18,20 +18,22 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'dynatrace.observability/monitors'; SingularDisplayName = 'Dynatrace'; PluralDisplayName = 'Azure Native Dynatrace Service'; LowerSingularDisplayName = 'Dynatrace resource'; LowerPluralDisplayName = 'Dynatrace resources'; IsPreview = 'false'; Description = 'Azure Native ISV Services enable you to easily provision, manage, and tightly integrate independent software vendor (ISV) software and services on Azure. This service is developed and managed by Microsoft and Dynatrace. Azure Native Dynatrace Service is a native integration of Dynatrace with Azure. Dynatrace is a unified observability and security platform designed to help enterprises monitor and optimize dynamic hybrid cloud environments at scale. It leverages causal AI and automation to provide real-time business analytics which enables teams to deliver flawless and secure digital interactions, simplify complexity and accelerate innovation.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/dynatrace.observability/monitors.svg'; Links = '[{"title":"Learn more","uri":"https://aka.ms/partners/Dynatrace/CreateNew"}]'; } ,[PSCustomObject]@{ ResourceType = 'github.network/networksettings'; SingularDisplayName = 'GitHub.Network network setting'; PluralDisplayName = 'GitHub.Network network settings'; LowerSingularDisplayName = 'github.network network setting'; LowerPluralDisplayName = 'github.network network settings'; IsPreview = 'false'; Description = 'GitHub.Network networkSettings resource. Represents the network settings needed for vnet injection.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/github.network/networksettings.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'informatica.datamanagement/organizations'; SingularDisplayName = 'Informatica Organization'; PluralDisplayName = 'Informatica Intelligent Data Management Cloud - An Azure Native ISV Service'; LowerSingularDisplayName = 'Informatica organization'; LowerPluralDisplayName = 'Informatica Intelligent Data Management Cloud - An Azure Native ISV Service'; IsPreview = 'false'; Description = 'Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/informatica.datamanagement/organizations.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'lambdatest.hyperexecute/organizations'; SingularDisplayName = 'Azure Native LambdaTest Cloud Service'; PluralDisplayName = 'Azure Native LambdaTest Cloud Service'; LowerSingularDisplayName = 'Azure Native LambdaTest Cloud Service'; LowerPluralDisplayName = 'Azure Native LambdaTest Cloud Service'; IsPreview = 'false'; Description = 'Concrete tracked resource types can be created by aliasing this type using a specific property type.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/lambdatest.hyperexecute/organizations.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.aad/domainservices'; SingularDisplayName = 'Microsoft Entra Domain Services'; PluralDisplayName = 'Microsoft Entra Domain Services'; LowerSingularDisplayName = 'Microsoft Entra Domain Services'; LowerPluralDisplayName = 'Microsoft Entra Domain Services'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.aad/domainservices.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'lambdatest.hyperexecute/organizations'; SingularDisplayName = 'Azure Native LambdaTest Cloud Service'; PluralDisplayName = 'Azure Native LambdaTest Cloud Service'; LowerSingularDisplayName = 'Azure Native LambdaTest Cloud Service'; LowerPluralDisplayName = 'Azure Native LambdaTest Cloud Service'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/lambdatest.hyperexecute/organizations.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.aad/domainservices'; SingularDisplayName = 'Microsoft Entra Domain Services'; PluralDisplayName = 'Microsoft Entra Domain Services'; LowerSingularDisplayName = 'Microsoft Entra Domain Services'; LowerPluralDisplayName = 'Microsoft Entra Domain Services'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.aad/domainservices.svg'; Links = '[{"title":"Learn more","uri":"https://learn.microsoft.com/entra/identity/domain-services/overview"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.aadiam/diagnosticsettings'; SingularDisplayName = 'Microsoft.aadiam diagnostic setting'; PluralDisplayName = 'Microsoft.aadiam diagnostic settings'; LowerSingularDisplayName = 'microsoft.aadiam diagnostic setting'; LowerPluralDisplayName = 'microsoft.aadiam diagnostic settings'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.aadiam/diagnosticsettings.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.aadiam/privatelinkforazuread'; SingularDisplayName = 'Private Link for Microsoft Entra ID'; PluralDisplayName = 'Private Link for Microsoft Entra ID'; LowerSingularDisplayName = 'private link for Microsoft Entra ID'; LowerPluralDisplayName = 'private link for Microsoft Entra ID'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.aadiam/privatelinkforazuread.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.advisor/advisorscore'; SingularDisplayName = 'Microsoft.Advisor advisor score'; PluralDisplayName = 'Microsoft.Advisor advisor score'; LowerSingularDisplayName = 'microsoft.advisor advisor score'; LowerPluralDisplayName = 'microsoft.advisor advisor score'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.advisor/advisorscore.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.advisor/assessments'; SingularDisplayName = 'Microsoft.Advisor assessment'; PluralDisplayName = 'Microsoft.Advisor assessments'; LowerSingularDisplayName = 'microsoft.advisor assessment'; LowerPluralDisplayName = 'microsoft.advisor assessments'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.advisor/assessments.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.advisor/configurations'; SingularDisplayName = 'Microsoft.Advisor configuration'; PluralDisplayName = 'Microsoft.Advisor configurations'; LowerSingularDisplayName = 'microsoft.advisor configuration'; LowerPluralDisplayName = 'microsoft.advisor configurations'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.advisor/configurations.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.advisor/generaterecommendations'; SingularDisplayName = 'Microsoft.Advisor generate recommendation'; PluralDisplayName = 'Microsoft.Advisor generate recommendations'; LowerSingularDisplayName = 'microsoft.advisor generate recommendation'; LowerPluralDisplayName = 'microsoft.advisor generate recommendations'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.advisor/generaterecommendations.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.advisor/metadata'; SingularDisplayName = 'Microsoft.Advisor metadata'; PluralDisplayName = 'Microsoft.Advisor metadata'; LowerSingularDisplayName = 'microsoft.advisor metadata'; LowerPluralDisplayName = 'microsoft.advisor metadata'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.advisor/metadata.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.advisor/recommendations'; SingularDisplayName = 'Microsoft.Advisor recommendation'; PluralDisplayName = 'Microsoft.Advisor recommendations'; LowerSingularDisplayName = 'microsoft.advisor recommendation'; LowerPluralDisplayName = 'microsoft.advisor recommendations'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.advisor/recommendations.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.advisor/recommendations/suppressions'; SingularDisplayName = 'Microsoft.Advisor recommendations suppression'; PluralDisplayName = 'Microsoft.Advisor recommendations suppressions'; LowerSingularDisplayName = 'microsoft.advisor recommendations suppression'; LowerPluralDisplayName = 'microsoft.advisor recommendations suppressions'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.advisor/recommendations/suppressions.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.advisor/resiliencyreviews'; SingularDisplayName = 'Microsoft.Advisor resiliency review'; PluralDisplayName = 'Microsoft.Advisor resiliency reviews'; LowerSingularDisplayName = 'microsoft.advisor resiliency review'; LowerPluralDisplayName = 'microsoft.advisor resiliency reviews'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.advisor/resiliencyreviews.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.agfoodplatform/farmbeats'; SingularDisplayName = 'Azure Data Manager for Agriculture'; PluralDisplayName = 'Azure Data Manager for Agriculture'; LowerSingularDisplayName = 'Azure Data Manager for Agriculture'; LowerPluralDisplayName = 'Azure Data Manager for Agriculture'; IsPreview = 'false'; Description = 'Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.agfoodplatform/farmbeats.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.agfoodplatform/farmbeatsextensiondefinitions'; SingularDisplayName = 'Microsoft.AgFoodPlatform farm beats extension definition'; PluralDisplayName = 'Microsoft.AgFoodPlatform farm beats extension definitions'; LowerSingularDisplayName = 'microsoft.agfoodplatform farm beats extension definition'; LowerPluralDisplayName = 'microsoft.agfoodplatform farm beats extension definitions'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.agfoodplatform/farmbeatsextensiondefinitions.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.agfoodplatform/farmbeatssolutiondefinitions'; SingularDisplayName = 'Microsoft.AgFoodPlatform farm beats solution definition'; PluralDisplayName = 'Microsoft.AgFoodPlatform farm beats solution definitions'; LowerSingularDisplayName = 'microsoft.agfoodplatform farm beats solution definition'; LowerPluralDisplayName = 'microsoft.agfoodplatform farm beats solution definitions'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.agfoodplatform/farmbeatssolutiondefinitions.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.agricultureplatform/agriservices'; SingularDisplayName = 'Azure Data Manager for Agriculture'; PluralDisplayName = 'Azure Data Manager for Agriculture'; LowerSingularDisplayName = 'Azure Data Manager for Agriculture'; LowerPluralDisplayName = 'Azure Data Manager for Agriculture'; IsPreview = 'false'; Description = 'Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.agricultureplatform/agriservices.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.agricultureplatform/agriservices'; SingularDisplayName = 'Agriculture data solutions'; PluralDisplayName = 'Agriculture data solutions'; LowerSingularDisplayName = 'Agriculture data solutions'; LowerPluralDisplayName = 'Agriculture data solutions'; IsPreview = 'false'; Description = 'Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.agricultureplatform/agriservices.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.akshybrid/agentpools'; SingularDisplayName = 'Microsoft.AksHybrid agent pool'; PluralDisplayName = 'Microsoft.AksHybrid agent pools'; LowerSingularDisplayName = 'microsoft.akshybrid agent pool'; LowerPluralDisplayName = 'microsoft.akshybrid agent pools'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.akshybrid/agentpools.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.akshybrid/provisionedclusters'; SingularDisplayName = 'Microsoft.AksHybrid provisioned cluster'; PluralDisplayName = 'Microsoft.AksHybrid provisioned clusters'; LowerSingularDisplayName = 'microsoft.akshybrid provisioned cluster'; LowerPluralDisplayName = 'microsoft.akshybrid provisioned clusters'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.akshybrid/provisionedclusters.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.akshybrid/upgradeprofiles'; SingularDisplayName = 'Microsoft.AksHybrid upgrade profile'; PluralDisplayName = 'Microsoft.AksHybrid upgrade profiles'; LowerSingularDisplayName = 'microsoft.akshybrid upgrade profile'; LowerPluralDisplayName = 'microsoft.akshybrid upgrade profiles'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.akshybrid/upgradeprofiles.svg'; Links = ''; } @@ -72,13 +74,15 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.appassessment/migrateprojects/assessments/machinestoassess'; SingularDisplayName = 'Microsoft.AppAssessment migrate projects assessments machines to asses'; PluralDisplayName = 'Microsoft.AppAssessment migrate projects assessments machines to assess'; LowerSingularDisplayName = 'microsoft.appassessment migrate projects assessments machines to asses'; LowerPluralDisplayName = 'microsoft.appassessment migrate projects assessments machines to assess'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.appassessment/migrateprojects/assessments/machinestoassess.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.appassessment/migrateprojects/sites'; SingularDisplayName = 'Microsoft.AppAssessment migrate projects site'; PluralDisplayName = 'Microsoft.AppAssessment migrate projects sites'; LowerSingularDisplayName = 'microsoft.appassessment migrate projects site'; LowerPluralDisplayName = 'microsoft.appassessment migrate projects sites'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.appassessment/migrateprojects/sites.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.appassessment/migrateprojects/sites/applianceconfigurations'; SingularDisplayName = 'Microsoft.AppAssessment migrate projects sites appliance configuration'; PluralDisplayName = 'Microsoft.AppAssessment migrate projects sites appliance configurations'; LowerSingularDisplayName = 'microsoft.appassessment migrate projects sites appliance configuration'; LowerPluralDisplayName = 'microsoft.appassessment migrate projects sites appliance configurations'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.appassessment/migrateprojects/sites/applianceconfigurations.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.appcomplianceautomation/reports'; SingularDisplayName = 'Microsoft.AppComplianceAutomation report'; PluralDisplayName = 'Microsoft.AppComplianceAutomation reports'; LowerSingularDisplayName = 'microsoft.appcomplianceautomation report'; LowerPluralDisplayName = 'microsoft.appcomplianceautomation reports'; IsPreview = 'false'; Description = 'A class represent an AppComplianceAutomation report resource.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.appcomplianceautomation/reports/evidences'; SingularDisplayName = 'Microsoft.AppComplianceAutomation reports evidence'; PluralDisplayName = 'Microsoft.AppComplianceAutomation reports evidences'; LowerSingularDisplayName = 'microsoft.appcomplianceautomation reports evidence'; LowerPluralDisplayName = 'microsoft.appcomplianceautomation reports evidences'; IsPreview = 'false'; Description = 'A class represent an AppComplianceAutomation evidence resource.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports/evidences.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.appcomplianceautomation/reports/scopingconfigurations'; SingularDisplayName = 'Microsoft.AppComplianceAutomation reports scoping configuration'; PluralDisplayName = 'Microsoft.AppComplianceAutomation reports scoping configurations'; LowerSingularDisplayName = 'microsoft.appcomplianceautomation reports scoping configuration'; LowerPluralDisplayName = 'microsoft.appcomplianceautomation reports scoping configurations'; IsPreview = 'false'; Description = 'A class represent an AppComplianceAutomation scoping configuration resource.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports/scopingconfigurations.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.appcomplianceautomation/reports/snapshots'; SingularDisplayName = 'Microsoft.AppComplianceAutomation reports snapshot'; PluralDisplayName = 'Microsoft.AppComplianceAutomation reports snapshots'; LowerSingularDisplayName = 'microsoft.appcomplianceautomation reports snapshot'; LowerPluralDisplayName = 'microsoft.appcomplianceautomation reports snapshots'; IsPreview = 'false'; Description = 'A class represent a AppComplianceAutomation snapshot resource.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports/snapshots.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.appcomplianceautomation/reports/webhooks'; SingularDisplayName = 'Microsoft.AppComplianceAutomation reports webhook'; PluralDisplayName = 'Microsoft.AppComplianceAutomation reports webhooks'; LowerSingularDisplayName = 'microsoft.appcomplianceautomation reports webhook'; LowerPluralDisplayName = 'microsoft.appcomplianceautomation reports webhooks'; IsPreview = 'false'; Description = 'A class represent an AppComplianceAutomation webhook resource.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports/webhooks.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.appcomplianceautomation/reports'; SingularDisplayName = 'Microsoft.AppComplianceAutomation report'; PluralDisplayName = 'Microsoft.AppComplianceAutomation reports'; LowerSingularDisplayName = 'microsoft.appcomplianceautomation report'; LowerPluralDisplayName = 'microsoft.appcomplianceautomation reports'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.appcomplianceautomation/reports/evidences'; SingularDisplayName = 'Microsoft.AppComplianceAutomation reports evidence'; PluralDisplayName = 'Microsoft.AppComplianceAutomation reports evidences'; LowerSingularDisplayName = 'microsoft.appcomplianceautomation reports evidence'; LowerPluralDisplayName = 'microsoft.appcomplianceautomation reports evidences'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports/evidences.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.appcomplianceautomation/reports/scopingconfigurations'; SingularDisplayName = 'Microsoft.AppComplianceAutomation reports scoping configuration'; PluralDisplayName = 'Microsoft.AppComplianceAutomation reports scoping configurations'; LowerSingularDisplayName = 'microsoft.appcomplianceautomation reports scoping configuration'; LowerPluralDisplayName = 'microsoft.appcomplianceautomation reports scoping configurations'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports/scopingconfigurations.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.appcomplianceautomation/reports/snapshots'; SingularDisplayName = 'Microsoft.AppComplianceAutomation reports snapshot'; PluralDisplayName = 'Microsoft.AppComplianceAutomation reports snapshots'; LowerSingularDisplayName = 'microsoft.appcomplianceautomation reports snapshot'; LowerPluralDisplayName = 'microsoft.appcomplianceautomation reports snapshots'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports/snapshots.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.appcomplianceautomation/reports/snapshots/controls'; SingularDisplayName = 'Microsoft.AppComplianceAutomation reports snapshots control'; PluralDisplayName = 'Microsoft.AppComplianceAutomation reports snapshots controls'; LowerSingularDisplayName = 'microsoft.appcomplianceautomation reports snapshots control'; LowerPluralDisplayName = 'microsoft.appcomplianceautomation reports snapshots controls'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports/snapshots/controls.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.appcomplianceautomation/reports/webhooks'; SingularDisplayName = 'Microsoft.AppComplianceAutomation reports webhook'; PluralDisplayName = 'Microsoft.AppComplianceAutomation reports webhooks'; LowerSingularDisplayName = 'microsoft.appcomplianceautomation reports webhook'; LowerPluralDisplayName = 'microsoft.appcomplianceautomation reports webhooks'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.appcomplianceautomation/reports/webhooks.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.appconfiguration/configurationstores'; SingularDisplayName = 'App Configuration'; PluralDisplayName = 'App Configuration'; LowerSingularDisplayName = 'app configuration'; LowerPluralDisplayName = 'app configuration'; IsPreview = 'false'; Description = 'Azure App Configuration lets you centrally manage application configuration and feature flags in the cloud. Create a resource today to be able to manage your configuration as code, propagate changes without having to redeploy, and easily integrate configuration with CI/CD processes.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.appconfiguration/configurationstores.svg'; Links = '[{"title":"Learn more about App Configuration & Pricing","uri":"https://azure.microsoft.com/products/app-configuration/#overview"},{"title":"Learn how to use the service with our documentation","uri":"https://learn.microsoft.com/azure/azure-app-configuration/overview"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.appplatform/spring'; SingularDisplayName = 'Azure Spring Apps'; PluralDisplayName = 'Azure Spring Apps'; LowerSingularDisplayName = 'Azure Spring Apps'; LowerPluralDisplayName = 'Azure Spring Apps'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.appplatform/spring.svg'; Links = '[{"title":"Learn more about Azure Spring Apps","uri":"https://aka.ms/azurespringapps"}]'; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.appsecurity/appprotectmanagedrulesetmanifests'; SingularDisplayName = 'Microsoft.AppSecurity app protect managed rule set manifest'; PluralDisplayName = 'Microsoft.AppSecurity app protect managed rule set manifests'; LowerSingularDisplayName = 'microsoft.appsecurity app protect managed rule set manifest'; LowerPluralDisplayName = 'microsoft.appsecurity app protect managed rule set manifests'; IsPreview = 'false'; Description = 'The managed rule set manifest resource definition.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.appsecurity/appprotectmanagedrulesetmanifests.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.appsecurity/policies'; SingularDisplayName = 'App Protect Policy'; PluralDisplayName = 'App Protect Policies'; LowerSingularDisplayName = 'app protect policy'; LowerPluralDisplayName = 'app protect policies'; IsPreview = 'false'; Description = 'App Protect Policies are used to define the security policies (TBD)'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.appsecurity/policies.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.arc/all'; SingularDisplayName = 'Azure Arc enabled resource'; PluralDisplayName = 'Azure Arc enabled resources'; LowerSingularDisplayName = 'Azure Arc enabled resource'; LowerPluralDisplayName = 'Azure Arc enabled resources'; IsPreview = 'false'; Description = 'Azure Arc extends Azure management tools to on-premises, multi-cloud environments, and the edge. Start here by adding any of your existing resources.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.arc/all.svg'; Links = '[{"title":"Learn more","uri":"https://aka.ms/moreaboutazurearc"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.arc/allfairfax'; SingularDisplayName = 'Azure Arc enabled resource'; PluralDisplayName = 'Azure Arc enabled resources'; LowerSingularDisplayName = 'Azure Arc enabled resource'; LowerPluralDisplayName = 'Azure Arc enabled resources'; IsPreview = 'false'; Description = 'Azure Arc extends Azure management tools to on-premises, multi-cloud environments, and the edge. Start here by adding any of your existing resources.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.arc/allfairfax.svg'; Links = '[{"title":"Learn more","uri":"https://aka.ms/moreaboutazurearc"}]'; } @@ -260,7 +264,9 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.azureactivedirectory/ciamdirectories'; SingularDisplayName = 'External Configuration Tenant'; PluralDisplayName = 'External Configuration Tenant'; LowerSingularDisplayName = 'External Configuration Tenant'; LowerPluralDisplayName = 'External Configuration Tenant'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azureactivedirectory/ciamdirectories.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.azureactivedirectory/guestusages'; SingularDisplayName = 'Guest Usage'; PluralDisplayName = 'Guest Usages'; LowerSingularDisplayName = 'guest usage'; LowerPluralDisplayName = 'guest usages'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azureactivedirectory/guestusages.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.azurearcdata/datacontrollers'; SingularDisplayName = 'Azure Arc data controller'; PluralDisplayName = 'Azure Arc data controllers'; LowerSingularDisplayName = 'Azure Arc data controller'; LowerPluralDisplayName = 'Azure Arc data controllers'; IsPreview = 'false'; Description = 'Create an Azure Arc data controller to enable Azure data services in the Kubernetes environment of your choice.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurearcdata/datacontrollers.svg'; Links = '[{"title":"Learn more","uri":"https://aka.ms/azurearcdata"}]'; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.azurearcdata/mysqlserver'; SingularDisplayName = 'MySql Server - Azure Arc'; PluralDisplayName = 'MySql Server - Azure Arc'; LowerSingularDisplayName = 'MySql Server - Azure Arc'; LowerPluralDisplayName = 'MySql Server - Azure Arc'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurearcdata/mysqlserver.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.azurearcdata/postgresinstances'; SingularDisplayName = 'PostgreSQL server ? Azure Arc'; PluralDisplayName = 'PostgreSQL servers ? Azure Arc'; LowerSingularDisplayName = 'PostgreSQL server ? Azure Arc'; LowerPluralDisplayName = 'PostgreSQL servers ? Azure Arc'; IsPreview = 'false'; Description = 'Create a semi-managed PostgreSQL enabled by Azure Arc on the infrastructure of your choice (on your premises, in the cloud, at the edge), with built-in management capabilities that drastically reduces your management overhead and meets your requirements of data residency and customer control.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurearcdata/postgresinstances.svg'; Links = '[{"title":"Learn more","uri":"https://aka.ms/arcpostgresqlhyperscale"}]'; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.azurearcdata/postgressqlserver'; SingularDisplayName = 'PostgresSql Server - Azure Arc'; PluralDisplayName = 'PostgresSql Server - Azure Arc'; LowerSingularDisplayName = 'PostgresSql Server - Azure Arc'; LowerPluralDisplayName = 'PostgresSql Server - Azure Arc'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurearcdata/postgressqlserver.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.azurearcdata/sqlmanagedinstances'; SingularDisplayName = 'SQL managed instance - Azure Arc'; PluralDisplayName = 'SQL managed instances - Azure Arc'; LowerSingularDisplayName = 'SQL managed instance - Azure Arc'; LowerPluralDisplayName = 'SQL managed instances - Azure Arc'; IsPreview = 'false'; Description = 'Create a fully managed SQL Managed Instance enabled by Azure Arc on the infrastructure of your choice, with built-in management capabilities that drastically reduce your management overhead.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurearcdata/sqlmanagedinstances.svg'; Links = '[{"title":"Learn more","uri":"https://docs.microsoft.com/azure/azure-arc/data/managed-instance-overview"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.azurearcdata/sqlserveresulicenses'; SingularDisplayName = 'SQL Server ESU license'; PluralDisplayName = 'SQL Server ESU licenses'; LowerSingularDisplayName = 'SQL Server ESU license'; LowerPluralDisplayName = 'SQL Server ESU licenses'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurearcdata/sqlserveresulicenses.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.azurearcdata/sqlserverinstances'; SingularDisplayName = 'SQL Server - Azure Arc'; PluralDisplayName = 'SQL Server - Azure Arc'; LowerSingularDisplayName = 'SQL Server - Azure Arc'; LowerPluralDisplayName = 'SQL Server - Azure Arc'; IsPreview = 'false'; Description = 'SQL Server enabled by Azure Arc allows you to manage your global inventory of SQL servers, protect SQL Server instances with Microsoft Defender for Cloud or periodically assess and tune the health of your SQL Server configurations.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurearcdata/sqlserverinstances.svg'; Links = '[{"title":"Learn more","uri":"https://aka.ms/arc-enabled-sql-server"}]'; } @@ -269,23 +275,24 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.azurebusinesscontinuity/deletedunifiedprotecteditems'; SingularDisplayName = 'Microsoft.AzureBusinessContinuity deleted unified protected item'; PluralDisplayName = 'Microsoft.AzureBusinessContinuity deleted unified protected items'; LowerSingularDisplayName = 'microsoft.azurebusinesscontinuity deleted unified protected item'; LowerPluralDisplayName = 'microsoft.azurebusinesscontinuity deleted unified protected items'; IsPreview = 'false'; Description = 'A DeletedUnifiedProtectedItem represents a protected item by backup or replication solution of deleted resource.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurebusinesscontinuity/deletedunifiedprotecteditems.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.azurebusinesscontinuity/unifiedprotecteditems'; SingularDisplayName = 'Microsoft.AzureBusinessContinuity unified protected item'; PluralDisplayName = 'Microsoft.AzureBusinessContinuity unified protected items'; LowerSingularDisplayName = 'microsoft.azurebusinesscontinuity unified protected item'; LowerPluralDisplayName = 'microsoft.azurebusinesscontinuity unified protected items'; IsPreview = 'false'; Description = 'A UnifiedProtectedItem represents a protected item by backup or replication solution.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurebusinesscontinuity/unifiedprotecteditems.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/aadapplications'; SingularDisplayName = 'Microsoft.AzureCis AAD application'; PluralDisplayName = 'Microsoft.AzureCis AAD applications'; LowerSingularDisplayName = 'microsoft.azurecis aad application'; LowerPluralDisplayName = 'microsoft.azurecis aad applications'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/aadapplications.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/addressrecords'; SingularDisplayName = 'Microsoft.AzureCis address record'; PluralDisplayName = 'Microsoft.AzureCis address records'; LowerSingularDisplayName = 'microsoft.azurecis address record'; LowerPluralDisplayName = 'microsoft.azurecis address records'; IsPreview = 'false'; Description = 'AddressRecord Resource'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/addressrecords.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/autopilotenvironments'; SingularDisplayName = 'Microsoft.AzureCis autopilot environment'; PluralDisplayName = 'Microsoft.AzureCis autopilot environments'; LowerSingularDisplayName = 'microsoft.azurecis autopilot environment'; LowerPluralDisplayName = 'microsoft.azurecis autopilot environments'; IsPreview = 'false'; Description = 'Environment Resource'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/autopilotenvironments.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/autopilotmachinefunctions'; SingularDisplayName = 'Microsoft.AzureCis autopilot machine function'; PluralDisplayName = 'Microsoft.AzureCis autopilot machine functions'; LowerSingularDisplayName = 'microsoft.azurecis autopilot machine function'; LowerPluralDisplayName = 'microsoft.azurecis autopilot machine functions'; IsPreview = 'false'; Description = 'AutopilotMachineFunction Resource'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/autopilotmachinefunctions.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/autopilotsoftwareloadbalancevirtualips'; SingularDisplayName = 'Microsoft.AzureCis auto pilot software load balance virtual IP'; PluralDisplayName = 'Microsoft.AzureCis auto pilot software load balance virtual ips'; LowerSingularDisplayName = 'microsoft.azurecis auto pilot software load balance virtual ip'; LowerPluralDisplayName = 'microsoft.azurecis auto pilot software load balance virtual ips'; IsPreview = 'false'; Description = 'Autopilot software load balance VIP Resource'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/autopilotsoftwareloadbalancevirtualips.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/canonicalnamerecords'; SingularDisplayName = 'Microsoft.AzureCis canonical name record'; PluralDisplayName = 'Microsoft.AzureCis canonical name records'; LowerSingularDisplayName = 'microsoft.azurecis canonical name record'; LowerPluralDisplayName = 'microsoft.azurecis canonical name records'; IsPreview = 'false'; Description = 'CanonicalNameRecord Resource'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/canonicalnamerecords.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/dsmsallowlists'; SingularDisplayName = 'Microsoft.AzureCis ds msallowlist'; PluralDisplayName = 'Microsoft.AzureCis ds msallowlists'; LowerSingularDisplayName = 'microsoft.azurecis ds msallowlist'; LowerPluralDisplayName = 'microsoft.azurecis ds msallowlists'; IsPreview = 'false'; Description = 'dsmsAllowlist Resource'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dsmsallowlists.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/dsmscertificates'; SingularDisplayName = 'Microsoft.AzureCis dsms certificate'; PluralDisplayName = 'Microsoft.AzureCis dsms certificates'; LowerSingularDisplayName = 'microsoft.azurecis dsms certificate'; LowerPluralDisplayName = 'microsoft.azurecis dsms certificates'; IsPreview = 'false'; Description = 'dsmsCertificate Resource'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dsmscertificates.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/dsmsrootfolders'; SingularDisplayName = 'Microsoft.AzureCis dsms root folder'; PluralDisplayName = 'Microsoft.AzureCis dsms root folders'; LowerSingularDisplayName = 'microsoft.azurecis dsms root folder'; LowerPluralDisplayName = 'microsoft.azurecis dsms root folders'; IsPreview = 'false'; Description = 'dsmsRootFolder Resource'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dsmsrootfolders.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/dstsapplications'; SingularDisplayName = 'Microsoft.AzureCis dsts application'; PluralDisplayName = 'Microsoft.AzureCis dsts applications'; LowerSingularDisplayName = 'microsoft.azurecis dsts application'; LowerPluralDisplayName = 'microsoft.azurecis dsts applications'; IsPreview = 'false'; Description = 'dstsApplication Resource'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dstsapplications.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/dstsserviceaccounts'; SingularDisplayName = 'Microsoft.AzureCis dsts service account'; PluralDisplayName = 'Microsoft.AzureCis dsts service accounts'; LowerSingularDisplayName = 'microsoft.azurecis dsts service account'; LowerPluralDisplayName = 'microsoft.azurecis dsts service accounts'; IsPreview = 'false'; Description = 'dstsServiceAccount Resource.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dstsserviceaccounts.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/dstsserviceclientidentities'; SingularDisplayName = 'Microsoft.AzureCis dsts service client identity'; PluralDisplayName = 'Microsoft.AzureCis dsts service client identities'; LowerSingularDisplayName = 'microsoft.azurecis dsts service client identity'; LowerPluralDisplayName = 'microsoft.azurecis dsts service client identities'; IsPreview = 'false'; Description = 'dstsServiceClientIdentityResource Resource'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dstsserviceclientidentities.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/genericgenevaactions'; SingularDisplayName = 'Microsoft.AzureCis generic geneva action'; PluralDisplayName = 'Microsoft.AzureCis generic geneva actions'; LowerSingularDisplayName = 'microsoft.azurecis generic geneva action'; LowerPluralDisplayName = 'microsoft.azurecis generic geneva actions'; IsPreview = 'false'; Description = 'genericGenevaActions Resource'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/genericgenevaactions.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/addressrecords'; SingularDisplayName = 'Microsoft.AzureCis address record'; PluralDisplayName = 'Microsoft.AzureCis address records'; LowerSingularDisplayName = 'microsoft.azurecis address record'; LowerPluralDisplayName = 'microsoft.azurecis address records'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/addressrecords.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/autopilotenvironments'; SingularDisplayName = 'Microsoft.AzureCis autopilot environment'; PluralDisplayName = 'Microsoft.AzureCis autopilot environments'; LowerSingularDisplayName = 'microsoft.azurecis autopilot environment'; LowerPluralDisplayName = 'microsoft.azurecis autopilot environments'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/autopilotenvironments.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/autopilotmachinefunctions'; SingularDisplayName = 'Microsoft.AzureCis autopilot machine function'; PluralDisplayName = 'Microsoft.AzureCis autopilot machine functions'; LowerSingularDisplayName = 'microsoft.azurecis autopilot machine function'; LowerPluralDisplayName = 'microsoft.azurecis autopilot machine functions'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/autopilotmachinefunctions.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/autopilotsoftwareloadbalancevirtualips'; SingularDisplayName = 'Microsoft.AzureCis auto pilot software load balance virtual IP'; PluralDisplayName = 'Microsoft.AzureCis auto pilot software load balance virtual ips'; LowerSingularDisplayName = 'microsoft.azurecis auto pilot software load balance virtual ip'; LowerPluralDisplayName = 'microsoft.azurecis auto pilot software load balance virtual ips'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/autopilotsoftwareloadbalancevirtualips.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/canonicalnamerecords'; SingularDisplayName = 'Microsoft.AzureCis canonical name record'; PluralDisplayName = 'Microsoft.AzureCis canonical name records'; LowerSingularDisplayName = 'microsoft.azurecis canonical name record'; LowerPluralDisplayName = 'microsoft.azurecis canonical name records'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/canonicalnamerecords.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/dsmsallowlists'; SingularDisplayName = 'Microsoft.AzureCis ds msallowlist'; PluralDisplayName = 'Microsoft.AzureCis ds msallowlists'; LowerSingularDisplayName = 'microsoft.azurecis ds msallowlist'; LowerPluralDisplayName = 'microsoft.azurecis ds msallowlists'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dsmsallowlists.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/dsmscertificates'; SingularDisplayName = 'Microsoft.AzureCis dsms certificate'; PluralDisplayName = 'Microsoft.AzureCis dsms certificates'; LowerSingularDisplayName = 'microsoft.azurecis dsms certificate'; LowerPluralDisplayName = 'microsoft.azurecis dsms certificates'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dsmscertificates.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/dsmsrootfolders'; SingularDisplayName = 'Microsoft.AzureCis dsms root folder'; PluralDisplayName = 'Microsoft.AzureCis dsms root folders'; LowerSingularDisplayName = 'microsoft.azurecis dsms root folder'; LowerPluralDisplayName = 'microsoft.azurecis dsms root folders'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dsmsrootfolders.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/dstsapplications'; SingularDisplayName = 'Microsoft.AzureCis dsts application'; PluralDisplayName = 'Microsoft.AzureCis dsts applications'; LowerSingularDisplayName = 'microsoft.azurecis dsts application'; LowerPluralDisplayName = 'microsoft.azurecis dsts applications'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dstsapplications.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/dstsserviceaccounts'; SingularDisplayName = 'Microsoft.AzureCis dsts service account'; PluralDisplayName = 'Microsoft.AzureCis dsts service accounts'; LowerSingularDisplayName = 'microsoft.azurecis dsts service account'; LowerPluralDisplayName = 'microsoft.azurecis dsts service accounts'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dstsserviceaccounts.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/dstsserviceclientidentities'; SingularDisplayName = 'Microsoft.AzureCis dsts service client identity'; PluralDisplayName = 'Microsoft.AzureCis dsts service client identities'; LowerSingularDisplayName = 'microsoft.azurecis dsts service client identity'; LowerPluralDisplayName = 'microsoft.azurecis dsts service client identities'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/dstsserviceclientidentities.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/genericgenevaactions'; SingularDisplayName = 'Microsoft.AzureCis generic geneva action'; PluralDisplayName = 'Microsoft.AzureCis generic geneva actions'; LowerSingularDisplayName = 'microsoft.azurecis generic geneva action'; LowerPluralDisplayName = 'microsoft.azurecis generic geneva actions'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/genericgenevaactions.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/plannedquotas'; SingularDisplayName = 'Microsoft.AzureCis planned quota'; PluralDisplayName = 'Microsoft.AzureCis planned quotas'; LowerSingularDisplayName = 'microsoft.azurecis planned quota'; LowerPluralDisplayName = 'microsoft.azurecis planned quotas'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/plannedquotas.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/pointerrecords'; SingularDisplayName = 'Microsoft.AzureCis pointer record'; PluralDisplayName = 'Microsoft.AzureCis pointer records'; LowerSingularDisplayName = 'microsoft.azurecis pointer record'; LowerPluralDisplayName = 'microsoft.azurecis pointer records'; IsPreview = 'false'; Description = 'Pointer record resource'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/pointerrecords.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/pointerrecords'; SingularDisplayName = 'Microsoft.AzureCis pointer record'; PluralDisplayName = 'Microsoft.AzureCis pointer records'; LowerSingularDisplayName = 'microsoft.azurecis pointer record'; LowerPluralDisplayName = 'microsoft.azurecis pointer records'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/pointerrecords.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/publishconfigvalues'; SingularDisplayName = 'Microsoft.AzureCis publish config value'; PluralDisplayName = 'Microsoft.AzureCis publish config values'; LowerSingularDisplayName = 'microsoft.azurecis publish config value'; LowerPluralDisplayName = 'microsoft.azurecis publish config values'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/publishconfigvalues.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/pushagentv2accounts'; SingularDisplayName = 'Microsoft.AzureCis push agent v2 account'; PluralDisplayName = 'Microsoft.AzureCis push agent v2 accounts'; LowerSingularDisplayName = 'microsoft.azurecis push agent v2 account'; LowerPluralDisplayName = 'microsoft.azurecis push agent v2 accounts'; IsPreview = 'false'; Description = 'PushAgentV2Account Resource'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/pushagentv2accounts.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/servicerecords'; SingularDisplayName = 'Microsoft.AzureCis service record'; PluralDisplayName = 'Microsoft.AzureCis service records'; LowerSingularDisplayName = 'microsoft.azurecis service record'; LowerPluralDisplayName = 'microsoft.azurecis service records'; IsPreview = 'false'; Description = 'ServiceRecord Resource'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/servicerecords.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/pushagentv2accounts'; SingularDisplayName = 'Microsoft.AzureCis push agent v2 account'; PluralDisplayName = 'Microsoft.AzureCis push agent v2 accounts'; LowerSingularDisplayName = 'microsoft.azurecis push agent v2 account'; LowerPluralDisplayName = 'microsoft.azurecis push agent v2 accounts'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/pushagentv2accounts.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/servicerecords'; SingularDisplayName = 'Microsoft.AzureCis service record'; PluralDisplayName = 'Microsoft.AzureCis service records'; LowerSingularDisplayName = 'microsoft.azurecis service record'; LowerPluralDisplayName = 'microsoft.azurecis service records'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/servicerecords.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.azurecis/sharedconfigvalues'; SingularDisplayName = 'Microsoft.AzureCis shared config value'; PluralDisplayName = 'Microsoft.AzureCis shared config values'; LowerSingularDisplayName = 'microsoft.azurecis shared config value'; LowerPluralDisplayName = 'microsoft.azurecis shared config values'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurecis/sharedconfigvalues.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.azuredatatransfer/connections'; SingularDisplayName = 'Connection'; PluralDisplayName = 'Connections'; LowerSingularDisplayName = 'connection'; LowerPluralDisplayName = 'connections'; IsPreview = 'false'; Description = 'Utilize Azure Data Transfer to securely transfer data between various environments.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azuredatatransfer/connections.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.azuredatatransfer/connections/flows'; SingularDisplayName = 'Flow'; PluralDisplayName = 'Flows'; LowerSingularDisplayName = 'flow'; LowerPluralDisplayName = 'flows'; IsPreview = 'false'; Description = 'Utilize Azure Data Transfer to securely transfer data between various environments.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azuredatatransfer/connections/flows.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.azuredatatransfer/pipelines'; SingularDisplayName = 'Pipeline'; PluralDisplayName = 'Pipelines'; LowerSingularDisplayName = 'pipeline'; LowerPluralDisplayName = 'pipelines'; IsPreview = 'false'; Description = 'Utilize Azure Data Transfer to securely transfer data between various environments.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azuredatatransfer/pipelines.svg'; Links = ''; } @@ -319,8 +326,11 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.azurestack/registrations/customersubscriptions'; SingularDisplayName = 'Microsoft.AzureStack registrations customer subscription'; PluralDisplayName = 'Microsoft.AzureStack registrations customer subscriptions'; LowerSingularDisplayName = 'microsoft.azurestack registrations customer subscription'; LowerPluralDisplayName = 'microsoft.azurestack registrations customer subscriptions'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestack/registrations/customersubscriptions.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.azurestack/registrations/products'; SingularDisplayName = 'Microsoft.AzureStack registrations product'; PluralDisplayName = 'Microsoft.AzureStack registrations products'; LowerSingularDisplayName = 'microsoft.azurestack registrations product'; LowerPluralDisplayName = 'microsoft.azurestack registrations products'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestack/registrations/products.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.azurestackhci/clusters'; SingularDisplayName = 'Azure Local'; PluralDisplayName = 'Azure Local'; LowerSingularDisplayName = 'Azure Local'; LowerPluralDisplayName = 'Azure Local'; IsPreview = 'false'; Description = 'Azure Local'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestackhci/clusters.svg'; Links = '[{"title":"Learn more","uri":"https://azure.com/hci"}]'; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.azurestackhci/devicepools'; SingularDisplayName = 'Microsoft.AzureStackHCI device pool'; PluralDisplayName = 'Microsoft.AzureStackHCI device pools'; LowerSingularDisplayName = 'microsoft.azurestackhci device pool'; LowerPluralDisplayName = 'microsoft.azurestackhci device pools'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestackhci/devicepools.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.azurestackhci/edgedevices'; SingularDisplayName = 'Microsoft.AzureStackHCI edge device'; PluralDisplayName = 'Microsoft.AzureStackHCI edge devices'; LowerSingularDisplayName = 'microsoft.azurestackhci edge device'; LowerPluralDisplayName = 'microsoft.azurestackhci edge devices'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestackhci/edgedevices.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.azurestackhci/edgedevices/jobs'; SingularDisplayName = 'Microsoft.AzureStackHCI edge devices job'; PluralDisplayName = 'Microsoft.AzureStackHCI edge devices jobs'; LowerSingularDisplayName = 'microsoft.azurestackhci edge devices job'; LowerPluralDisplayName = 'microsoft.azurestackhci edge devices jobs'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestackhci/edgedevices/jobs.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.azurestackhci/edgemachines'; SingularDisplayName = 'Microsoft.AzureStackHCI edge machine'; PluralDisplayName = 'Microsoft.AzureStackHCI edge machines'; LowerSingularDisplayName = 'microsoft.azurestackhci edge machine'; LowerPluralDisplayName = 'microsoft.azurestackhci edge machines'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestackhci/edgemachines.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.azurestackhci/edgemachines/jobs'; SingularDisplayName = 'Microsoft.AzureStackHCI edge machines job'; PluralDisplayName = 'Microsoft.AzureStackHCI edge machines jobs'; LowerSingularDisplayName = 'microsoft.azurestackhci edge machines job'; LowerPluralDisplayName = 'microsoft.azurestackhci edge machines jobs'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestackhci/edgemachines/jobs.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.azurestackhci/edgenodepools'; SingularDisplayName = 'Azure Stack'; PluralDisplayName = 'Azure Stack'; LowerSingularDisplayName = 'azure stack'; LowerPluralDisplayName = 'azure stack'; IsPreview = 'true'; Description = 'Azure Stack'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestackhci/edgenodepools.svg'; Links = '[{"title":"Learn more","uri":"https://aka.ms/azurestacklearnmore"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.azurestackhci/galleryimages'; SingularDisplayName = 'Azure Local Gallery image'; PluralDisplayName = 'Azure Local Gallery images'; LowerSingularDisplayName = 'azure local gallery image'; LowerPluralDisplayName = 'azure local gallery images'; IsPreview = 'false'; Description = 'Azure Local Gallery Images'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestackhci/galleryimages.svg'; Links = '[{"title":"Learn more","uri":"https://azure.com/hci"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.azurestackhci/logicalnetworks'; SingularDisplayName = 'Azure Local Logical network'; PluralDisplayName = 'Azure Local Logical networks'; LowerSingularDisplayName = 'azure local logical network'; LowerPluralDisplayName = 'azure local logical networks'; IsPreview = 'false'; Description = 'Azure Local Logical Networks'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.azurestackhci/logicalnetworks.svg'; Links = '[{"title":"Learn more","uri":"https://azure.com/hci"}]'; } @@ -341,7 +351,7 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.baremetal/baremetalconnections'; SingularDisplayName = 'Microsoft.BareMetal bare metal connection'; PluralDisplayName = 'Microsoft.BareMetal bare metal connections'; LowerSingularDisplayName = 'microsoft.baremetal bare metal connection'; LowerPluralDisplayName = 'microsoft.baremetal bare metal connections'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.baremetal/baremetalconnections.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.baremetal/crayservers'; SingularDisplayName = 'Cray Server'; PluralDisplayName = 'Cray Servers'; LowerSingularDisplayName = 'cray server'; LowerPluralDisplayName = 'cray servers'; IsPreview = 'false'; Description = 'Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.baremetal/crayservers.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.baremetal/monitoringservers'; SingularDisplayName = 'Monitoring Server'; PluralDisplayName = 'Monitoring Servers'; LowerSingularDisplayName = 'monitoring server'; LowerPluralDisplayName = 'monitoring servers'; IsPreview = 'false'; Description = 'Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.baremetal/monitoringservers.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.baremetal/peeringsettings'; SingularDisplayName = 'Microsoft.BareMetal peering setting'; PluralDisplayName = 'Microsoft.BareMetal peering settings'; LowerSingularDisplayName = 'microsoft.baremetal peering setting'; LowerPluralDisplayName = 'microsoft.baremetal peering settings'; IsPreview = 'false'; Description = 'Model representing a Peering Setting object.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.baremetal/peeringsettings.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.baremetal/peeringsettings'; SingularDisplayName = 'Microsoft.BareMetal peering setting'; PluralDisplayName = 'Microsoft.BareMetal peering settings'; LowerSingularDisplayName = 'microsoft.baremetal peering setting'; LowerPluralDisplayName = 'microsoft.baremetal peering settings'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.baremetal/peeringsettings.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.baremetalinfrastructure/baremetalinstances'; SingularDisplayName = 'BareMetal Instance'; PluralDisplayName = 'BareMetal Instances'; LowerSingularDisplayName = 'bareMetal instance'; LowerPluralDisplayName = 'bareMetal instances'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.baremetalinfrastructure/baremetalinstances.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.baremetalinfrastructure/baremetalstorageinstances'; SingularDisplayName = 'Microsoft.BareMetalInfrastructure bare metal storage instance'; PluralDisplayName = 'Microsoft.BareMetalInfrastructure bare metal storage instances'; LowerSingularDisplayName = 'microsoft.baremetalinfrastructure bare metal storage instance'; LowerPluralDisplayName = 'microsoft.baremetalinfrastructure bare metal storage instances'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.baremetalinfrastructure/baremetalstorageinstances.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.batch/batchaccounts'; SingularDisplayName = 'Batch account'; PluralDisplayName = 'Batch accounts'; LowerSingularDisplayName = 'batch account'; LowerPluralDisplayName = 'batch accounts'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.batch/batchaccounts.svg'; Links = ''; } @@ -393,6 +403,7 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.billing/billingaccounts/invoicesections/products'; SingularDisplayName = 'Microsoft.Billing billing accounts invoice sections product'; PluralDisplayName = 'Microsoft.Billing billing accounts invoice sections products'; LowerSingularDisplayName = 'microsoft.billing billing accounts invoice sections product'; LowerPluralDisplayName = 'microsoft.billing billing accounts invoice sections products'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.billing/billingaccounts/invoicesections/products.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.billing/billingaccounts/invoicesections/transfers'; SingularDisplayName = 'Microsoft.Billing billing accounts invoice sections transfer'; PluralDisplayName = 'Microsoft.Billing billing accounts invoice sections transfers'; LowerSingularDisplayName = 'microsoft.billing billing accounts invoice sections transfer'; LowerPluralDisplayName = 'microsoft.billing billing accounts invoice sections transfers'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.billing/billingaccounts/invoicesections/transfers.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.billing/billingaccounts/lineofcredit'; SingularDisplayName = 'Microsoft.Billing billing accounts line of credit'; PluralDisplayName = 'Microsoft.Billing billing accounts line of credit'; LowerSingularDisplayName = 'microsoft.billing billing accounts line of credit'; LowerPluralDisplayName = 'microsoft.billing billing accounts line of credit'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.billing/billingaccounts/lineofcredit.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.billing/billingaccounts/migrations'; SingularDisplayName = 'Microsoft.Billing billing accounts migration'; PluralDisplayName = 'Microsoft.Billing billing accounts migrations'; LowerSingularDisplayName = 'microsoft.billing billing accounts migration'; LowerPluralDisplayName = 'microsoft.billing billing accounts migrations'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.billing/billingaccounts/migrations.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.billing/billingaccounts/paymentmethods'; SingularDisplayName = 'Microsoft.Billing billing accounts payment method'; PluralDisplayName = 'Microsoft.Billing billing accounts payment methods'; LowerSingularDisplayName = 'microsoft.billing billing accounts payment method'; LowerPluralDisplayName = 'microsoft.billing billing accounts payment methods'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.billing/billingaccounts/paymentmethods.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.billing/billingaccounts/policies'; SingularDisplayName = 'Microsoft.Billing billing accounts policy'; PluralDisplayName = 'Microsoft.Billing billing accounts policies'; LowerSingularDisplayName = 'microsoft.billing billing accounts policy'; LowerPluralDisplayName = 'microsoft.billing billing accounts policies'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.billing/billingaccounts/policies.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.billing/billingaccounts/products'; SingularDisplayName = 'Microsoft.Billing billing accounts product'; PluralDisplayName = 'Microsoft.Billing billing accounts products'; LowerSingularDisplayName = 'microsoft.billing billing accounts product'; LowerPluralDisplayName = 'microsoft.billing billing accounts products'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.billing/billingaccounts/products.svg'; Links = ''; } @@ -440,7 +451,7 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.capacity/reservationorders/reservations'; SingularDisplayName = 'Reservation'; PluralDisplayName = 'Reservations'; LowerSingularDisplayName = 'reservation'; LowerPluralDisplayName = 'reservations'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.capacity/reservationorders/reservations.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.cascade/sites'; SingularDisplayName = 'Microsoft.Cascade site'; PluralDisplayName = 'Microsoft.Cascade sites'; LowerSingularDisplayName = 'microsoft.cascade site'; LowerPluralDisplayName = 'microsoft.cascade sites'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.cascade/sites.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.cdn/cdnwebapplicationfirewallpolicies'; SingularDisplayName = 'Content Delivery Network WAF policy'; PluralDisplayName = 'Content Delivery Network WAF policies'; LowerSingularDisplayName = 'content delivery network WAF policy'; LowerPluralDisplayName = 'content delivery network WAF policies'; IsPreview = 'false'; Description = 'Create a Web Application Firewall policy to protect your web applications from common exploits and vulnerabilities, keep your service available and help you meet compliance requirements.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.cdn/cdnwebapplicationfirewallpolicies.svg'; Links = '[{"title":"Learn more","uri":"https://aka.ms/waf-overview"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.cdn/edgeactions'; SingularDisplayName = 'Edge Action'; PluralDisplayName = 'Edge Actions'; LowerSingularDisplayName = 'edge action'; LowerPluralDisplayName = 'edge actions'; IsPreview = 'false'; Description = 'Azure Edge Actions is security and performance focused service, that enables customers to run short-lived and simple business logic code at the edge of Microsoft network, closer to users, apps and devices with the least possible latencies in a industry leading secure environment.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.cdn/edgeactions.svg'; Links = '[{"title":"Learn more","uri":"https://aka.ms/portalfx/designpatterns"}]'; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.cdn/edgeactions'; SingularDisplayName = 'Edge Action'; PluralDisplayName = 'Edge Actions'; LowerSingularDisplayName = 'edge action'; LowerPluralDisplayName = 'edge actions'; IsPreview = 'false'; Description = 'Azure Edge Actions is security and performance focused service, that enables customers to run short-lived and simple business logic code at the edge of Microsoft network, closer to users, apps and devices with the least possible latencies in a industry leading secure environment.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.cdn/edgeactions.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.cdn/profiles'; SingularDisplayName = 'Front Door and CDN profile'; PluralDisplayName = 'Front Door and CDN profiles'; LowerSingularDisplayName = 'front door and CDN profile'; LowerPluralDisplayName = 'front door and CDN profiles'; IsPreview = 'false'; Description = 'Azure Front Door and CDN profiles is security led, modern cloud CDN that provides static and dynamic content acceleration, global load balancing and enhanced security for your apps, APIs and websites with intelligent threat protection.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.cdn/profiles.svg'; Links = '[{"title":"Learn more","uri":"https://learn.microsoft.com/azure/frontdoor/front-door-overview"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.cdn/profiles/afdendpoints'; SingularDisplayName = 'Endpoint'; PluralDisplayName = 'Endpoints'; LowerSingularDisplayName = 'endpoint'; LowerPluralDisplayName = 'endpoints'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.cdn/profiles/afdendpoints.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.cdn/profiles/afdendpoints/routes'; SingularDisplayName = 'Route'; PluralDisplayName = 'Routes'; LowerSingularDisplayName = 'route'; LowerPluralDisplayName = 'routes'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.cdn/profiles/afdendpoints/routes.svg'; Links = ''; } @@ -479,10 +490,13 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.classicstorage/storageaccounts/osimages'; SingularDisplayName = 'OS image (classic)'; PluralDisplayName = 'OS images (classic)'; LowerSingularDisplayName = 'OS image (classic)'; LowerPluralDisplayName = 'OS images (classic)'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.classicstorage/storageaccounts/osimages.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.classicstorage/storageaccounts/vmimages'; SingularDisplayName = 'VM image (classic)'; PluralDisplayName = 'VM images (classic)'; LowerSingularDisplayName = 'VM image (classic)'; LowerPluralDisplayName = 'VM images (classic)'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.classicstorage/storageaccounts/vmimages.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.cleanroom/cleanrooms'; SingularDisplayName = 'Microsoft.CleanRoom cleanroom'; PluralDisplayName = 'Microsoft.CleanRoom cleanrooms'; LowerSingularDisplayName = 'microsoft.cleanroom cleanroom'; LowerPluralDisplayName = 'microsoft.cleanroom cleanrooms'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.cleanroom/cleanrooms.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.cleanroom/collaborations'; SingularDisplayName = 'Microsoft.CleanRoom collaboration'; PluralDisplayName = 'Microsoft.CleanRoom collaborations'; LowerSingularDisplayName = 'microsoft.cleanroom collaboration'; LowerPluralDisplayName = 'microsoft.cleanroom collaborations'; IsPreview = 'false'; Description = 'Defines the collaboration.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.cleanroom/collaborations.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.cleanroom/collaborations/contracts'; SingularDisplayName = 'Microsoft.CleanRoom collaborations contract'; PluralDisplayName = 'Microsoft.CleanRoom collaborations contracts'; LowerSingularDisplayName = 'microsoft.cleanroom collaborations contract'; LowerPluralDisplayName = 'microsoft.cleanroom collaborations contracts'; IsPreview = 'false'; Description = 'Defines the contract.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.cleanroom/collaborations/contracts.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.cleanroom/consortiums'; SingularDisplayName = 'Microsoft.CleanRoom consortium'; PluralDisplayName = 'Microsoft.CleanRoom consortiums'; LowerSingularDisplayName = 'microsoft.cleanroom consortium'; LowerPluralDisplayName = 'microsoft.cleanroom consortiums'; IsPreview = 'false'; Description = 'Defines the consortium.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.cleanroom/consortiums.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.cleanroom/microservices'; SingularDisplayName = 'Microsoft.CleanRoom microservice'; PluralDisplayName = 'Microsoft.CleanRoom microservices'; LowerSingularDisplayName = 'microsoft.cleanroom microservice'; LowerPluralDisplayName = 'microsoft.cleanroom microservices'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.cleanroom/microservices.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.cloud/hubs'; SingularDisplayName = 'FinOps hub'; PluralDisplayName = 'FinOps hubs'; LowerSingularDisplayName = 'FinOps hub'; LowerPluralDisplayName = 'FinOps hubs'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.cloud/hubs.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.clouddeviceplatform/delegatedidentities'; SingularDisplayName = 'Microsoft.CloudDevicePlatform delegated identity'; PluralDisplayName = 'Microsoft.CloudDevicePlatform delegated identities'; LowerSingularDisplayName = 'microsoft.clouddeviceplatform delegated identity'; LowerPluralDisplayName = 'microsoft.clouddeviceplatform delegated identities'; IsPreview = 'false'; Description = 'Represents a CloudDevicePlatform delegated identity resource.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.clouddeviceplatform/delegatedidentities.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.cloudhealth/healthmodels'; SingularDisplayName = 'Health Model'; PluralDisplayName = 'Health Models'; LowerSingularDisplayName = 'health model'; LowerPluralDisplayName = 'health models'; IsPreview = 'false'; Description = 'A health model augments metric and logs with critical business context of a workload, enabling the automated evaluation of quantified health states.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.cloudhealth/healthmodels.svg'; Links = '[{"title":"Build health models","uri":"https://aka.ms/portalfx/designpatterns"},{"title":"Learn more","uri":"https://aka.ms/portalfx/browse"}]'; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.cloudhealth/healthmodels'; SingularDisplayName = 'Health Model'; PluralDisplayName = 'Health Models'; LowerSingularDisplayName = 'health model'; LowerPluralDisplayName = 'health models'; IsPreview = 'false'; Description = 'A health model augments metric and logs with critical business context of a workload, enabling the automated evaluation of quantified health states.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.cloudhealth/healthmodels.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.cloudtest/accounts'; SingularDisplayName = 'CloudTest Account'; PluralDisplayName = 'CloudTest Accounts'; LowerSingularDisplayName = 'CloudTest account'; LowerPluralDisplayName = 'CloudTest accounts'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.cloudtest/accounts.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.cloudtest/buildcaches'; SingularDisplayName = '1ES Build Cache'; PluralDisplayName = '1ES Build Caches'; LowerSingularDisplayName = '1ES Build Cache'; LowerPluralDisplayName = '1ES Build Caches'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.cloudtest/buildcaches.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.cloudtest/hostedpools'; SingularDisplayName = '1ES Hosted Pool'; PluralDisplayName = '1ES Hosted Pools'; LowerSingularDisplayName = '1ES Hosted Pool'; LowerPluralDisplayName = '1ES Hosted Pools'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.cloudtest/hostedpools.svg'; Links = ''; } @@ -533,39 +547,39 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.compute/virtualmachinecomputehub'; SingularDisplayName = 'Virtual machine'; PluralDisplayName = 'Virtual machines'; LowerSingularDisplayName = 'virtual machine'; LowerPluralDisplayName = 'virtual machines'; IsPreview = 'false'; Description = 'Create a virtual machine that runs Linux or Windows. Select an image from the marketplace or use your own customized image.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.compute/virtualmachinecomputehub.svg'; Links = '[{"title":"Learn more about Windows virtual machines","uri":"https://go.microsoft.com/fwlink/p/?linkid=847684"},{"title":"Learn more about Linux virtual machines","uri":"https://go.microsoft.com/fwlink/p/?linkid=847683"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.compute/virtualmachineflexinstances'; SingularDisplayName = 'Instance'; PluralDisplayName = 'Instances'; LowerSingularDisplayName = 'instance'; LowerPluralDisplayName = 'instances'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.compute/virtualmachineflexinstances.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.compute/virtualmachines'; SingularDisplayName = 'Virtual machine'; PluralDisplayName = 'Virtual machines'; LowerSingularDisplayName = 'virtual machine'; LowerPluralDisplayName = 'virtual machines'; IsPreview = 'false'; Description = 'Create a virtual machine that runs Linux or Windows. Select an image from the marketplace or use your own customized image.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.compute/virtualmachines.svg'; Links = '[{"title":"Learn more about Windows virtual machines","uri":"https://go.microsoft.com/fwlink/p/?linkid=847684"},{"title":"Learn more about Linux virtual machines","uri":"https://go.microsoft.com/fwlink/p/?linkid=847683"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.compute/virtualmachines/providers/guestconfigurationassignments'; SingularDisplayName = 'Guest Assignment'; PluralDisplayName = 'Guest Assignments'; LowerSingularDisplayName = 'guest assignment'; LowerPluralDisplayName = 'guest assignments'; IsPreview = 'false'; Description = 'Guest Assignment'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.compute/virtualmachines/providers/guestconfigurationassignments.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.compute/virtualmachines/providers/guestconfigurationassignments'; SingularDisplayName = 'Guest Assignment'; PluralDisplayName = 'Guest Assignments'; LowerSingularDisplayName = 'guest assignment'; LowerPluralDisplayName = 'guest assignments'; IsPreview = 'false'; Description = 'A guest assignment links a virtual machine to a specific configuration defined by Azure Policy. Use guest assignments to enforce compliance and security policies on your virtual machines, such as ensuring that only certain users have administrative privileges, or that certain software is installed and updated. A guest assignment can also perform actions on your virtual machines, such as installing or removing software, or changing settings.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.compute/virtualmachines/providers/guestconfigurationassignments.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.compute/virtualmachinescalesets'; SingularDisplayName = 'Virtual machine scale set'; PluralDisplayName = 'Virtual machine scale sets'; LowerSingularDisplayName = 'virtual machine scale set'; LowerPluralDisplayName = 'virtual machine scale sets'; IsPreview = 'false'; Description = 'Create a virtual machine scale set to deploy and manage a load balanced set of identical Windows or Linux virtual machines. Use autoscale to automatically scale virtual machine resources in and out.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.compute/virtualmachinescalesets.svg'; Links = '[{"title":"Learn more","uri":"https://go.microsoft.com/fwlink/p/?linkid=848151"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.compute/virtualmachinescalesets/providers/guestconfigurationassignments'; SingularDisplayName = 'Guest Assignment'; PluralDisplayName = 'Guest Assignments'; LowerSingularDisplayName = 'guest assignment'; LowerPluralDisplayName = 'guest assignments'; IsPreview = 'false'; Description = 'A guest assignment links a virtual machine to a specific configuration defined by Azure Policy. Use guest assignments to enforce compliance and security policies on your virtual machines, such as ensuring that only certain users have administrative privileges, or that certain software is installed and updated. A guest assignment can also perform actions on your virtual machines, such as installing or removing software, or changing settings.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.compute/virtualmachinescalesets/providers/guestconfigurationassignments.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.compute/virtualmachinescalesets/virtualmachines'; SingularDisplayName = 'Virtual machine scale set instance'; PluralDisplayName = 'Virtual machine scale set instances'; LowerSingularDisplayName = 'virtual machine scale set instance'; LowerPluralDisplayName = 'virtual machine scale set instances'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.compute/virtualmachinescalesets/virtualmachines.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.compute/virtualmachinescalesets/virtualmachines/networkinterfaces/ipconfigurations/publicipaddresses'; SingularDisplayName = 'Public IP address'; PluralDisplayName = 'Public IP addresses'; LowerSingularDisplayName = 'Public IP address'; LowerPluralDisplayName = 'Public IP addresses'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.compute/virtualmachinescalesets/virtualmachines/networkinterfaces/ipconfigurations/publicipaddresses.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.compute/virtualmachinescalesetscomputehub'; SingularDisplayName = 'Virtual machine scale set'; PluralDisplayName = 'Virtual machine scale sets'; LowerSingularDisplayName = 'virtual machine scale set'; LowerPluralDisplayName = 'virtual machine scale sets'; IsPreview = 'false'; Description = 'Create a virtual machine scale set to deploy and manage a load balanced set of identical Windows or Linux virtual machines. Use autoscale to automatically scale virtual machine resources in and out.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.compute/virtualmachinescalesetscomputehub.svg'; Links = '[{"title":"Learn more","uri":"https://go.microsoft.com/fwlink/p/?linkid=848151"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/advisorcost'; SingularDisplayName = 'Recommendations'; PluralDisplayName = 'Recommendations'; LowerSingularDisplayName = 'Recommendations'; LowerPluralDisplayName = 'Recommendations'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/advisorcost.svg'; Links = '[{"title":"Get consistent","uri":"https://aka.ms/portalfx/designpatterns"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/advisoroperationalexcellence'; SingularDisplayName = 'Recommendations'; PluralDisplayName = 'Recommendations'; LowerSingularDisplayName = 'Recommendations'; LowerPluralDisplayName = 'Recommendations'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/advisoroperationalexcellence.svg'; Links = '[{"title":"Get consistent","uri":"https://aka.ms/portalfx/designpatterns"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/advisorperformance'; SingularDisplayName = 'Recommendations'; PluralDisplayName = 'Recommendations'; LowerSingularDisplayName = 'Recommendations'; LowerPluralDisplayName = 'Recommendations'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/advisorperformance.svg'; Links = '[{"title":"Get consistent","uri":"https://aka.ms/portalfx/designpatterns"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/advisorreliability'; SingularDisplayName = 'Recommendations'; PluralDisplayName = 'Recommendations'; LowerSingularDisplayName = 'Recommendations'; LowerPluralDisplayName = 'Recommendations'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/advisorreliability.svg'; Links = '[{"title":"Get consistent","uri":"https://aka.ms/portalfx/designpatterns"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/advisorsecurity'; SingularDisplayName = 'Recommendations'; PluralDisplayName = 'Recommendations'; LowerSingularDisplayName = 'Recommendations'; LowerPluralDisplayName = 'Recommendations'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/advisorsecurity.svg'; Links = '[{"title":"Get consistent","uri":"https://aka.ms/portalfx/designpatterns"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/all'; SingularDisplayName = 'All resources'; PluralDisplayName = 'All resources'; LowerSingularDisplayName = 'All resources'; LowerPluralDisplayName = 'All resources'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/all.svg'; Links = '[{"title":"Get consistent","uri":"https://aka.ms/portalfx/designpatterns"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/backup'; SingularDisplayName = 'Backup job'; PluralDisplayName = 'Backup job'; LowerSingularDisplayName = 'Backup job'; LowerPluralDisplayName = 'Backup job'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/backup.svg'; Links = '[{"title":"Get consistent","uri":"https://aka.ms/portalfx/designpatterns"}]'; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/advisorcost'; SingularDisplayName = 'Recommendations'; PluralDisplayName = 'Recommendations'; LowerSingularDisplayName = 'Recommendations'; LowerPluralDisplayName = 'Recommendations'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/advisorcost.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/advisoroperationalexcellence'; SingularDisplayName = 'Recommendations'; PluralDisplayName = 'Recommendations'; LowerSingularDisplayName = 'Recommendations'; LowerPluralDisplayName = 'Recommendations'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/advisoroperationalexcellence.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/advisorperformance'; SingularDisplayName = 'Recommendations'; PluralDisplayName = 'Recommendations'; LowerSingularDisplayName = 'Recommendations'; LowerPluralDisplayName = 'Recommendations'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/advisorperformance.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/advisorreliability'; SingularDisplayName = 'Recommendations'; PluralDisplayName = 'Recommendations'; LowerSingularDisplayName = 'Recommendations'; LowerPluralDisplayName = 'Recommendations'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/advisorreliability.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/advisorsecurity'; SingularDisplayName = 'Recommendations'; PluralDisplayName = 'Recommendations'; LowerSingularDisplayName = 'Recommendations'; LowerPluralDisplayName = 'Recommendations'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/advisorsecurity.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/all'; SingularDisplayName = 'All resources'; PluralDisplayName = 'All resources'; LowerSingularDisplayName = 'All resources'; LowerPluralDisplayName = 'All resources'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/all.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/backup'; SingularDisplayName = 'Backup job'; PluralDisplayName = 'Backup job'; LowerSingularDisplayName = 'Backup job'; LowerPluralDisplayName = 'Backup job'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/backup.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/computehubmain'; SingularDisplayName = 'Compute infrastructure'; PluralDisplayName = 'Compute infrastructure'; LowerSingularDisplayName = 'compute infrastructure'; LowerPluralDisplayName = 'compute infrastructure'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/computehubmain.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/healthevents'; SingularDisplayName = 'Health events'; PluralDisplayName = 'Health events'; LowerSingularDisplayName = 'Health events'; LowerPluralDisplayName = 'Health events'; IsPreview = 'false'; Description = 'No resource has availability related health events.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/healthevents.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/linuxostype'; SingularDisplayName = 'Linux OS'; PluralDisplayName = 'Linux OS'; LowerSingularDisplayName = 'Linux OS'; LowerPluralDisplayName = 'Linux OS'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/linuxostype.svg'; Links = '[{"title":"Get consistent","uri":"https://aka.ms/portalfx/designpatterns"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/microsoftdefenderfreetrialsubscription'; SingularDisplayName = 'Microsoft defender'; PluralDisplayName = 'Microsoft defender'; LowerSingularDisplayName = 'Microsoft defender'; LowerPluralDisplayName = 'Microsoft defender'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/microsoftdefenderfreetrialsubscription.svg'; Links = '[{"title":"Get consistent","uri":"https://aka.ms/portalfx/designpatterns"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/microsoftdefenderstandardsubscription'; SingularDisplayName = 'Microsoft defender'; PluralDisplayName = 'Microsoft defender'; LowerSingularDisplayName = 'Microsoft defender'; LowerPluralDisplayName = 'Microsoft defender'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/microsoftdefenderstandardsubscription.svg'; Links = '[{"title":"Get consistent","uri":"https://aka.ms/portalfx/designpatterns"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/outages'; SingularDisplayName = 'Outages'; PluralDisplayName = 'Outages'; LowerSingularDisplayName = 'Outages'; LowerPluralDisplayName = 'Outages'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/outages.svg'; Links = '[{"title":"Get consistent","uri":"https://aka.ms/portalfx/designpatterns"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/powerstatedeallocated'; SingularDisplayName = 'Power states'; PluralDisplayName = 'Power states'; LowerSingularDisplayName = 'Power states'; LowerPluralDisplayName = 'Power states'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/powerstatedeallocated.svg'; Links = '[{"title":"Get consistent","uri":"https://aka.ms/portalfx/designpatterns"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/powerstaterunning'; SingularDisplayName = 'Power states'; PluralDisplayName = 'Power states'; LowerSingularDisplayName = 'Power states'; LowerPluralDisplayName = 'Power states'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/powerstaterunning.svg'; Links = '[{"title":"Get consistent","uri":"https://aka.ms/portalfx/designpatterns"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/powerstatestopped'; SingularDisplayName = 'Power states'; PluralDisplayName = 'Power states'; LowerSingularDisplayName = 'Power states'; LowerPluralDisplayName = 'Power states'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/powerstatestopped.svg'; Links = '[{"title":"Get consistent","uri":"https://aka.ms/portalfx/designpatterns"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/provisioningstatefailedresources'; SingularDisplayName = 'Provisioning states'; PluralDisplayName = 'Provisioning states'; LowerSingularDisplayName = 'Provisioning states'; LowerPluralDisplayName = 'Provisioning states'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/provisioningstatefailedresources.svg'; Links = '[{"title":"Get consistent","uri":"https://aka.ms/portalfx/designpatterns"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/provisioningstatesucceededresources'; SingularDisplayName = 'Provisioning states'; PluralDisplayName = 'Provisioning states'; LowerSingularDisplayName = 'Provisioning states'; LowerPluralDisplayName = 'Provisioning states'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/provisioningstatesucceededresources.svg'; Links = '[{"title":"Get consistent","uri":"https://aka.ms/portalfx/designpatterns"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/windowsostype'; SingularDisplayName = 'Windows OS'; PluralDisplayName = 'Windows OS'; LowerSingularDisplayName = 'Windows OS'; LowerPluralDisplayName = 'Windows OS'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/windowsostype.svg'; Links = '[{"title":"Get consistent","uri":"https://aka.ms/portalfx/designpatterns"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.computeschedule/autoactions'; SingularDisplayName = 'Microsoft.ComputeSchedule auto action'; PluralDisplayName = 'Microsoft.ComputeSchedule auto actions'; LowerSingularDisplayName = 'microsoft.computeschedule auto action'; LowerPluralDisplayName = 'microsoft.computeschedule auto actions'; IsPreview = 'false'; Description = 'The auto action resource'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computeschedule/autoactions.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/linuxostype'; SingularDisplayName = 'Linux OS'; PluralDisplayName = 'Linux OS'; LowerSingularDisplayName = 'Linux OS'; LowerPluralDisplayName = 'Linux OS'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/linuxostype.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/microsoftdefenderfreetrialsubscription'; SingularDisplayName = 'Microsoft defender'; PluralDisplayName = 'Microsoft defender'; LowerSingularDisplayName = 'Microsoft defender'; LowerPluralDisplayName = 'Microsoft defender'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/microsoftdefenderfreetrialsubscription.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/microsoftdefenderstandardsubscription'; SingularDisplayName = 'Microsoft defender'; PluralDisplayName = 'Microsoft defender'; LowerSingularDisplayName = 'Microsoft defender'; LowerPluralDisplayName = 'Microsoft defender'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/microsoftdefenderstandardsubscription.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/outages'; SingularDisplayName = 'Outages'; PluralDisplayName = 'Outages'; LowerSingularDisplayName = 'Outages'; LowerPluralDisplayName = 'Outages'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/outages.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/powerstatedeallocated'; SingularDisplayName = 'Power states'; PluralDisplayName = 'Power states'; LowerSingularDisplayName = 'Power states'; LowerPluralDisplayName = 'Power states'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/powerstatedeallocated.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/powerstaterunning'; SingularDisplayName = 'Power states'; PluralDisplayName = 'Power states'; LowerSingularDisplayName = 'Power states'; LowerPluralDisplayName = 'Power states'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/powerstaterunning.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/powerstatestopped'; SingularDisplayName = 'Power states'; PluralDisplayName = 'Power states'; LowerSingularDisplayName = 'Power states'; LowerPluralDisplayName = 'Power states'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/powerstatestopped.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/provisioningstatefailedresources'; SingularDisplayName = 'Provisioning states'; PluralDisplayName = 'Provisioning states'; LowerSingularDisplayName = 'Provisioning states'; LowerPluralDisplayName = 'Provisioning states'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/provisioningstatefailedresources.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/provisioningstatesucceededresources'; SingularDisplayName = 'Provisioning states'; PluralDisplayName = 'Provisioning states'; LowerSingularDisplayName = 'Provisioning states'; LowerPluralDisplayName = 'Provisioning states'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/provisioningstatesucceededresources.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.computehub/windowsostype'; SingularDisplayName = 'Windows OS'; PluralDisplayName = 'Windows OS'; LowerSingularDisplayName = 'Windows OS'; LowerPluralDisplayName = 'Windows OS'; IsPreview = 'false'; Description = 'Create VMs that scale, optimize cost and performance, and support a mix of sizes, zones, and regions?all easily managed in one place.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computehub/windowsostype.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.computeschedule/autoactions'; SingularDisplayName = 'Automatic Action'; PluralDisplayName = 'Automatic Actions'; LowerSingularDisplayName = 'automatic action'; LowerPluralDisplayName = 'automatic actions'; IsPreview = 'false'; Description = 'Automatic actions allow you to schedule a Start, Stop, or Hibernate on your virtual machines.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computeschedule/autoactions.svg'; Links = '[{"title":"Learn more","uri":"https://go.microsoft.com/fwlink/?linkid=2275442"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.computeschedule/autoactions/occurrences'; SingularDisplayName = 'Microsoft.ComputeSchedule auto actions occurrence'; PluralDisplayName = 'Microsoft.ComputeSchedule auto actions occurrences'; LowerSingularDisplayName = 'microsoft.computeschedule auto actions occurrence'; LowerPluralDisplayName = 'microsoft.computeschedule auto actions occurrences'; IsPreview = 'false'; Description = 'Concrete proxy resource types can be created by aliasing this type using a specific property type.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.computeschedule/autoactions/occurrences.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.confidentialledger/ledgers'; SingularDisplayName = 'Confidential Ledger'; PluralDisplayName = 'Confidential Ledgers'; LowerSingularDisplayName = 'confidential ledger'; LowerPluralDisplayName = 'confidential ledgers'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.confidentialledger/ledgers.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.confidentialledger/managedccfs'; SingularDisplayName = 'Managed CCF App'; PluralDisplayName = 'Managed CCF Apps'; LowerSingularDisplayName = 'managed ccf app'; LowerPluralDisplayName = 'managed ccf apps'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.confidentialledger/managedccfs.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.confluent/agreements'; SingularDisplayName = 'Microsoft.Confluent agreement'; PluralDisplayName = 'Microsoft.Confluent agreements'; LowerSingularDisplayName = 'microsoft.confluent agreement'; LowerPluralDisplayName = 'microsoft.confluent agreements'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.confluent/agreements.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.confluent/organizations'; SingularDisplayName = 'Confluent organization'; PluralDisplayName = 'Apache Kafka? & Apache Flink? on Confluent Cloud? - An Azure Native ISV Service'; LowerSingularDisplayName = 'Confluent organization'; LowerPluralDisplayName = 'Apache Kafka? & Apache Flink? on Confluent Cloud? - An Azure Native ISV Service'; IsPreview = 'false'; Description = 'Create a Confluent organization using Azure Marketplace with Pay as you Go or Commits'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.confluent/organizations.svg'; Links = '[{"title":"Get started with Pay as you Go","uri":"https://docs.confluent.io/cloud/current/billing/ccloud-azure-payg.html"},{"title":"Get started with Commits","uri":"https://docs.confluent.io/cloud/current/billing/ccloud-azure-ubb.html"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.connectedcache/cachenodes'; SingularDisplayName = 'Connected Cache for ISP (early preview)'; PluralDisplayName = 'Connected Cache for ISPs (early preview)'; LowerSingularDisplayName = 'Connected Cache for ISP (early preview)'; LowerPluralDisplayName = 'Microsoft Connected Cache for Internet Service Providers (early preview)'; IsPreview = 'true'; Description = 'Software-only caching solution that delivers Microsoft static content within operator networks for ISP early preview customers.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.connectedcache/cachenodes.svg'; Links = '[{"title":"Learn more","uri":"https://learn.microsoft.com/windows/deployment/do/waas-microsoft-connected-cache"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.connectedcache/enterprisecustomers'; SingularDisplayName = 'Connected Cache for Enterprise & Education (early preview)'; PluralDisplayName = 'Connected Caches for Enterprise & Education (early preview)'; LowerSingularDisplayName = 'Connected Cache for Enterprise & Education (early preview)'; LowerPluralDisplayName = 'Microsoft Connected Cache Enterprise (early preview)'; IsPreview = 'true'; Description = 'Software-only caching solution that delivers Microsoft static content within operator networks for Enterprise early preview customers.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.connectedcache/enterprisecustomers.svg'; Links = '[{"title":"Learn more","uri":"https://learn.microsoft.com/windows/deployment/do/waas-microsoft-connected-cache"}]'; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.connectedcache/cachenodes'; SingularDisplayName = 'Connected Cache for ISP'; PluralDisplayName = 'Connected Cache for ISPs'; LowerSingularDisplayName = 'Connected Cache for ISP'; LowerPluralDisplayName = 'Microsoft Connected Cache for Internet Service Providers'; IsPreview = 'false'; Description = 'Software-only caching solution that delivers Microsoft static content within operator networks.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.connectedcache/cachenodes.svg'; Links = '[{"title":"Learn more","uri":"https://learn.microsoft.com/windows/deployment/do/waas-microsoft-connected-cache"}]'; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.connectedcache/enterprisecustomers'; SingularDisplayName = 'Connected Cache for Enterprise & Education'; PluralDisplayName = 'Connected Caches for Enterprise & Education'; LowerSingularDisplayName = 'Connected Cache for Enterprise & Education'; LowerPluralDisplayName = 'Microsoft Connected Cache Enterprise'; IsPreview = 'false'; Description = 'Software-only caching solution that delivers Microsoft static content within operator networks.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.connectedcache/enterprisecustomers.svg'; Links = '[{"title":"Learn more","uri":"https://learn.microsoft.com/windows/deployment/do/waas-microsoft-connected-cache"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.connectedcache/enterprisemcccustomers'; SingularDisplayName = 'Connected Cache for Enterprise & Education'; PluralDisplayName = 'Connected Caches for Enterprise & Education'; LowerSingularDisplayName = 'Connected Cache for Enterprise & Education'; LowerPluralDisplayName = 'Microsoft Connected Caches for Enterprise & Education'; IsPreview = 'false'; Description = 'Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.connectedcache/enterprisemcccustomers.svg'; Links = '[{"title":"Learn more","uri":"https://learn.microsoft.com/windows/deployment/do/waas-microsoft-connected-cache"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes'; SingularDisplayName = 'MCC CacheNode for Enterprise'; PluralDisplayName = 'MCC CacheNodes for Enterprise'; LowerSingularDisplayName = 'MCC CacheNode for Enterprise'; LowerPluralDisplayName = 'MCC CacheNodes for Enterprise'; IsPreview = 'false'; Description = 'Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.connectedcache/ispcustomers'; SingularDisplayName = 'Connected Cache for ISP'; PluralDisplayName = 'Microsoft Connected Cache for Internet Service Providers'; LowerSingularDisplayName = 'Connected Cache for ISP'; LowerPluralDisplayName = 'Microsoft Connected Cache for Internet Service Providers'; IsPreview = 'false'; Description = 'Software-only caching solution that delivers Microsoft static content within operator networks.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.connectedcache/ispcustomers.svg'; Links = '[{"title":"Learn more","uri":"https://learn.microsoft.com/windows/deployment/do/waas-microsoft-connected-cache"}]'; } @@ -623,13 +637,14 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.customerlockbox/tenantoptedin'; SingularDisplayName = 'Microsoft.CustomerLockbox tenant opted in'; PluralDisplayName = 'Microsoft.CustomerLockbox tenant opted in'; LowerSingularDisplayName = 'microsoft.customerlockbox tenant opted in'; LowerPluralDisplayName = 'microsoft.customerlockbox tenant opted in'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.customerlockbox/tenantoptedin.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.customproviders/associations'; SingularDisplayName = 'Microsoft.CustomProviders association'; PluralDisplayName = 'Microsoft.CustomProviders associations'; LowerSingularDisplayName = 'microsoft.customproviders association'; LowerPluralDisplayName = 'microsoft.customproviders associations'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.customproviders/associations.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.customproviders/resourceproviders'; SingularDisplayName = 'Microsoft.CustomProviders resource provider'; PluralDisplayName = 'Microsoft.CustomProviders resource providers'; LowerSingularDisplayName = 'microsoft.customproviders resource provider'; LowerPluralDisplayName = 'microsoft.customproviders resource providers'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.customproviders/resourceproviders.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.dashboard/dashboards'; SingularDisplayName = 'Azure Monitor Dashboard'; PluralDisplayName = 'Azure Monitor Dashboard'; LowerSingularDisplayName = 'Azure Monitor Dashboard'; LowerPluralDisplayName = 'Azure Monitor Dashboard'; IsPreview = 'false'; Description = 'Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.dashboard/dashboards.svg'; Links = '[{"title":"Learn more","uri":"https://learn.microsoft.com/azure/managed-grafana/"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.dashboard/grafana'; SingularDisplayName = 'Azure Managed Grafana'; PluralDisplayName = 'Azure Managed Grafana'; LowerSingularDisplayName = 'Azure Managed Grafana'; LowerPluralDisplayName = 'Azure Managed Grafana'; IsPreview = 'false'; Description = 'Run a fully managed instance of Grafana that''s automatically connected to your Azure resources.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.dashboard/grafana.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.dataaccelerator/indexclusters'; SingularDisplayName = 'Microsoft.DataAccelerator index cluster'; PluralDisplayName = 'Microsoft.DataAccelerator index clusters'; LowerSingularDisplayName = 'microsoft.dataaccelerator index cluster'; LowerPluralDisplayName = 'microsoft.dataaccelerator index clusters'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.dataaccelerator/indexclusters.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.databasefleetmanager/fleets'; SingularDisplayName = 'Database fleet manager'; PluralDisplayName = 'Database fleet managers'; LowerSingularDisplayName = 'database fleet manager'; LowerPluralDisplayName = 'database fleet managers'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.databasefleetmanager/fleets.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.databasefleetmanager/fleets/fleetspaces'; SingularDisplayName = 'Fleetspaces'; PluralDisplayName = 'Fleetspaces'; LowerSingularDisplayName = 'fleetspaces'; LowerPluralDisplayName = 'fleetspaces'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.databasefleetmanager/fleets/fleetspaces.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.databasefleetmanager/fleets/fleetspaces/databases'; SingularDisplayName = 'Fleet Managed Database'; PluralDisplayName = 'Fleet Managed Databases'; LowerSingularDisplayName = 'fleet managed database'; LowerPluralDisplayName = 'fleet managed databases'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.databasefleetmanager/fleets/fleetspaces/databases.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.databasefleetmanager/fleets/fleetspaces/databases'; SingularDisplayName = 'Fleet managed database'; PluralDisplayName = 'Fleet managed databases'; LowerSingularDisplayName = 'fleet managed database'; LowerPluralDisplayName = 'fleet managed databases'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.databasefleetmanager/fleets/fleetspaces/databases.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.databasefleetmanager/fleets/tiers'; SingularDisplayName = 'tier'; PluralDisplayName = 'Tiers'; LowerSingularDisplayName = 'tier'; LowerPluralDisplayName = 'tiers'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.databasefleetmanager/fleets/tiers.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.databasewatcher/watchers'; SingularDisplayName = 'Database watcher'; PluralDisplayName = 'Database watchers'; LowerSingularDisplayName = 'database watcher'; LowerPluralDisplayName = 'database watchers'; IsPreview = 'false'; Description = 'Database watcher is a managed monitoring solution for database services in the Azure SQL family. Create a watcher to monitor your Azure SQL estate in depth and with low latency.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.databasewatcher/watchers.svg'; Links = '[{"title":"Overview","uri":"https://aka.ms/portalfx/designpatterns"},{"title":"Get started","uri":"https://aka.ms/portalfx/browse"}]'; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.databasewatcher/watchers'; SingularDisplayName = 'Database watcher'; PluralDisplayName = 'Database watchers'; LowerSingularDisplayName = 'database watcher'; LowerPluralDisplayName = 'database watchers'; IsPreview = 'false'; Description = 'Database watcher is a managed monitoring solution for database services in the Azure SQL family. Create a watcher to monitor your Azure SQL estate in depth and with low latency.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.databasewatcher/watchers.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.databox/jobs'; SingularDisplayName = 'Azure Data Box'; PluralDisplayName = 'Azure Data Box'; LowerSingularDisplayName = 'azure data box'; LowerPluralDisplayName = 'azure data box'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.databox/jobs.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.databoxedge/databoxedgedevices'; SingularDisplayName = 'Azure Stack Edge / Data Box Gateway'; PluralDisplayName = 'Azure Stack Edge / Data Box Gateway'; LowerSingularDisplayName = 'azure stack edge / data box gateway'; LowerPluralDisplayName = 'azure stack edge / data box gateway'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.databoxedge/databoxedgedevices.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.databricks/accessconnectors'; SingularDisplayName = 'Access Connector for Azure Databricks'; PluralDisplayName = 'Access Connector for Azure Databricks'; LowerSingularDisplayName = 'access connector for azure databricks'; LowerPluralDisplayName = 'access connectors for azure databricks'; IsPreview = 'false'; Description = 'Unity Catalog provides unified governance for all data and AI assets in your Lakehouse. Unity Catalog can be configured to use an Azure managed identity to access storage containers on behalf of Unity Catalog users. Managed identities provide an identity for applications to use when they connect to resources that support Microsoft Entra ID authentication.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.databricks/accessconnectors.svg'; Links = '[{"title":"Documentation","uri":"https://go.microsoft.com/fwlink/?linkid=2281480"}]'; } @@ -662,6 +677,9 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.datareplication/replicationvaults/jobs'; SingularDisplayName = 'Microsoft.DataReplication replication vaults job'; PluralDisplayName = 'Microsoft.DataReplication replication vaults jobs'; LowerSingularDisplayName = 'microsoft.datareplication replication vaults job'; LowerPluralDisplayName = 'microsoft.datareplication replication vaults jobs'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.datareplication/replicationvaults/jobs.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.datareplication/replicationvaults/jobs/operations'; SingularDisplayName = 'Microsoft.DataReplication replication vaults jobs operation'; PluralDisplayName = 'Microsoft.DataReplication replication vaults jobs operations'; LowerSingularDisplayName = 'microsoft.datareplication replication vaults jobs operation'; LowerPluralDisplayName = 'microsoft.datareplication replication vaults jobs operations'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.datareplication/replicationvaults/jobs/operations.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.datareplication/replicationvaults/operations'; SingularDisplayName = 'Microsoft.DataReplication replication vaults operation'; PluralDisplayName = 'Microsoft.DataReplication replication vaults operations'; LowerSingularDisplayName = 'microsoft.datareplication replication vaults operation'; LowerPluralDisplayName = 'microsoft.datareplication replication vaults operations'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.datareplication/replicationvaults/operations.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.datareplication/replicationvaults/privateendpointconnectionproxies'; SingularDisplayName = 'Microsoft.DataReplication replication vaults private endpoint connection proxy'; PluralDisplayName = 'Microsoft.DataReplication replication vaults private endpoint connection proxies'; LowerSingularDisplayName = 'microsoft.datareplication replication vaults private endpoint connection proxy'; LowerPluralDisplayName = 'microsoft.datareplication replication vaults private endpoint connection proxies'; IsPreview = 'false'; Description = 'Represents private endpoint connection proxy request.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.datareplication/replicationvaults/privateendpointconnectionproxies.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.datareplication/replicationvaults/privateendpointconnections'; SingularDisplayName = 'Microsoft.DataReplication replication vaults private endpoint connection'; PluralDisplayName = 'Microsoft.DataReplication replication vaults private endpoint connections'; LowerSingularDisplayName = 'microsoft.datareplication replication vaults private endpoint connection'; LowerPluralDisplayName = 'microsoft.datareplication replication vaults private endpoint connections'; IsPreview = 'false'; Description = 'Represents private endpoint connection.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.datareplication/replicationvaults/privateendpointconnections.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.datareplication/replicationvaults/privatelinkresources'; SingularDisplayName = 'Microsoft.DataReplication replication vaults private link resource'; PluralDisplayName = 'Microsoft.DataReplication replication vaults private link resources'; LowerSingularDisplayName = 'microsoft.datareplication replication vaults private link resource'; LowerPluralDisplayName = 'microsoft.datareplication replication vaults private link resources'; IsPreview = 'false'; Description = 'Represents private link resource.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.datareplication/replicationvaults/privatelinkresources.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.datareplication/replicationvaults/protecteditems'; SingularDisplayName = 'Microsoft.DataReplication replication vaults protected item'; PluralDisplayName = 'Microsoft.DataReplication replication vaults protected items'; LowerSingularDisplayName = 'microsoft.datareplication replication vaults protected item'; LowerPluralDisplayName = 'microsoft.datareplication replication vaults protected items'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.datareplication/replicationvaults/protecteditems.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.datareplication/replicationvaults/protecteditems/operations'; SingularDisplayName = 'Microsoft.DataReplication replication vaults protected items operation'; PluralDisplayName = 'Microsoft.DataReplication replication vaults protected items operations'; LowerSingularDisplayName = 'microsoft.datareplication replication vaults protected items operation'; LowerPluralDisplayName = 'microsoft.datareplication replication vaults protected items operations'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.datareplication/replicationvaults/protecteditems/operations.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.datareplication/replicationvaults/protecteditems/recoverypoints'; SingularDisplayName = 'Microsoft.DataReplication replication vaults protected items recovery point'; PluralDisplayName = 'Microsoft.DataReplication replication vaults protected items recovery points'; LowerSingularDisplayName = 'microsoft.datareplication replication vaults protected items recovery point'; LowerPluralDisplayName = 'microsoft.datareplication replication vaults protected items recovery points'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.datareplication/replicationvaults/protecteditems/recoverypoints.svg'; Links = ''; } @@ -673,7 +691,7 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.dbformariadb/servers'; SingularDisplayName = 'Azure Database for MariaDB server'; PluralDisplayName = 'Azure Database for MariaDB servers'; LowerSingularDisplayName = 'Azure Database for MariaDB server'; LowerPluralDisplayName = 'Azure Database for MariaDB servers'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.dbformariadb/servers.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.dbformysql/flexibleservers'; SingularDisplayName = 'Azure Database for MySQL flexible server'; PluralDisplayName = 'Azure Database for MySQL flexible servers'; LowerSingularDisplayName = 'Azure Database for MySQL flexible server'; LowerPluralDisplayName = 'Azure Database for MySQL flexible servers'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.dbformysql/flexibleservers.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.dbformysql/servers'; SingularDisplayName = 'MySQL server'; PluralDisplayName = 'MySQL servers'; LowerSingularDisplayName = 'Azure Database for MySQL server'; LowerPluralDisplayName = 'Azure Database for MySQL servers'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.dbformysql/servers.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.dbforpostgresql/flexibleservers'; SingularDisplayName = 'Azure Database for PostgreSQL - Flexible Server'; PluralDisplayName = 'Azure Database for PostgreSQL - Flexible Servers'; LowerSingularDisplayName = 'Azure Database for PostgreSQL - Flexible Server'; LowerPluralDisplayName = 'Azure Database for PostgreSQL - Flexible Servers'; IsPreview = 'false'; Description = 'Azure Database for PostgreSQL flexible server is a fully managed Azure Database service based on the PostgreSQL open source relational database, optimized for performance, security and cost efficiency.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.dbforpostgresql/flexibleservers.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.dbforpostgresql/flexibleservers'; SingularDisplayName = 'Azure Database for PostgreSQL flexible server'; PluralDisplayName = 'Azure Database for PostgreSQL flexible servers'; LowerSingularDisplayName = 'Azure Database for PostgreSQL flexible server'; LowerPluralDisplayName = 'Azure Database for PostgreSQL flexible servers'; IsPreview = 'false'; Description = 'Azure Database for PostgreSQL flexible server is a fully managed Azure Database service based on the PostgreSQL open source relational database, optimized for performance, security and cost efficiency.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.dbforpostgresql/flexibleservers.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.dbforpostgresql/servergroupsv2'; SingularDisplayName = 'Azure Cosmos DB for PostgreSQL Cluster'; PluralDisplayName = 'Azure Cosmos DB for PostgreSQL Cluster'; LowerSingularDisplayName = 'Azure Cosmos DB for PostgreSQL Cluster'; LowerPluralDisplayName = 'Azure Cosmos DB for PostgreSQL Cluster'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.dbforpostgresql/servergroupsv2.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.dbforpostgresql/servers'; SingularDisplayName = 'PostgreSQL server'; PluralDisplayName = 'PostgreSQL servers'; LowerSingularDisplayName = 'Azure Database for PostgreSQL server'; LowerPluralDisplayName = 'Azure Database for PostgreSQL servers'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.dbforpostgresql/servers.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.delegatednetwork/controller'; SingularDisplayName = 'Microsoft.DelegatedNetwork controller'; PluralDisplayName = 'Microsoft.DelegatedNetwork controller'; LowerSingularDisplayName = 'microsoft.delegatednetwork controller'; LowerPluralDisplayName = 'microsoft.delegatednetwork controller'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.delegatednetwork/controller.svg'; Links = ''; } @@ -704,6 +722,8 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.devcenter/projects/pools'; SingularDisplayName = 'Pool'; PluralDisplayName = 'Pools'; LowerSingularDisplayName = 'pool'; LowerPluralDisplayName = 'pools'; IsPreview = 'false'; Description = 'Create a dev box pool to allow developers to self-serve developer workstations using pre-approved templates and settings.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.devcenter/projects/pools.svg'; Links = '[{"title":"Learn more","uri":"https://aka.ms/pools/overview"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.developmentwindows365/developmentcloudpcdelegatedmsis'; SingularDisplayName = 'Microsoft.DevelopmentWindows365 development cloud pc delegated msi'; PluralDisplayName = 'Microsoft.DevelopmentWindows365 development cloud pc delegated msis'; LowerSingularDisplayName = 'microsoft.developmentwindows365 development cloud pc delegated msi'; LowerPluralDisplayName = 'microsoft.developmentwindows365 development cloud pc delegated msis'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.developmentwindows365/developmentcloudpcdelegatedmsis.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.devhub/iacprofiles'; SingularDisplayName = 'Infrastructure as Code Automation'; PluralDisplayName = 'Infrastructure as Code Automation'; LowerSingularDisplayName = 'IaC automation profile'; LowerPluralDisplayName = 'IaC automation profiles'; IsPreview = 'false'; Description = 'Simplify how you manage your edge infrastrucutre using industry leading processes and tools.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.devhub/iacprofiles.svg'; Links = '[{"title":"Learn more","uri":"https://aka.ms/iacdoc"}]'; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.devhub/templates'; SingularDisplayName = 'Microsoft.DevHub template'; PluralDisplayName = 'Microsoft.DevHub templates'; LowerSingularDisplayName = 'microsoft.devhub template'; LowerPluralDisplayName = 'microsoft.devhub templates'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.devhub/templates.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.devhub/templates/versions'; SingularDisplayName = 'Microsoft.DevHub templates version'; PluralDisplayName = 'Microsoft.DevHub templates versions'; LowerSingularDisplayName = 'microsoft.devhub templates version'; LowerPluralDisplayName = 'microsoft.devhub templates versions'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.devhub/templates/versions.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.devhub/workflows'; SingularDisplayName = 'Microsoft.DevHub workflow'; PluralDisplayName = 'Microsoft.DevHub workflows'; LowerSingularDisplayName = 'microsoft.devhub workflow'; LowerPluralDisplayName = 'microsoft.devhub workflows'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.devhub/workflows.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceonboarding/discoveryservices'; SingularDisplayName = 'Microsoft.DeviceOnboarding discovery service'; PluralDisplayName = 'Microsoft.DeviceOnboarding discovery services'; LowerSingularDisplayName = 'microsoft.deviceonboarding discovery service'; LowerPluralDisplayName = 'microsoft.deviceonboarding discovery services'; IsPreview = 'false'; Description = 'A discovery resource.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceonboarding/discoveryservices.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceonboarding/discoveryservices/ownershipvoucherpublickeys'; SingularDisplayName = 'Microsoft.DeviceOnboarding discovery services ownership voucher public key'; PluralDisplayName = 'Microsoft.DeviceOnboarding discovery services ownership voucher public keys'; LowerSingularDisplayName = 'microsoft.deviceonboarding discovery services ownership voucher public key'; LowerPluralDisplayName = 'microsoft.deviceonboarding discovery services ownership voucher public keys'; IsPreview = 'false'; Description = 'Ownership voucher public key resource.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceonboarding/discoveryservices/ownershipvoucherpublickeys.svg'; Links = ''; } @@ -711,22 +731,28 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceonboarding/onboardingservices/policies'; SingularDisplayName = 'Microsoft.DeviceOnboarding onboarding services policy'; PluralDisplayName = 'Microsoft.DeviceOnboarding onboarding services policies'; LowerSingularDisplayName = 'microsoft.deviceonboarding onboarding services policy'; LowerPluralDisplayName = 'microsoft.deviceonboarding onboarding services policies'; IsPreview = 'false'; Description = 'An onboarding policy resource.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceonboarding/onboardingservices/policies.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceregistry/assetendpointprofiles'; SingularDisplayName = 'IoT Asset Endpoint Profile'; PluralDisplayName = 'IoT Asset Endpoint Profiles'; LowerSingularDisplayName = 'IoT asset endpoint profile'; LowerPluralDisplayName = 'IoT asset endpoint profiles'; IsPreview = 'false'; Description = 'Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/assetendpointprofiles.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceregistry/assets'; SingularDisplayName = 'IoT Asset'; PluralDisplayName = 'IoT Assets'; LowerSingularDisplayName = 'IoT asset'; LowerPluralDisplayName = 'IoT assets'; IsPreview = 'false'; Description = 'An asset is a physical or logical entity that represents a device, machine, system, or process. When you create an asset, it will appear here and can be managed from this table.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/assets.svg'; Links = '[{"title":"Learn more about IoT assets","uri":"https://aka.ms/azure-iot-operations-assets"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceregistry/billingcontainers'; SingularDisplayName = 'Microsoft.DeviceRegistry billing container'; PluralDisplayName = 'Microsoft.DeviceRegistry billing containers'; LowerSingularDisplayName = 'microsoft.deviceregistry billing container'; LowerPluralDisplayName = 'microsoft.deviceregistry billing containers'; IsPreview = 'false'; Description = 'billingContainer Model as Azure resource whose sole purpose is to keep track of billables resources under a subscription.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/billingcontainers.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceregistry/billingcontainers'; SingularDisplayName = 'Microsoft.DeviceRegistry billing container'; PluralDisplayName = 'Microsoft.DeviceRegistry billing containers'; LowerSingularDisplayName = 'microsoft.deviceregistry billing container'; LowerPluralDisplayName = 'microsoft.deviceregistry billing containers'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/billingcontainers.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceregistry/devices'; SingularDisplayName = 'IoT Device'; PluralDisplayName = 'IoT Devices'; LowerSingularDisplayName = 'IoT device'; LowerPluralDisplayName = 'IoT devices'; IsPreview = 'false'; Description = 'Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/devices.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceregistry/discoveredassetendpointprofiles'; SingularDisplayName = 'Microsoft.DeviceRegistry discovered asset endpoint profile'; PluralDisplayName = 'Microsoft.DeviceRegistry discovered asset endpoint profiles'; LowerSingularDisplayName = 'microsoft.deviceregistry discovered asset endpoint profile'; LowerPluralDisplayName = 'microsoft.deviceregistry discovered asset endpoint profiles'; IsPreview = 'false'; Description = 'Discovered Asset Endpoint Profile definition.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/discoveredassetendpointprofiles.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceregistry/discoveredassets'; SingularDisplayName = 'Microsoft.DeviceRegistry discovered asset'; PluralDisplayName = 'Microsoft.DeviceRegistry discovered assets'; LowerSingularDisplayName = 'microsoft.deviceregistry discovered asset'; LowerPluralDisplayName = 'microsoft.deviceregistry discovered assets'; IsPreview = 'false'; Description = 'Discovered Asset definition.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/discoveredassets.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceregistry/discoveredassetendpointprofiles'; SingularDisplayName = 'Microsoft.DeviceRegistry discovered asset endpoint profile'; PluralDisplayName = 'Microsoft.DeviceRegistry discovered asset endpoint profiles'; LowerSingularDisplayName = 'microsoft.deviceregistry discovered asset endpoint profile'; LowerPluralDisplayName = 'microsoft.deviceregistry discovered asset endpoint profiles'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/discoveredassetendpointprofiles.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceregistry/discoveredassets'; SingularDisplayName = 'Microsoft.DeviceRegistry discovered asset'; PluralDisplayName = 'Microsoft.DeviceRegistry discovered assets'; LowerSingularDisplayName = 'microsoft.deviceregistry discovered asset'; LowerPluralDisplayName = 'microsoft.deviceregistry discovered assets'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/discoveredassets.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceregistry/namespaces'; SingularDisplayName = 'Microsoft.DeviceRegistry namespace'; PluralDisplayName = 'Microsoft.DeviceRegistry namespaces'; LowerSingularDisplayName = 'microsoft.deviceregistry namespace'; LowerPluralDisplayName = 'microsoft.deviceregistry namespaces'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/namespaces.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceregistry/namespaces/assetendpointprofiles'; SingularDisplayName = 'Microsoft.DeviceRegistry namespaces asset endpoint profile'; PluralDisplayName = 'Microsoft.DeviceRegistry namespaces asset endpoint profiles'; LowerSingularDisplayName = 'microsoft.deviceregistry namespaces asset endpoint profile'; LowerPluralDisplayName = 'microsoft.deviceregistry namespaces asset endpoint profiles'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/namespaces/assetendpointprofiles.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceregistry/namespaces/assets'; SingularDisplayName = 'Microsoft.DeviceRegistry namespaces asset'; PluralDisplayName = 'Microsoft.DeviceRegistry namespaces assets'; LowerSingularDisplayName = 'microsoft.deviceregistry namespaces asset'; LowerPluralDisplayName = 'microsoft.deviceregistry namespaces assets'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/namespaces/assets.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceregistry/namespaces/devices'; SingularDisplayName = 'Microsoft.DeviceRegistry namespaces device'; PluralDisplayName = 'Microsoft.DeviceRegistry namespaces devices'; LowerSingularDisplayName = 'microsoft.deviceregistry namespaces device'; LowerPluralDisplayName = 'microsoft.deviceregistry namespaces devices'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/namespaces/devices.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceregistry/namespaces/discoveredassetendpointprofiles'; SingularDisplayName = 'Microsoft.DeviceRegistry namespaces discovered asset endpoint profile'; PluralDisplayName = 'Microsoft.DeviceRegistry namespaces discovered asset endpoint profiles'; LowerSingularDisplayName = 'microsoft.deviceregistry namespaces discovered asset endpoint profile'; LowerPluralDisplayName = 'microsoft.deviceregistry namespaces discovered asset endpoint profiles'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/namespaces/discoveredassetendpointprofiles.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceregistry/namespaces/discoveredassets'; SingularDisplayName = 'Microsoft.DeviceRegistry namespaces discovered asset'; PluralDisplayName = 'Microsoft.DeviceRegistry namespaces discovered assets'; LowerSingularDisplayName = 'microsoft.deviceregistry namespaces discovered asset'; LowerPluralDisplayName = 'microsoft.deviceregistry namespaces discovered assets'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/namespaces/discoveredassets.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceregistry/schemaregistries'; SingularDisplayName = 'IoT Schema Registry'; PluralDisplayName = 'IoT Schema Registries'; LowerSingularDisplayName = 'IoT schema registry'; LowerPluralDisplayName = 'IoT schema registries'; IsPreview = 'false'; Description = 'Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/schemaregistries.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceregistry/schemaregistries/schemas'; SingularDisplayName = 'Microsoft.DeviceRegistry schema registries schema'; PluralDisplayName = 'Microsoft.DeviceRegistry schema registries schemas'; LowerSingularDisplayName = 'microsoft.deviceregistry schema registries schema'; LowerPluralDisplayName = 'microsoft.deviceregistry schema registries schemas'; IsPreview = 'false'; Description = 'Schema definition.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/schemaregistries/schemas.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceregistry/schemaregistries/schemas/schemaversions'; SingularDisplayName = 'Microsoft.DeviceRegistry schema registries schemas schema version'; PluralDisplayName = 'Microsoft.DeviceRegistry schema registries schemas schema versions'; LowerSingularDisplayName = 'microsoft.deviceregistry schema registries schemas schema version'; LowerPluralDisplayName = 'microsoft.deviceregistry schema registries schemas schema versions'; IsPreview = 'false'; Description = 'Schema version''s definition.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceregistry/schemaregistries/schemas/schemaversions.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.devices/iothubs'; SingularDisplayName = 'IoT hub'; PluralDisplayName = 'IoT hubs'; LowerSingularDisplayName = 'IoT hub'; LowerPluralDisplayName = 'IoT hub'; IsPreview = 'false'; Description = 'Create an IoT hub to help you connect, monitor, and manage billions of your IoT assets.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.devices/iothubs.svg'; Links = '[{"title":"Learn more about IoT Hub","uri":"https://docs.microsoft.com/azure/iot-hub/about-iot-hub"},{"title":"Quickstart: send telemetry from device","uri":"https://docs.microsoft.com/azure/iot-hub/quickstart-send-telemetry-node"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.devices/provisioningservices'; SingularDisplayName = 'Azure IoT Hub Device Provisioning Service (DPS)'; PluralDisplayName = 'Azure IoT Hub Device Provisioning Services'; LowerSingularDisplayName = 'device provisioning service'; LowerPluralDisplayName = 'device provisioning services'; IsPreview = 'false'; Description = 'Use Azure IoT Hub Device Provisioning Service to automate IoT device provisioning and registration.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.devices/provisioningservices.svg'; Links = '[{"title":"Learn more about Azure IoT Hub Device Provisioning Service","uri":"https://docs.microsoft.com/azure/iot-dps/about-iot-dps"},{"title":"Quickstart: set up auto-provisioning","uri":"https://docs.microsoft.com/azure/iot-dps/quick-setup-auto-provision"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceupdate/accounts'; SingularDisplayName = 'Device Update for IoT Hub'; PluralDisplayName = 'Device Update for IoT Hubs'; LowerSingularDisplayName = 'Device Update for IoT Hub'; LowerPluralDisplayName = 'Device Update for IoT Hubs'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/accounts.svg'; Links = '[{"title":"Learn more about Device Update for IoT Hub","uri":"https://docs.microsoft.com/azure/iot-hub-device-update"},{"title":"Quickstart: create a device update account","uri":"https://docs.microsoft.com/azure/iot-hub-device-update/create-device-update-account"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceupdate/updateaccounts'; SingularDisplayName = 'Device Update Account'; PluralDisplayName = 'Device Update Accounts'; LowerSingularDisplayName = 'Device Update Account'; LowerPluralDisplayName = 'Device Update Accounts'; IsPreview = 'false'; Description = 'Device Update Accounts allow you to manage the deployment of updates to your IoT Devices.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts.svg'; Links = '[{"title":"Learn more","uri":"https://aka.ms/portalfx/designpatterns"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceupdate/updateaccounts/activedeployments'; SingularDisplayName = 'Device Update Active Deployment'; PluralDisplayName = 'Device Update Active Deployments'; LowerSingularDisplayName = 'Device Update Active Deployment'; LowerPluralDisplayName = 'Device Update Active Deployments'; IsPreview = 'false'; Description = 'Device Update Active Deployments monitor deployment of updates to your devices.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts/activedeployments.svg'; Links = '[{"title":"Learn more","uri":"https://aka.ms/portalfx/designpatterns"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceupdate/updateaccounts/agents'; SingularDisplayName = 'Device Update Agent'; PluralDisplayName = 'Device Update Agents'; LowerSingularDisplayName = 'Device Update Agent'; LowerPluralDisplayName = 'Device Update Agents'; IsPreview = 'false'; Description = 'Device Update Agents manage deployment of updates to your devices.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts/agents.svg'; Links = '[{"title":"Learn more","uri":"https://aka.ms/portalfx/designpatterns"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceupdate/updateaccounts/deployments'; SingularDisplayName = 'Device Update Deployment'; PluralDisplayName = 'Device Update Deployments'; LowerSingularDisplayName = 'Device Update Deployment'; LowerPluralDisplayName = 'Device Update Deployments'; IsPreview = 'false'; Description = 'Device Update Deployments record deployment of updates to your devices.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts/deployments.svg'; Links = '[{"title":"Learn more","uri":"https://aka.ms/portalfx/designpatterns"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceupdate/updateaccounts/deviceclasses'; SingularDisplayName = 'Device Update Device Class'; PluralDisplayName = 'Device Update Device Classes'; LowerSingularDisplayName = 'Device Update Device Class'; LowerPluralDisplayName = 'Device Update Device Classes'; IsPreview = 'false'; Description = 'Device Update Device Classes identify the best possible update for your devices based on their properties.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts/deviceclasses.svg'; Links = '[{"title":"Learn more","uri":"https://aka.ms/portalfx/designpatterns"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceupdate/updateaccounts/updates'; SingularDisplayName = 'Device Update'; PluralDisplayName = 'Device Updates'; LowerSingularDisplayName = 'Device Update'; LowerPluralDisplayName = 'Device Updates'; IsPreview = 'false'; Description = 'Device Updates represent updates to be deployed to your devices.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts/updates.svg'; Links = '[{"title":"Learn more","uri":"https://aka.ms/portalfx/designpatterns"}]'; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceupdate/updateaccounts'; SingularDisplayName = 'Device Update Account'; PluralDisplayName = 'Device Update Accounts'; LowerSingularDisplayName = 'Device Update Account'; LowerPluralDisplayName = 'Device Update Accounts'; IsPreview = 'false'; Description = 'Device Update Accounts allow you to manage the deployment of updates to your IoT Devices.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceupdate/updateaccounts/activedeployments'; SingularDisplayName = 'Device Update Active Deployment'; PluralDisplayName = 'Device Update Active Deployments'; LowerSingularDisplayName = 'Device Update Active Deployment'; LowerPluralDisplayName = 'Device Update Active Deployments'; IsPreview = 'false'; Description = 'Device Update Active Deployments monitor deployment of updates to your devices.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts/activedeployments.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceupdate/updateaccounts/agents'; SingularDisplayName = 'Device Update Agent'; PluralDisplayName = 'Device Update Agents'; LowerSingularDisplayName = 'Device Update Agent'; LowerPluralDisplayName = 'Device Update Agents'; IsPreview = 'false'; Description = 'Device Update Agents manage deployment of updates to your devices.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts/agents.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceupdate/updateaccounts/deployments'; SingularDisplayName = 'Device Update Deployment'; PluralDisplayName = 'Device Update Deployments'; LowerSingularDisplayName = 'Device Update Deployment'; LowerPluralDisplayName = 'Device Update Deployments'; IsPreview = 'false'; Description = 'Device Update Deployments record deployment of updates to your devices.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts/deployments.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceupdate/updateaccounts/deviceclasses'; SingularDisplayName = 'Device Update Device Class'; PluralDisplayName = 'Device Update Device Classes'; LowerSingularDisplayName = 'Device Update Device Class'; LowerPluralDisplayName = 'Device Update Device Classes'; IsPreview = 'false'; Description = 'Device Update Device Classes identify the best possible update for your devices based on their properties.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts/deviceclasses.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.deviceupdate/updateaccounts/updates'; SingularDisplayName = 'Device Update'; PluralDisplayName = 'Device Updates'; LowerSingularDisplayName = 'Device Update'; LowerPluralDisplayName = 'Device Updates'; IsPreview = 'false'; Description = 'Device Updates represent updates to be deployed to your devices.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.deviceupdate/updateaccounts/updates.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.devops/pipelines'; SingularDisplayName = 'Microsoft.DevOps pipeline'; PluralDisplayName = 'Microsoft.DevOps pipelines'; LowerSingularDisplayName = 'microsoft.devops pipeline'; LowerPluralDisplayName = 'microsoft.devops pipelines'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.devops/pipelines.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.devopsinfrastructure/pools'; SingularDisplayName = 'Managed DevOps Pool'; PluralDisplayName = 'Managed DevOps Pools'; LowerSingularDisplayName = 'Managed DevOps Pool'; LowerPluralDisplayName = 'Managed DevOps Pools'; IsPreview = 'false'; Description = 'Managed DevOps Pools that meet your team needs.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.devopsinfrastructure/pools.svg'; Links = '[{"title":"Learn more","uri":"https://aka.ms/mdp-documentation"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.devspaces/controllers'; SingularDisplayName = 'Microsoft.DevSpaces controller'; PluralDisplayName = 'Microsoft.DevSpaces controllers'; LowerSingularDisplayName = 'microsoft.devspaces controller'; LowerPluralDisplayName = 'microsoft.devspaces controllers'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.devspaces/controllers.svg'; Links = ''; } @@ -738,15 +764,16 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.digitaltwins/digitaltwinsinstances'; SingularDisplayName = 'Azure Digital Twins'; PluralDisplayName = 'Azure Digital Twins'; LowerSingularDisplayName = 'Azure Digital Twins'; LowerPluralDisplayName = 'Azure Digital Twins'; IsPreview = 'false'; Description = 'Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.digitaltwins/digitaltwinsinstances.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.documentdb/cassandraclusters'; SingularDisplayName = 'Azure Managed Instance for Apache Cassandra'; PluralDisplayName = 'Azure Managed Instance for Apache Cassandra'; LowerSingularDisplayName = 'Azure Managed Instance for Apache Cassandra'; LowerPluralDisplayName = 'Azure Managed Instance for Apache Cassandra'; IsPreview = 'false'; Description = 'Create a Microsoft Azure Managed Instance for Apache Cassandra'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.documentdb/cassandraclusters.svg'; Links = '[{"title":"Try now","uri":"https://aka.ms/AzureMIApacheCassandra"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.documentdb/databaseaccounts'; SingularDisplayName = 'Cosmos DB account'; PluralDisplayName = 'Cosmos DB accounts'; LowerSingularDisplayName = 'Azure Cosmos DB account'; LowerPluralDisplayName = 'Azure Cosmos DB accounts'; IsPreview = 'false'; Description = 'Create a globally distributed, multi-model, fully managed database using API of your choice. Or try it for free, up to 20k RU/s, for 30 days with unlimited renewal.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.documentdb/databaseaccounts.svg'; Links = '[{"title":"Try now","uri":"https://aka.ms/trycosmosdb"}]'; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.documentdb/fleets'; SingularDisplayName = 'Cosmos DB Fleet'; PluralDisplayName = 'Cosmos DB Fleets'; LowerSingularDisplayName = 'Cosmos DB Fleet'; LowerPluralDisplayName = 'Cosmos DB Fleets'; IsPreview = 'false'; Description = 'Cosmos DB Fleet description goes here'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.documentdb/fleets.svg'; Links = '[{"title":"Cosmos DB Fleet learn more link","uri":"https://aka.ms/cosmosfleet"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.documentdb/mongoclusters'; SingularDisplayName = 'Azure Cosmos DB for MongoDB (vCore)'; PluralDisplayName = 'Azure Cosmos DB for MongoDB (vCore)'; LowerSingularDisplayName = 'Azure Cosmos DB for MongoDB (vCore)'; LowerPluralDisplayName = 'Azure Cosmos DB for MongoDB (vCore)'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.documentdb/mongoclusters.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.documentdb/throughputpools'; SingularDisplayName = 'Microsoft.DocumentDB throughput pool'; PluralDisplayName = 'Microsoft.DocumentDB throughput pools'; LowerSingularDisplayName = 'microsoft.documentdb throughput pool'; LowerPluralDisplayName = 'microsoft.documentdb throughput pools'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.documentdb/throughputpools.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.documentdb/throughputpools/throughputpoolaccounts'; SingularDisplayName = 'Microsoft.DocumentDB throughput pools throughput pool account'; PluralDisplayName = 'Microsoft.DocumentDB throughput pools throughput pool accounts'; LowerSingularDisplayName = 'microsoft.documentdb throughput pools throughput pool account'; LowerPluralDisplayName = 'microsoft.documentdb throughput pools throughput pool accounts'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.documentdb/throughputpools/throughputpoolaccounts.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.domainregistration/domains'; SingularDisplayName = 'App Service Domain'; PluralDisplayName = 'App Service Domains'; LowerSingularDisplayName = 'App Service domain'; LowerPluralDisplayName = 'App Service domains'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.domainregistration/domains.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.domainregistration/topleveldomains'; SingularDisplayName = 'Microsoft.DomainRegistration top level domain'; PluralDisplayName = 'Microsoft.DomainRegistration top level domains'; LowerSingularDisplayName = 'microsoft.domainregistration top level domain'; LowerPluralDisplayName = 'microsoft.domainregistration top level domains'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.domainregistration/topleveldomains.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.durabletask/namespaces'; SingularDisplayName = 'Durable Task Scheduler'; PluralDisplayName = 'Durable Task Schedulers'; LowerSingularDisplayName = 'durable task managed backend'; LowerPluralDisplayName = 'durable task managed backends'; IsPreview = 'false'; Description = 'A Durable Task Scheduler namespace resource'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.durabletask/namespaces.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.durabletask/namespaces'; SingularDisplayName = 'Microsoft.DurableTask namespace'; PluralDisplayName = 'Microsoft.DurableTask namespaces'; LowerSingularDisplayName = 'microsoft.durabletask namespace'; LowerPluralDisplayName = 'microsoft.durabletask namespaces'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.durabletask/namespaces.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.durabletask/namespaces/taskhubs'; SingularDisplayName = 'Task Hub'; PluralDisplayName = 'Task Hubs'; LowerSingularDisplayName = 'task hub'; LowerPluralDisplayName = 'task hubs'; IsPreview = 'false'; Description = 'A Task Hub resource belonging to the namespace'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.durabletask/namespaces/taskhubs.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.durabletask/schedulers'; SingularDisplayName = 'Durable Task Scheduler'; PluralDisplayName = 'Durable Task Schedulers'; LowerSingularDisplayName = 'durable task managed backend'; LowerPluralDisplayName = 'durable task managed backends'; IsPreview = 'false'; Description = 'A Durable Task Scheduler resource'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.durabletask/schedulers.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.durabletask/schedulers/taskhubs'; SingularDisplayName = 'Task Hub'; PluralDisplayName = 'Task Hubs'; LowerSingularDisplayName = 'task hub'; LowerPluralDisplayName = 'task hubs'; IsPreview = 'false'; Description = 'A Task Hub resource belonging to the scheduler'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.durabletask/schedulers/taskhubs.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.durabletask/schedulers'; SingularDisplayName = 'Durable Task Scheduler'; PluralDisplayName = 'Durable Task Schedulers'; LowerSingularDisplayName = 'durable task managed backend'; LowerPluralDisplayName = 'durable task managed backends'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.durabletask/schedulers.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.durabletask/schedulers/taskhubs'; SingularDisplayName = 'Task Hub'; PluralDisplayName = 'Task Hubs'; LowerSingularDisplayName = 'task hub'; LowerPluralDisplayName = 'task hubs'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.durabletask/schedulers/taskhubs.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.dynamics365fraudprotection/instances'; SingularDisplayName = 'Microsoft.Dynamics365FraudProtection instance'; PluralDisplayName = 'Microsoft.Dynamics365FraudProtection instances'; LowerSingularDisplayName = 'microsoft.dynamics365fraudprotection instance'; LowerPluralDisplayName = 'microsoft.dynamics365fraudprotection instances'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.dynamics365fraudprotection/instances.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.easm/workspaces'; SingularDisplayName = 'Microsoft Defender EASM'; PluralDisplayName = 'Microsoft Defender EASM'; LowerSingularDisplayName = 'Microsoft Defender EASM workspace'; LowerPluralDisplayName = 'Microsoft Defender EASM workspaces'; IsPreview = 'false'; Description = 'Microsoft Defender External Attack Surface Management (Defender EASM) uses proprietary technology to build a dynamic inventory of your web applications, third-party dependencies, and web infrastructure. We combine that with latest threat research and vulnerability intelligence to give you visibility into your organization''s security posture.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.easm/workspaces.svg'; Links = '[{"title":"Learn more","uri":"https://learn.microsoft.com/azure/external-attack-surface-management/deploying-the-defender-easm-azure-resource#create-resources-in-a-resource-group"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.edge/configurations'; SingularDisplayName = 'Site configuration'; PluralDisplayName = 'Site configurations'; LowerSingularDisplayName = 'site configuration'; LowerPluralDisplayName = 'site configurations'; IsPreview = 'false'; Description = 'Sites'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.edge/configurations.svg'; Links = ''; } @@ -758,15 +785,16 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.edge/configurations/securityconfigurations'; SingularDisplayName = 'Microsoft.Edge configurations security configuration'; PluralDisplayName = 'Microsoft.Edge configurations security configurations'; LowerSingularDisplayName = 'microsoft.edge configurations security configuration'; LowerPluralDisplayName = 'microsoft.edge configurations security configurations'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.edge/configurations/securityconfigurations.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.edge/configurations/timeserverconfigurations'; SingularDisplayName = 'Microsoft.Edge configurations time server configuration'; PluralDisplayName = 'Microsoft.Edge configurations time server configurations'; LowerSingularDisplayName = 'microsoft.edge configurations time server configuration'; LowerPluralDisplayName = 'microsoft.edge configurations time server configurations'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.edge/configurations/timeserverconfigurations.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.edge/connectivitystatuses'; SingularDisplayName = 'Microsoft.Edge connectivity statuse'; PluralDisplayName = 'Microsoft.Edge connectivity statuses'; LowerSingularDisplayName = 'microsoft.edge connectivity statuse'; LowerPluralDisplayName = 'microsoft.edge connectivity statuses'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.edge/connectivitystatuses.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.edge/disconnectedoperations'; SingularDisplayName = 'Azure Local - disconnected operations'; PluralDisplayName = 'Azure Local - disconnected operations'; LowerSingularDisplayName = 'Azure Local - disconnected operations'; LowerPluralDisplayName = 'Azure Local - disconnected operations'; IsPreview = 'false'; Description = 'Create a virtual appliance to run Azure Local disconnected operations'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.edge/disconnectedoperations.svg'; Links = '[{"title":"Learn more","uri":"https://azure.com/hci"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.edge/siteawareresourcetypes'; SingularDisplayName = 'Microsoft.Edge site aware resource type'; PluralDisplayName = 'Microsoft.Edge site aware resource types'; LowerSingularDisplayName = 'microsoft.edge site aware resource type'; LowerPluralDisplayName = 'microsoft.edge site aware resource types'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.edge/siteawareresourcetypes.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.edge/sites'; SingularDisplayName = 'Site manager - Azure Arc'; PluralDisplayName = 'Site manager - Azure Arc'; LowerSingularDisplayName = 'site manager - azure arc'; LowerPluralDisplayName = 'site manager - azure arc'; IsPreview = 'false'; Description = 'Sites'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.edge/sites.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.edge/updates'; SingularDisplayName = 'Microsoft.Edge update'; PluralDisplayName = 'Microsoft.Edge updates'; LowerSingularDisplayName = 'microsoft.edge update'; LowerPluralDisplayName = 'microsoft.edge updates'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.edge/updates.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.edgemarketplace/offers'; SingularDisplayName = 'Microsoft.EdgeMarketplace offer'; PluralDisplayName = 'Microsoft.EdgeMarketplace offers'; LowerSingularDisplayName = 'microsoft.edgemarketplace offer'; LowerPluralDisplayName = 'microsoft.edgemarketplace offers'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.edgemarketplace/offers.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.edgemarketplace/publishers'; SingularDisplayName = 'Microsoft.EdgeMarketplace publisher'; PluralDisplayName = 'Microsoft.EdgeMarketplace publishers'; LowerSingularDisplayName = 'microsoft.edgemarketplace publisher'; LowerPluralDisplayName = 'microsoft.edgemarketplace publishers'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.edgemarketplace/publishers.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.edgeorder/addresses'; SingularDisplayName = 'Azure Edge Hardware Center Address'; PluralDisplayName = 'Azure Edge Hardware Center Address'; LowerSingularDisplayName = 'azure edge hardware center address'; LowerPluralDisplayName = 'azure edge hardware center address'; IsPreview = 'false'; Description = 'Addresses created while ordering hardware through Azure Edge Hardware Center are displayed here.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.edgeorder/addresses.svg'; Links = '[{"title":"Get consistent","uri":"https://aka.ms/edgeHWcenter-learnmore"},{"title":"Learn more","uri":"https://aka.ms/edgeHWcenter-learnmore"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.edgeorder/bootstrapconfigurations'; SingularDisplayName = 'Site Bootstrap Key'; PluralDisplayName = 'Site Bootstrap Keys'; LowerSingularDisplayName = 'site bootstrap key'; LowerPluralDisplayName = 'keys'; IsPreview = 'false'; Description = 'You can generate a Site Bootstrap key to start provisioning your devices at your Site.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.edgeorder/bootstrapconfigurations.svg'; Links = '[{"title":"Learn More","uri":"https://aka.ms/adaptivecloud/ztp/lm-sitebootstrapkey"}]'; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.edgeorder/bootstrapconfigurations'; SingularDisplayName = 'Site Key'; PluralDisplayName = 'Site Keys'; LowerSingularDisplayName = 'site key'; LowerPluralDisplayName = 'keys'; IsPreview = 'false'; Description = 'You can generate a Site key to start provisioning your devices at your Site.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.edgeorder/bootstrapconfigurations.svg'; Links = '[{"title":"Learn more","uri":"https://aka.ms/ztp/guide/gs-learn-more"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.edgeorder/orderitems'; SingularDisplayName = 'Azure Edge Hardware Center'; PluralDisplayName = 'Azure Edge Hardware Center'; LowerSingularDisplayName = 'azure edge hardware center'; LowerPluralDisplayName = 'azure edge hardware center'; IsPreview = 'false'; Description = 'Azure Edge Hardware Center lets you explore and order a variety of first party Azure hardware helping you build and run hybrid apps across datacenters, edge locations, remote offices and the cloud.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.edgeorder/orderitems.svg'; Links = '[{"title":"Get consistent","uri":"https://aka.ms/edgeHWcenter-learnmore"},{"title":"Learn more","uri":"https://aka.ms/edgeHWcenter-learnmore"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.edgeorder/virtual_orderitems'; SingularDisplayName = 'Device'; PluralDisplayName = 'Devices'; LowerSingularDisplayName = 'device'; LowerPluralDisplayName = 'device'; IsPreview = 'false'; Description = 'Follow the secure, low-touch step by step procedure to set up one or thousands of devices.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.edgeorder/virtual_orderitems.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.edgeorder/virtual_orderitems'; SingularDisplayName = 'Device'; PluralDisplayName = 'Devices'; LowerSingularDisplayName = 'device'; LowerPluralDisplayName = 'device'; IsPreview = 'false'; Description = 'Follow the secure, low-touch step by step procedure to set up one or thousands of devices.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.edgeorder/virtual_orderitems.svg'; Links = '[{"title":"Learn more","uri":"https://aka.ms/ztp/guide/gs-learn-more"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.edgezones/extendedzones'; SingularDisplayName = 'Microsoft.EdgeZones extended zone'; PluralDisplayName = 'Microsoft.EdgeZones extended zones'; LowerSingularDisplayName = 'microsoft.edgezones extended zone'; LowerPluralDisplayName = 'microsoft.edgezones extended zones'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.edgezones/extendedzones.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.education/grants'; SingularDisplayName = 'Microsoft.Education grant'; PluralDisplayName = 'Microsoft.Education grants'; LowerSingularDisplayName = 'microsoft.education grant'; LowerPluralDisplayName = 'microsoft.education grants'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.education/grants.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.education/labs'; SingularDisplayName = 'Microsoft.Education lab'; PluralDisplayName = 'Microsoft.Education labs'; LowerSingularDisplayName = 'microsoft.education lab'; LowerPluralDisplayName = 'microsoft.education labs'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.education/labs.svg'; Links = ''; } @@ -842,6 +870,7 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.gallery/myareas/galleryitems'; SingularDisplayName = 'Template'; PluralDisplayName = 'Templates'; LowerSingularDisplayName = 'template'; LowerPluralDisplayName = 'templates'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.gallery/myareas/galleryitems.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.genomics/accounts'; SingularDisplayName = 'Genomics account'; PluralDisplayName = 'Genomics accounts'; LowerSingularDisplayName = 'genomics account'; LowerPluralDisplayName = 'genomics accounts'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.genomics/accounts.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.graph/azureadapplication'; SingularDisplayName = 'Entra application'; PluralDisplayName = 'Entra applications'; LowerSingularDisplayName = 'Entra application'; LowerPluralDisplayName = 'Entra applications'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.graph/azureadapplication.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.graph/azureadapplicationprototype'; SingularDisplayName = 'Microsoft.Graph Azure ad application prototype'; PluralDisplayName = 'Microsoft.Graph Azure ad application prototype'; LowerSingularDisplayName = 'microsoft.graph azure ad application prototype'; LowerPluralDisplayName = 'microsoft.graph azure ad application prototype'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.graph/azureadapplicationprototype.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.graphservices/accounts'; SingularDisplayName = 'Metered API account'; PluralDisplayName = 'Metered API accounts'; LowerSingularDisplayName = 'metered API account'; LowerPluralDisplayName = 'metered API accounts'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.graphservices/accounts.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.guestconfiguration/guestconfigurationassignments'; SingularDisplayName = 'Microsoft.GuestConfiguration guest configuration assignment'; PluralDisplayName = 'Microsoft.GuestConfiguration guest configuration assignments'; LowerSingularDisplayName = 'microsoft.guestconfiguration guest configuration assignment'; LowerPluralDisplayName = 'microsoft.guestconfiguration guest configuration assignments'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.guestconfiguration/guestconfigurationassignments.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.guestconfiguration/guestconfigurationassignments/reports'; SingularDisplayName = 'Microsoft.GuestConfiguration guest configuration assignments report'; PluralDisplayName = 'Microsoft.GuestConfiguration guest configuration assignments reports'; LowerSingularDisplayName = 'microsoft.guestconfiguration guest configuration assignments report'; LowerPluralDisplayName = 'microsoft.guestconfiguration guest configuration assignments reports'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.guestconfiguration/guestconfigurationassignments/reports.svg'; Links = ''; } @@ -849,8 +878,9 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.hanaonazure/sapmonitors'; SingularDisplayName = 'Azure Monitor for SAP Solutions (classic)'; PluralDisplayName = 'Azure Monitors for SAP Solutions (classic)'; LowerSingularDisplayName = 'Azure monitor for SAP Solutions (classic)'; LowerPluralDisplayName = 'Azure monitors for SAP Solutions (classic)'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.hanaonazure/sapmonitors.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.hardware/orders'; SingularDisplayName = 'Microsoft.Hardware order'; PluralDisplayName = 'Microsoft.Hardware orders'; LowerSingularDisplayName = 'microsoft.hardware order'; LowerPluralDisplayName = 'microsoft.hardware orders'; IsPreview = 'false'; Description = 'A Hardware Resource Provider Order resource'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.hardware/orders.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.hardwaresecuritymodules/cloudhsmclusters'; SingularDisplayName = 'Azure Cloud HSM'; PluralDisplayName = 'Azure Cloud HSMs'; LowerSingularDisplayName = 'azure cloud hsm'; LowerPluralDisplayName = 'azure cloud hsms'; IsPreview = 'false'; Description = 'Azure Cloud HSM provides customer-managed, single tenant, highly available HSMs to store and manage your cryptographic keys.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.hardwaresecuritymodules/cloudhsmclusters.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.hdinsight/clusterpools'; SingularDisplayName = 'Azure HDInsight on AKS cluster pool'; PluralDisplayName = 'Azure HDInsight on AKS cluster pools'; LowerSingularDisplayName = 'Azure HDInsight on AKS cluster pool'; LowerPluralDisplayName = 'Azure HDInsight on AKS cluster pools'; IsPreview = 'true'; Description = 'Create an Azure HDInsight on AKS cluster pool to organize your HDInsight on AKS clusters. You can have multiple clusters in the same cluster pool.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.hdinsight/clusterpools.svg'; Links = '[{"title":"Learn more about HDInsight on AKS cluster pool","uri":"https://go.microsoft.com/fwlink/?linkid=2241255"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.hdinsight/clusterpools/clusters'; SingularDisplayName = 'Azure HDInsight on AKS cluster'; PluralDisplayName = 'Azure HDInsight on AKS clusters'; LowerSingularDisplayName = 'Azure HDInsight on AKS cluster'; LowerPluralDisplayName = 'Azure HDInsight on AKS clusters'; IsPreview = 'true'; Description = 'Create an Azure HDInsight on AKS cluster to process massive amounts of data using modern and latest open-source frameworks such as Apache Flink, Trino, Apache Spark, and more.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.hdinsight/clusterpools/clusters.svg'; Links = '[{"title":"Learn more about HDInsight on AKS cluster","uri":"https://go.microsoft.com/fwlink/?linkid=2241255"}]'; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.hdinsight/clusterpools'; SingularDisplayName = 'Azure HDInsight on AKS cluster pool'; PluralDisplayName = 'Azure HDInsight on AKS cluster pools'; LowerSingularDisplayName = 'Azure HDInsight on AKS cluster pool'; LowerPluralDisplayName = 'Azure HDInsight on AKS cluster pools'; IsPreview = 'false'; Description = 'Create an Azure HDInsight on AKS cluster pool to organize your HDInsight on AKS clusters. You can have multiple clusters in the same cluster pool.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.hdinsight/clusterpools.svg'; Links = '[{"title":"Learn more about HDInsight on AKS cluster pool","uri":"https://go.microsoft.com/fwlink/?linkid=2241255"}]'; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.hdinsight/clusterpools/clusters'; SingularDisplayName = 'Azure HDInsight on AKS cluster'; PluralDisplayName = 'Azure HDInsight on AKS clusters'; LowerSingularDisplayName = 'Azure HDInsight on AKS cluster'; LowerPluralDisplayName = 'Azure HDInsight on AKS clusters'; IsPreview = 'false'; Description = 'Create an Azure HDInsight on AKS cluster to process massive amounts of data using modern and latest open-source frameworks such as Apache Flink, Trino, Apache Spark, and more.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.hdinsight/clusterpools/clusters.svg'; Links = '[{"title":"Learn more about HDInsight on AKS cluster","uri":"https://go.microsoft.com/fwlink/?linkid=2241255"}]'; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.hdinsight/clusterpools/clusters/instanceviews'; SingularDisplayName = 'Microsoft.HDInsight clusterpools clusters instance view'; PluralDisplayName = 'Microsoft.HDInsight clusterpools clusters instance views'; LowerSingularDisplayName = 'microsoft.hdinsight clusterpools clusters instance view'; LowerPluralDisplayName = 'microsoft.hdinsight clusterpools clusters instance views'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.hdinsight/clusterpools/clusters/instanceviews.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.hdinsight/clusters'; SingularDisplayName = 'HDInsight cluster'; PluralDisplayName = 'HDInsight clusters'; LowerSingularDisplayName = 'HDInsight cluster'; LowerPluralDisplayName = 'HDInsight clusters'; IsPreview = 'false'; Description = 'Create an HDInsight cluster to process massive amounts of data using popular open-source frameworks such as Hadoop, Spark, Hive, LLAP, Kafka, Storm, ML Services, and more.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.hdinsight/clusters.svg'; Links = '[{"title":"Learn more about HDInsight","uri":"https://go.microsoft.com/fwlink/?linkid=2033939"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.healthbot/healthbots'; SingularDisplayName = 'Healthcare agent service'; PluralDisplayName = 'Healthcare agent service'; LowerSingularDisplayName = 'Healthcare agent service'; LowerPluralDisplayName = 'Healthcare agent service instances'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.healthbot/healthbots.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.healthcareapis/services'; SingularDisplayName = 'Azure API for FHIR'; PluralDisplayName = 'Azure API for FHIR'; LowerSingularDisplayName = 'Azure API for FHIR'; LowerPluralDisplayName = 'Azure API for FHIR'; IsPreview = 'false'; Description = 'Azure API for FHIR? is a managed, standards-based, and compliant healthcare data platform. It enables organizations to bring their clinical health data into the cloud based on the interoperable data standard FHIR?.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.healthcareapis/services.svg'; Links = ''; } @@ -859,7 +889,8 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.healthcareapis/workspaces/fhirservices'; SingularDisplayName = 'FHIR service'; PluralDisplayName = 'FHIR service'; LowerSingularDisplayName = 'FHIR service'; LowerPluralDisplayName = 'FHIR service'; IsPreview = 'false'; Description = 'Health Data Services is a secure platform designed for Protected Health Information and related health data workloads in the cloud. It enables analytics and machine learning with health data, and powers scalable solutions in health and life sciences. The Azure Health Data Services are based on the interoperable data standard FHIR? and DICOMweb?. Each instance of Azure Health Data Services is a unique workspace, which is a grouping of data services that share commonality. Within a single workspace, you can provision multiple FHIR services, DICOM services and MedTech service which work seamlessly with one another.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.healthcareapis/workspaces/fhirservices.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.healthcareapis/workspaces/iotconnectors'; SingularDisplayName = 'MedTech service'; PluralDisplayName = 'MedTech service'; LowerSingularDisplayName = 'MedTech service'; LowerPluralDisplayName = 'MedTech service'; IsPreview = 'false'; Description = 'Health Data Services is a secure platform designed for Protected Health Information and related health data workloads in the cloud. It enables analytics and machine learning with health data, and powers scalable solutions in health and life sciences. The Azure Health Data Services are based on the interoperable data standard FHIR? and DICOMweb?. Each instance of Azure Health Data Services is a unique workspace, which is a grouping of data services that share commonality. Within a single workspace, you can provision multiple FHIR services, DICOM services and MedTech service which work seamlessly with one another.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.healthcareapis/workspaces/iotconnectors.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.healthdataaiservices/deidservices'; SingularDisplayName = 'De-identification Service'; PluralDisplayName = 'De-identification Services'; LowerSingularDisplayName = 'de-identification service'; LowerPluralDisplayName = 'de-identification services'; IsPreview = 'false'; Description = 'De-identification for Health Data and AI Services is a cloud-based API service that applies machine-learning intelligence to extract and label, redact, or surrogate protected health information (PHI) from a variety of unstructured texts such as doctor''s notes, clinical documents, clinical transcripts, and electronic health records. The service performs three key functions which are tag, redact, or surrogate, through synchronous (?real time?) or asynchronous (?batch?) API calls.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.healthdataaiservices/deidservices.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.healthmodel/healthmodels'; SingularDisplayName = 'Health Model'; PluralDisplayName = 'Health Models'; LowerSingularDisplayName = 'health model'; LowerPluralDisplayName = 'health models'; IsPreview = 'true'; Description = 'A health model augments metric and logs with critical business context of a workload, enabling the automated evaluation of quantified health states.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.healthmodel/healthmodels.svg'; Links = '[{"title":"Build health models","uri":"https://aka.ms/portalfx/designpatterns"},{"title":"Learn more","uri":"https://aka.ms/portalfx/browse"}]'; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.healthmodel/healthmodels'; SingularDisplayName = 'Health Model'; PluralDisplayName = 'Health Models'; LowerSingularDisplayName = 'health model'; LowerPluralDisplayName = 'health models'; IsPreview = 'true'; Description = 'A health model augments metric and logs with critical business context of a workload, enabling the automated evaluation of quantified health states.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.healthmodel/healthmodels.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.healthplatform/accounts'; SingularDisplayName = 'Microsoft.HealthPlatform account'; PluralDisplayName = 'Microsoft.HealthPlatform accounts'; LowerSingularDisplayName = 'microsoft.healthplatform account'; LowerPluralDisplayName = 'microsoft.healthplatform accounts'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.healthplatform/accounts.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.help/diagnostics'; SingularDisplayName = 'Microsoft.Help diagnostic'; PluralDisplayName = 'Microsoft.Help diagnostics'; LowerSingularDisplayName = 'microsoft.help diagnostic'; LowerPluralDisplayName = 'microsoft.help diagnostics'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.help/diagnostics.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.help/selfhelp'; SingularDisplayName = 'Microsoft.Help self help'; PluralDisplayName = 'Microsoft.Help self help'; LowerSingularDisplayName = 'microsoft.help self help'; LowerPluralDisplayName = 'microsoft.help self help'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.help/selfhelp.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.help/simplifiedsolutions'; SingularDisplayName = 'Microsoft.Help simplified solution'; PluralDisplayName = 'Microsoft.Help simplified solutions'; LowerSingularDisplayName = 'microsoft.help simplified solution'; LowerPluralDisplayName = 'microsoft.help simplified solutions'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.help/simplifiedsolutions.svg'; Links = ''; } @@ -942,7 +973,7 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.impact/impactcategories'; SingularDisplayName = 'Microsoft.Impact impact category'; PluralDisplayName = 'Microsoft.Impact impact categories'; LowerSingularDisplayName = 'microsoft.impact impact category'; LowerPluralDisplayName = 'microsoft.impact impact categories'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.impact/impactcategories.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.impact/topologyimpacts'; SingularDisplayName = 'Microsoft.Impact topology impact'; PluralDisplayName = 'Microsoft.Impact topology impacts'; LowerSingularDisplayName = 'microsoft.impact topology impact'; LowerPluralDisplayName = 'microsoft.impact topology impacts'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.impact/topologyimpacts.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.impact/workloadimpacts'; SingularDisplayName = 'Microsoft.Impact workload impact'; PluralDisplayName = 'Microsoft.Impact workload impacts'; LowerSingularDisplayName = 'microsoft.impact workload impact'; LowerPluralDisplayName = 'microsoft.impact workload impacts'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.impact/workloadimpacts.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.impact/workloadimpacts/insights'; SingularDisplayName = 'Microsoft.Impact workload impacts insight'; PluralDisplayName = 'Microsoft.Impact workload impacts insights'; LowerSingularDisplayName = 'microsoft.impact workload impacts insight'; LowerPluralDisplayName = 'microsoft.impact workload impacts insights'; IsPreview = 'false'; Description = 'Insight resource'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.impact/workloadimpacts/insights.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.impact/workloadimpacts/insights'; SingularDisplayName = 'Microsoft.Impact workload impacts insight'; PluralDisplayName = 'Microsoft.Impact workload impacts insights'; LowerSingularDisplayName = 'microsoft.impact workload impacts insight'; LowerPluralDisplayName = 'microsoft.impact workload impacts insights'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.impact/workloadimpacts/insights.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.importexport/jobs'; SingularDisplayName = 'Microsoft.ImportExport job'; PluralDisplayName = 'Microsoft.ImportExport jobs'; LowerSingularDisplayName = 'microsoft.importexport job'; LowerPluralDisplayName = 'microsoft.importexport jobs'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.importexport/jobs.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.insights/actiongroups'; SingularDisplayName = 'Action group'; PluralDisplayName = 'Action groups'; LowerSingularDisplayName = 'action group'; LowerPluralDisplayName = 'action groups'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.insights/actiongroups.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.insights/activitylogalerts'; SingularDisplayName = 'Activity log alert rule'; PluralDisplayName = 'Activity log alert rules'; LowerSingularDisplayName = 'activity log alert rule'; LowerPluralDisplayName = 'activity log alert rules'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.insights/activitylogalerts.svg'; Links = ''; } @@ -977,7 +1008,7 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.intelligentitdigitaltwin/digitaltwins/tests'; SingularDisplayName = 'Microsoft.IntelligentITDigitalTwin digital twins test'; PluralDisplayName = 'Microsoft.IntelligentITDigitalTwin digital twins tests'; LowerSingularDisplayName = 'microsoft.intelligentitdigitaltwin digital twins test'; LowerPluralDisplayName = 'microsoft.intelligentitdigitaltwin digital twins tests'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.intelligentitdigitaltwin/digitaltwins/tests.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.inventory/subscriptioninternalproperties'; SingularDisplayName = 'Microsoft.Inventory subscription internal property'; PluralDisplayName = 'Microsoft.Inventory subscription internal properties'; LowerSingularDisplayName = 'microsoft.inventory subscription internal property'; LowerPluralDisplayName = 'microsoft.inventory subscription internal properties'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.inventory/subscriptioninternalproperties.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.iotcentral/iotapps'; SingularDisplayName = 'IoT Central Application'; PluralDisplayName = 'IoT Central Applications'; LowerSingularDisplayName = 'iot central application'; LowerPluralDisplayName = 'iot central applications'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.iotcentral/iotapps.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.iotfirmwaredefense/workspaces'; SingularDisplayName = 'Microsoft.IoTFirmwareDefense workspace'; PluralDisplayName = 'Microsoft.IoTFirmwareDefense workspaces'; LowerSingularDisplayName = 'microsoft.iotfirmwaredefense workspace'; LowerPluralDisplayName = 'microsoft.iotfirmwaredefense workspaces'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.iotfirmwaredefense/workspaces.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.iotfirmwaredefense/workspaces'; SingularDisplayName = 'Firmware analysis workspace'; PluralDisplayName = 'Firmware analysis workspaces'; LowerSingularDisplayName = 'firmware analysis workspace'; LowerPluralDisplayName = 'firmware analysis workspaces'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.iotfirmwaredefense/workspaces.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.iotfirmwaredefense/workspaces/firmwares'; SingularDisplayName = 'Microsoft.IoTFirmwareDefense workspaces firmware'; PluralDisplayName = 'Microsoft.IoTFirmwareDefense workspaces firmwares'; LowerSingularDisplayName = 'microsoft.iotfirmwaredefense workspaces firmware'; LowerPluralDisplayName = 'microsoft.iotfirmwaredefense workspaces firmwares'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.iotfirmwaredefense/workspaces/firmwares.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.iotfirmwaredefense/workspaces/firmwares/summaries'; SingularDisplayName = 'Microsoft.IoTFirmwareDefense workspaces firmwares summary'; PluralDisplayName = 'Microsoft.IoTFirmwareDefense workspaces firmwares summaries'; LowerSingularDisplayName = 'microsoft.iotfirmwaredefense workspaces firmwares summary'; LowerPluralDisplayName = 'microsoft.iotfirmwaredefense workspaces firmwares summaries'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.iotfirmwaredefense/workspaces/firmwares/summaries.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.iotoperations/instances'; SingularDisplayName = 'Azure IoT Operations'; PluralDisplayName = 'Azure IoT Operations'; LowerSingularDisplayName = 'Azure IoT Operations'; LowerPluralDisplayName = 'Azure IoT Operations'; IsPreview = 'false'; Description = 'Azure IoT Operations is a set of composable services that run on Azure Arc-enabled edge Kubernetes clusters. These services can be deployed and managed together.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperations/instances.svg'; Links = ''; } @@ -992,6 +1023,17 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.iotoperationsdataprocessor/instances/datasets'; SingularDisplayName = 'Microsoft.IoTOperationsDataProcessor instances dataset'; PluralDisplayName = 'Microsoft.IoTOperationsDataProcessor instances datasets'; LowerSingularDisplayName = 'microsoft.iotoperationsdataprocessor instances dataset'; LowerPluralDisplayName = 'microsoft.iotoperationsdataprocessor instances datasets'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsdataprocessor/instances/datasets.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.iotoperationsdataprocessor/instances/pipelines'; SingularDisplayName = 'Microsoft.IoTOperationsDataProcessor instances pipeline'; PluralDisplayName = 'Microsoft.IoTOperationsDataProcessor instances pipelines'; LowerSingularDisplayName = 'microsoft.iotoperationsdataprocessor instances pipeline'; LowerPluralDisplayName = 'microsoft.iotoperationsdataprocessor instances pipelines'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsdataprocessor/instances/pipelines.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.iotoperationsmq/mq'; SingularDisplayName = 'IoT Operations Ops MQ'; PluralDisplayName = 'IoT Operations Ops MQs'; LowerSingularDisplayName = 'ioT operations ops mq'; LowerPluralDisplayName = 'iot operations ops mqs'; IsPreview = 'false'; Description = 'Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.iotoperationsmq/mq/broker'; SingularDisplayName = 'Microsoft.IoTOperationsMQ mq broker'; PluralDisplayName = 'Microsoft.IoTOperationsMQ mq broker'; LowerSingularDisplayName = 'microsoft.iotoperationsmq mq broker'; LowerPluralDisplayName = 'microsoft.iotoperationsmq mq broker'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/broker.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.iotoperationsmq/mq/broker/authentication'; SingularDisplayName = 'Microsoft.IoTOperationsMQ mq broker authentication'; PluralDisplayName = 'Microsoft.IoTOperationsMQ mq broker authentication'; LowerSingularDisplayName = 'microsoft.iotoperationsmq mq broker authentication'; LowerPluralDisplayName = 'microsoft.iotoperationsmq mq broker authentication'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/broker/authentication.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.iotoperationsmq/mq/broker/authorization'; SingularDisplayName = 'Microsoft.IoTOperationsMQ mq broker authorization'; PluralDisplayName = 'Microsoft.IoTOperationsMQ mq broker authorization'; LowerSingularDisplayName = 'microsoft.iotoperationsmq mq broker authorization'; LowerPluralDisplayName = 'microsoft.iotoperationsmq mq broker authorization'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/broker/authorization.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.iotoperationsmq/mq/broker/listener'; SingularDisplayName = 'Microsoft.IoTOperationsMQ mq broker listener'; PluralDisplayName = 'Microsoft.IoTOperationsMQ mq broker listener'; LowerSingularDisplayName = 'microsoft.iotoperationsmq mq broker listener'; LowerPluralDisplayName = 'microsoft.iotoperationsmq mq broker listener'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/broker/listener.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.iotoperationsmq/mq/datalakeconnector'; SingularDisplayName = 'Microsoft.IoTOperationsMQ mq data lake connector'; PluralDisplayName = 'Microsoft.IoTOperationsMQ mq data lake connector'; LowerSingularDisplayName = 'microsoft.iotoperationsmq mq data lake connector'; LowerPluralDisplayName = 'microsoft.iotoperationsmq mq data lake connector'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/datalakeconnector.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.iotoperationsmq/mq/datalakeconnector/topicmap'; SingularDisplayName = 'Microsoft.IoTOperationsMQ mq data lake connector topic map'; PluralDisplayName = 'Microsoft.IoTOperationsMQ mq data lake connector topic map'; LowerSingularDisplayName = 'microsoft.iotoperationsmq mq data lake connector topic map'; LowerPluralDisplayName = 'microsoft.iotoperationsmq mq data lake connector topic map'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/datalakeconnector/topicmap.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.iotoperationsmq/mq/diagnosticservice'; SingularDisplayName = 'Microsoft.IoTOperationsMQ mq diagnostic service'; PluralDisplayName = 'Microsoft.IoTOperationsMQ mq diagnostic service'; LowerSingularDisplayName = 'microsoft.iotoperationsmq mq diagnostic service'; LowerPluralDisplayName = 'microsoft.iotoperationsmq mq diagnostic service'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/diagnosticservice.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.iotoperationsmq/mq/kafkaconnector'; SingularDisplayName = 'Microsoft.IoTOperationsMQ mq kafka connector'; PluralDisplayName = 'Microsoft.IoTOperationsMQ mq kafka connector'; LowerSingularDisplayName = 'microsoft.iotoperationsmq mq kafka connector'; LowerPluralDisplayName = 'microsoft.iotoperationsmq mq kafka connector'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/kafkaconnector.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.iotoperationsmq/mq/kafkaconnector/topicmap'; SingularDisplayName = 'Microsoft.IoTOperationsMQ mq kafka connector topic map'; PluralDisplayName = 'Microsoft.IoTOperationsMQ mq kafka connector topic map'; LowerSingularDisplayName = 'microsoft.iotoperationsmq mq kafka connector topic map'; LowerPluralDisplayName = 'microsoft.iotoperationsmq mq kafka connector topic map'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/kafkaconnector/topicmap.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.iotoperationsmq/mq/mqttbridgeconnector'; SingularDisplayName = 'Microsoft.IoTOperationsMQ mq mqtt bridge connector'; PluralDisplayName = 'Microsoft.IoTOperationsMQ mq mqtt bridge connector'; LowerSingularDisplayName = 'microsoft.iotoperationsmq mq mqtt bridge connector'; LowerPluralDisplayName = 'microsoft.iotoperationsmq mq mqtt bridge connector'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/mqttbridgeconnector.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.iotoperationsmq/mq/mqttbridgeconnector/topicmap'; SingularDisplayName = 'Microsoft.IoTOperationsMQ mq mqtt bridge connector topic map'; PluralDisplayName = 'Microsoft.IoTOperationsMQ mq mqtt bridge connector topic map'; LowerSingularDisplayName = 'microsoft.iotoperationsmq mq mqtt bridge connector topic map'; LowerPluralDisplayName = 'microsoft.iotoperationsmq mq mqtt bridge connector topic map'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsmq/mq/mqttbridgeconnector/topicmap.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.iotoperationsorchestrator/instances'; SingularDisplayName = 'Microsoft.IoTOperationsOrchestrator instance'; PluralDisplayName = 'Microsoft.IoTOperationsOrchestrator instances'; LowerSingularDisplayName = 'microsoft.iotoperationsorchestrator instance'; LowerPluralDisplayName = 'microsoft.iotoperationsorchestrator instances'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsorchestrator/instances.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.iotoperationsorchestrator/solutions'; SingularDisplayName = 'Microsoft.IoTOperationsOrchestrator solution'; PluralDisplayName = 'Microsoft.IoTOperationsOrchestrator solutions'; LowerSingularDisplayName = 'microsoft.iotoperationsorchestrator solution'; LowerPluralDisplayName = 'microsoft.iotoperationsorchestrator solutions'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsorchestrator/solutions.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.iotoperationsorchestrator/targets'; SingularDisplayName = 'Microsoft.IoTOperationsOrchestrator target'; PluralDisplayName = 'Microsoft.IoTOperationsOrchestrator targets'; LowerSingularDisplayName = 'microsoft.iotoperationsorchestrator target'; LowerPluralDisplayName = 'microsoft.iotoperationsorchestrator targets'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.iotoperationsorchestrator/targets.svg'; Links = ''; } @@ -1026,13 +1068,14 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.labservices/labaccounts/labs'; SingularDisplayName = 'Lab'; PluralDisplayName = 'Labs'; LowerSingularDisplayName = 'lab'; LowerPluralDisplayName = 'labs'; IsPreview = 'false'; Description = 'Lab Creators use the Azure Lab Services website to create labs, provision virtual machines, install software and more. To create labs, at least one lab plan is needed.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.labservices/labaccounts/labs.svg'; Links = '[{"title":"Go to labs.azure.com","uri":"https://labs.azure.com"},{"title":"Learn more","uri":"https://aka.ms/azlabs-setupLab"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.labservices/labplans'; SingularDisplayName = 'Lab plan'; PluralDisplayName = 'Lab plans'; LowerSingularDisplayName = 'lab plan'; LowerPluralDisplayName = 'lab plans'; IsPreview = 'false'; Description = 'Lab plans allow settings and configurations to be applied to labs. Create a lab plan to enable the creation of labs in your organization.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.labservices/labplans.svg'; Links = '[{"title":"Learn more","uri":"https://aka.ms/azlabs-setupLabPlan"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.labservices/labs'; SingularDisplayName = 'Lab'; PluralDisplayName = 'Labs'; LowerSingularDisplayName = 'lab'; LowerPluralDisplayName = 'labs'; IsPreview = 'false'; Description = 'Lab Creators use the Azure Lab Services website to create labs, provision virtual machines, install software and more. To create labs, at least one lab plan is needed.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.labservices/labs.svg'; Links = '[{"title":"Go to labs.azure.com","uri":"https://labs.azure.com"},{"title":"Learn more","uri":"https://aka.ms/azlabs-setupLab"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.liftrpilot/organizations'; SingularDisplayName = 'Microsoft.LiftrPilot organization'; PluralDisplayName = 'Microsoft.LiftrPilot organizations'; LowerSingularDisplayName = 'microsoft.liftrpilot organization'; LowerPluralDisplayName = 'microsoft.liftrpilot organizations'; IsPreview = 'false'; Description = 'Concrete tracked resource types can be created by aliasing this type using a specific property type.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.liftrpilot/organizations.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.liftrpilot/organizations'; SingularDisplayName = 'Microsoft.LiftrPilot organization'; PluralDisplayName = 'Microsoft.LiftrPilot organizations'; LowerSingularDisplayName = 'microsoft.liftrpilot organization'; LowerPluralDisplayName = 'microsoft.liftrpilot organizations'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.liftrpilot/organizations.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.loadtestservice/loadtestmappings'; SingularDisplayName = 'Microsoft.LoadTestService load test mapping'; PluralDisplayName = 'Microsoft.LoadTestService load test mappings'; LowerSingularDisplayName = 'microsoft.loadtestservice load test mapping'; LowerPluralDisplayName = 'microsoft.loadtestservice load test mappings'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.loadtestservice/loadtestmappings.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.loadtestservice/loadtestprofilemappings'; SingularDisplayName = 'Microsoft.LoadTestService load test profile mapping'; PluralDisplayName = 'Microsoft.LoadTestService load test profile mappings'; LowerSingularDisplayName = 'microsoft.loadtestservice load test profile mapping'; LowerPluralDisplayName = 'microsoft.loadtestservice load test profile mappings'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.loadtestservice/loadtestprofilemappings.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.loadtestservice/loadtests'; SingularDisplayName = 'Azure Load Testing'; PluralDisplayName = 'Azure Load Testing'; LowerSingularDisplayName = 'Azure load testing resource'; LowerPluralDisplayName = 'Azure load testing resources'; IsPreview = 'false'; Description = 'Azure Load Testing is a fully managed load testing service that enables developers and testers to generate high-scale load and reveals actionable insights into app performance, scalability, and capacity.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.loadtestservice/loadtests.svg'; Links = '[{"title":"Learn more about Azure Load Testing","uri":"https://azure.microsoft.com/services/load-testing"},{"title":"Documentation","uri":"https://docs.microsoft.com/azure/load-testing/"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.logic/businessprocesses'; SingularDisplayName = 'Business Process'; PluralDisplayName = 'Business Process Tracking'; LowerSingularDisplayName = 'business process'; LowerPluralDisplayName = 'business processes'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.logic/businessprocesses.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.logic/integrationaccounts'; SingularDisplayName = 'Logic app integration account'; PluralDisplayName = 'Logic app integration accounts'; LowerSingularDisplayName = 'integration account'; LowerPluralDisplayName = 'integration accounts'; IsPreview = 'false'; Description = 'Build enterprise integration and B2B/EDI solutions with Logic Apps.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.logic/integrationaccounts.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.logic/integrationserviceenvironments'; SingularDisplayName = 'Integration Service Environment'; PluralDisplayName = 'Integration Service Environments'; LowerSingularDisplayName = 'integration service environment'; LowerPluralDisplayName = 'integration service environments'; IsPreview = 'false'; Description = 'Fully isolated and dedicated environment for Logic Apps. Please note that the deployment of ISE can take up to 4 hours to complete.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.logic/integrationserviceenvironments.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.logic/integrationserviceenvironments/health'; SingularDisplayName = 'Microsoft.Logic integration service environments health'; PluralDisplayName = 'Microsoft.Logic integration service environments health'; LowerSingularDisplayName = 'microsoft.logic integration service environments health'; LowerPluralDisplayName = 'microsoft.logic integration service environments health'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.logic/integrationserviceenvironments/health.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.logic/integrationserviceenvironments/managedapis'; SingularDisplayName = 'Managed Connector'; PluralDisplayName = 'Managed Connector'; LowerSingularDisplayName = 'managed connector'; LowerPluralDisplayName = 'managed connectors'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.logic/integrationserviceenvironments/managedapis.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.logic/workflows'; SingularDisplayName = 'Logic app'; PluralDisplayName = 'Logic apps'; LowerSingularDisplayName = 'logic app'; LowerPluralDisplayName = 'logic apps'; IsPreview = 'false'; Description = 'Create workflows leveraging hundreds of connectors and the visual designer.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.logic/workflows.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.logz/monitors'; SingularDisplayName = 'Logz.io'; PluralDisplayName = 'Logz.io'; LowerSingularDisplayName = 'Logz.io'; LowerPluralDisplayName = 'Logz.io'; IsPreview = 'false'; Description = 'Integration with Logz.io enables our customers to send all the logs for non compute resources to Logz.io without having to configure event hubs or enable diagnostic settings. Creating the main account and providing SSO allows user to dynamically include/ exclude tags and SSO into their Logz.io account hassle free. '; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.logz/monitors.svg'; Links = ''; } @@ -1053,6 +1096,7 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.machinelearningservices/workspaces/onlineendpoints/deployments'; SingularDisplayName = 'Machine learning online deployment'; PluralDisplayName = 'Machine learning online deployments'; LowerSingularDisplayName = 'machine learning online deployment'; LowerPluralDisplayName = 'machine learning online deployments'; IsPreview = 'false'; Description = 'Workspaces are where you manage all the models, assets, and data related to your machine learning projects. Create one now to start using Azure Machine Learning.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.machinelearningservices/workspaces/onlineendpoints/deployments.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.maintenance/configurationassignments'; SingularDisplayName = 'Microsoft.Maintenance configuration assignment'; PluralDisplayName = 'Microsoft.Maintenance configuration assignments'; LowerSingularDisplayName = 'microsoft.maintenance configuration assignment'; LowerPluralDisplayName = 'microsoft.maintenance configuration assignments'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.maintenance/configurationassignments.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.maintenance/maintenanceconfigurations'; SingularDisplayName = 'Maintenance Configuration'; PluralDisplayName = 'Maintenance Configurations'; LowerSingularDisplayName = 'maintenance configuration'; LowerPluralDisplayName = 'maintenance configurations'; IsPreview = 'false'; Description = 'Manage platform updates that don''t require a reboot using maintenance control. Maintenance control lets you decide when to apply updates to your virtual infrastructure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.maintenance/maintenanceconfigurations.svg'; Links = '[{"title":"Learn more","uri":"https://go.microsoft.com/fwlink/?linkid=2160306"}]'; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.maintenance/maintenanceconfigurationsbladeresource'; SingularDisplayName = 'Maintenance configuration'; PluralDisplayName = 'Maintenance configuration'; LowerSingularDisplayName = 'Maintenance configuration'; LowerPluralDisplayName = 'Maintenance configuration'; IsPreview = 'true'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.maintenance/maintenanceconfigurationsbladeresource.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.maintenance/publicmaintenanceconfigurations'; SingularDisplayName = 'Microsoft.Maintenance public maintenance configuration'; PluralDisplayName = 'Microsoft.Maintenance public maintenance configurations'; LowerSingularDisplayName = 'microsoft.maintenance public maintenance configuration'; LowerPluralDisplayName = 'microsoft.maintenance public maintenance configurations'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.maintenance/publicmaintenanceconfigurations.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.managedidentity/identities'; SingularDisplayName = 'Microsoft.ManagedIdentity identity'; PluralDisplayName = 'Microsoft.ManagedIdentity identities'; LowerSingularDisplayName = 'microsoft.managedidentity identity'; LowerPluralDisplayName = 'microsoft.managedidentity identities'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.managedidentity/identities.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.managedidentity/userassignedidentities'; SingularDisplayName = 'Managed Identity'; PluralDisplayName = 'Managed Identities'; LowerSingularDisplayName = 'managed identity'; LowerPluralDisplayName = 'managed identities'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.managedidentity/userassignedidentities.svg'; Links = ''; } @@ -1076,7 +1120,7 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.managednetworkfabric/networkfabrics'; SingularDisplayName = 'Network Fabric (Operator Nexus)'; PluralDisplayName = 'Network Fabrics (Operator Nexus)'; LowerSingularDisplayName = 'network fabric (operator nexus)'; LowerPluralDisplayName = 'network fabrics (operator nexus)'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.managednetworkfabric/networkfabrics.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.managednetworkfabric/networkfabrics/networktonetworkinterconnects'; SingularDisplayName = 'Network to Network Interconnect (Operator Nexus)'; PluralDisplayName = 'Network to Network Interconnects (Operator Nexus)'; LowerSingularDisplayName = 'network to network interconnect (operator nexus)'; LowerPluralDisplayName = 'network to network interconnects (operator nexus)'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.managednetworkfabric/networkfabrics/networktonetworkinterconnects.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.managednetworkfabric/networkfabricskus'; SingularDisplayName = 'Network Fabric SKU (Operator Nexus)'; PluralDisplayName = 'Network Fabric SKUs (Operator Nexus)'; LowerSingularDisplayName = 'network fabric sku (operator nexus)'; LowerPluralDisplayName = 'network fabric skus (operator nexus)'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.managednetworkfabric/networkfabricskus.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.managednetworkfabric/networkmonitors'; SingularDisplayName = 'Microsoft.ManagedNetworkFabric network monitor'; PluralDisplayName = 'Microsoft.ManagedNetworkFabric network monitors'; LowerSingularDisplayName = 'microsoft.managednetworkfabric network monitor'; LowerPluralDisplayName = 'microsoft.managednetworkfabric network monitors'; IsPreview = 'false'; Description = 'The NetworkMonitor resource definition.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.managednetworkfabric/networkmonitors.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.managednetworkfabric/networkmonitors'; SingularDisplayName = 'Microsoft.ManagedNetworkFabric network monitor'; PluralDisplayName = 'Microsoft.ManagedNetworkFabric network monitors'; LowerSingularDisplayName = 'microsoft.managednetworkfabric network monitor'; LowerPluralDisplayName = 'microsoft.managednetworkfabric network monitors'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.managednetworkfabric/networkmonitors.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.managednetworkfabric/networkpacketbrokers'; SingularDisplayName = 'Network Packet Broker (Operator Nexus)'; PluralDisplayName = 'Network Packet Brokers (Operator Nexus)'; LowerSingularDisplayName = 'network packet broker (operator nexus)'; LowerPluralDisplayName = 'network packet brokers (operator nexus)'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.managednetworkfabric/networkpacketbrokers.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.managednetworkfabric/networkracks'; SingularDisplayName = 'Network Rack (Operator Nexus)'; PluralDisplayName = 'Network Racks (Operator Nexus)'; LowerSingularDisplayName = 'network rack (operator nexus)'; LowerPluralDisplayName = 'network racks (operator nexus)'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.managednetworkfabric/networkracks.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.managednetworkfabric/networktaprules'; SingularDisplayName = 'Network Tap Rule (Operator Nexus)'; PluralDisplayName = 'Network Tap Rules (Operator Nexus)'; LowerSingularDisplayName = 'network tap rule (operator nexus)'; LowerPluralDisplayName = 'network tap rules (operator nexus)'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.managednetworkfabric/networktaprules.svg'; Links = ''; } @@ -1092,7 +1136,7 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.management/managementgroups/settings'; SingularDisplayName = 'Microsoft.Management management groups setting'; PluralDisplayName = 'Microsoft.Management management groups settings'; LowerSingularDisplayName = 'microsoft.management management groups setting'; LowerPluralDisplayName = 'microsoft.management management groups settings'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.management/managementgroups/settings.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.management/managementgroups/subscriptions'; SingularDisplayName = 'Microsoft.Management management groups subscription'; PluralDisplayName = 'Microsoft.Management management groups subscriptions'; LowerSingularDisplayName = 'microsoft.management management groups subscription'; LowerPluralDisplayName = 'microsoft.management management groups subscriptions'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.management/managementgroups/subscriptions.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.managementpartner/partners'; SingularDisplayName = 'Microsoft.ManagementPartner partner'; PluralDisplayName = 'Microsoft.ManagementPartner partners'; LowerSingularDisplayName = 'microsoft.managementpartner partner'; LowerPluralDisplayName = 'microsoft.managementpartner partners'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.managementpartner/partners.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.manufacturingplatform/manufacturingdataservices'; SingularDisplayName = 'Factory Operations Agent in Azure AI'; PluralDisplayName = 'Factory Operations Agent in Azure AI'; LowerSingularDisplayName = 'Factory Operations Agent in Azure AI'; LowerPluralDisplayName = 'Factory Operations Agent in Azure AI'; IsPreview = 'false'; Description = 'Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.manufacturingplatform/manufacturingdataservices.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.manufacturingplatform/manufacturingdataservices'; SingularDisplayName = 'Factory Operations Agent in Azure AI Foundry'; PluralDisplayName = 'Factory Operations Agent in Azure AI Foundry'; LowerSingularDisplayName = 'Factory Operations Agent in Azure AI Foundry'; LowerPluralDisplayName = 'Factory Operations Agent in Azure AI Foundry'; IsPreview = 'false'; Description = 'Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.manufacturingplatform/manufacturingdataservices.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.maps/accounts'; SingularDisplayName = 'Azure Maps Account'; PluralDisplayName = 'Azure Maps Accounts'; LowerSingularDisplayName = 'azure maps accounts'; LowerPluralDisplayName = 'Azure Maps account'; IsPreview = 'false'; Description = 'Azure Maps is a portfolio of geospatial services that include service APIs for Maps, Search, Routing, Traffic and Time Zones. The portfolio of Azure OneAPI compliant services allows you to use familiar developer tools to quickly develop and scale solutions that integrate location information into your Azure solutions. Azure Maps provides developers from all industries powerful geospatial capabilities packed with fresh mapping data imperative to providing geographic context to web and mobile applications.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.maps/accounts.svg'; Links = '[{"title":"Learn more about Azure Maps","uri":"https://aka.ms/albs"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.maps/accounts/creators'; SingularDisplayName = 'Azure Maps Creator Resource'; PluralDisplayName = 'Azure Maps Creator Resources'; LowerSingularDisplayName = 'Azure Maps creator resources'; LowerPluralDisplayName = 'Azure Maps creator resource'; IsPreview = 'false'; Description = 'Creator allows you to create private maps and map applications using Azure Maps API and SDK.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.maps/accounts/creators.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.marketplace/privatestores'; SingularDisplayName = 'Microsoft.Marketplace private store'; PluralDisplayName = 'Microsoft.Marketplace private stores'; LowerSingularDisplayName = 'microsoft.marketplace private store'; LowerPluralDisplayName = 'microsoft.marketplace private stores'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.marketplace/privatestores.svg'; Links = ''; } @@ -1102,8 +1146,22 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.marketplace/privatestores/offers'; SingularDisplayName = 'Microsoft.Marketplace private stores offer'; PluralDisplayName = 'Microsoft.Marketplace private stores offers'; LowerSingularDisplayName = 'microsoft.marketplace private stores offer'; LowerPluralDisplayName = 'microsoft.marketplace private stores offers'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.marketplace/privatestores/offers.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.marketplace/privatestores/requestapprovals'; SingularDisplayName = 'Microsoft.Marketplace private stores request approval'; PluralDisplayName = 'Microsoft.Marketplace private stores request approvals'; LowerSingularDisplayName = 'microsoft.marketplace private stores request approval'; LowerPluralDisplayName = 'microsoft.marketplace private stores request approvals'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.marketplace/privatestores/requestapprovals.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.media/mediaservices'; SingularDisplayName = 'Media service'; PluralDisplayName = 'Media Services'; LowerSingularDisplayName = 'media service'; LowerPluralDisplayName = 'Media Services'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.media/mediaservices/accountfilters'; SingularDisplayName = 'Microsoft.Media media services account filter'; PluralDisplayName = 'Microsoft.Media media services account filters'; LowerSingularDisplayName = 'microsoft.media media services account filter'; LowerPluralDisplayName = 'microsoft.media media services account filters'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/accountfilters.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.media/mediaservices/assets'; SingularDisplayName = 'Microsoft.Media media services asset'; PluralDisplayName = 'Microsoft.Media media services assets'; LowerSingularDisplayName = 'microsoft.media media services asset'; LowerPluralDisplayName = 'microsoft.media media services assets'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/assets.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.media/mediaservices/assets/assetfilters'; SingularDisplayName = 'Microsoft.Media media services assets asset filter'; PluralDisplayName = 'Microsoft.Media media services assets asset filters'; LowerSingularDisplayName = 'microsoft.media media services assets asset filter'; LowerPluralDisplayName = 'microsoft.media media services assets asset filters'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/assets/assetfilters.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.media/mediaservices/assets/tracks'; SingularDisplayName = 'Microsoft.Media media services assets track'; PluralDisplayName = 'Microsoft.Media media services assets tracks'; LowerSingularDisplayName = 'microsoft.media media services assets track'; LowerPluralDisplayName = 'microsoft.media media services assets tracks'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/assets/tracks.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.media/mediaservices/assets/tracks/operationresults'; SingularDisplayName = 'Microsoft.Media media services assets tracks operation result'; PluralDisplayName = 'Microsoft.Media media services assets tracks operation results'; LowerSingularDisplayName = 'microsoft.media media services assets tracks operation result'; LowerPluralDisplayName = 'microsoft.media media services assets tracks operation results'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/assets/tracks/operationresults.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.media/mediaservices/assets/tracks/operationstatuses'; SingularDisplayName = 'Microsoft.Media media services assets tracks operation statuse'; PluralDisplayName = 'Microsoft.Media media services assets tracks operation statuses'; LowerSingularDisplayName = 'microsoft.media media services assets tracks operation statuse'; LowerPluralDisplayName = 'microsoft.media media services assets tracks operation statuses'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/assets/tracks/operationstatuses.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.media/mediaservices/contentkeypolicies'; SingularDisplayName = 'Microsoft.Media media services content key policy'; PluralDisplayName = 'Microsoft.Media media services content key policies'; LowerSingularDisplayName = 'microsoft.media media services content key policy'; LowerPluralDisplayName = 'microsoft.media media services content key policies'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/contentkeypolicies.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.media/mediaservices/liveevents'; SingularDisplayName = 'Live event'; PluralDisplayName = 'Live events'; LowerSingularDisplayName = 'live event'; LowerPluralDisplayName = 'live events'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/liveevents.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.media/mediaservices/liveevents/liveoutputs'; SingularDisplayName = 'Microsoft.Media mediaservices live events live output'; PluralDisplayName = 'Microsoft.Media mediaservices live events live outputs'; LowerSingularDisplayName = 'microsoft.media mediaservices live events live output'; LowerPluralDisplayName = 'microsoft.media mediaservices live events live outputs'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/liveevents/liveoutputs.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.media/mediaservices/privateendpointconnections'; SingularDisplayName = 'Microsoft.Media mediaservices private endpoint connection'; PluralDisplayName = 'Microsoft.Media mediaservices private endpoint connections'; LowerSingularDisplayName = 'microsoft.media mediaservices private endpoint connection'; LowerPluralDisplayName = 'microsoft.media mediaservices private endpoint connections'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/privateendpointconnections.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.media/mediaservices/privatelinkresources'; SingularDisplayName = 'Microsoft.Media mediaservices private link resource'; PluralDisplayName = 'Microsoft.Media mediaservices private link resources'; LowerSingularDisplayName = 'microsoft.media mediaservices private link resource'; LowerPluralDisplayName = 'microsoft.media mediaservices private link resources'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/privatelinkresources.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.media/mediaservices/streamingendpoints'; SingularDisplayName = 'Streaming Endpoint'; PluralDisplayName = 'Streaming Endpoints'; LowerSingularDisplayName = 'streaming endpoint'; LowerPluralDisplayName = 'streaming endpoints'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/streamingendpoints.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.media/mediaservices/streaminglocators'; SingularDisplayName = 'Microsoft.Media media services streaming locator'; PluralDisplayName = 'Microsoft.Media media services streaming locators'; LowerSingularDisplayName = 'microsoft.media media services streaming locator'; LowerPluralDisplayName = 'microsoft.media media services streaming locators'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/streaminglocators.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.media/mediaservices/streamingpolicies'; SingularDisplayName = 'Microsoft.Media media services streaming policy'; PluralDisplayName = 'Microsoft.Media media services streaming policies'; LowerSingularDisplayName = 'microsoft.media media services streaming policy'; LowerPluralDisplayName = 'microsoft.media media services streaming policies'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/streamingpolicies.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.media/mediaservices/transforms'; SingularDisplayName = 'Microsoft.Media media services transform'; PluralDisplayName = 'Microsoft.Media media services transforms'; LowerSingularDisplayName = 'microsoft.media media services transform'; LowerPluralDisplayName = 'microsoft.media media services transforms'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/transforms.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.media/mediaservices/transforms/jobs'; SingularDisplayName = 'Microsoft.Media media services transforms job'; PluralDisplayName = 'Microsoft.Media media services transforms jobs'; LowerSingularDisplayName = 'microsoft.media media services transforms job'; LowerPluralDisplayName = 'microsoft.media media services transforms jobs'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.media/mediaservices/transforms/jobs.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.mesh/worlds'; SingularDisplayName = 'Microsoft.Mesh world'; PluralDisplayName = 'Microsoft.Mesh worlds'; LowerSingularDisplayName = 'microsoft.mesh world'; LowerPluralDisplayName = 'microsoft.mesh worlds'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.mesh/worlds.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.mesh/worlds/events'; SingularDisplayName = 'Microsoft.Mesh worlds event'; PluralDisplayName = 'Microsoft.Mesh worlds events'; LowerSingularDisplayName = 'microsoft.mesh worlds event'; LowerPluralDisplayName = 'microsoft.mesh worlds events'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.mesh/worlds/events.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.mesh/worlds/events/accesspolicies'; SingularDisplayName = 'Microsoft.Mesh worlds events access policy'; PluralDisplayName = 'Microsoft.Mesh worlds events access policies'; LowerSingularDisplayName = 'microsoft.mesh worlds events access policy'; LowerPluralDisplayName = 'microsoft.mesh worlds events access policies'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.mesh/worlds/events/accesspolicies.svg'; Links = ''; } @@ -1190,8 +1248,8 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.mission/communities/communityendpoints'; SingularDisplayName = 'Community endpoint'; PluralDisplayName = 'Community endpoints'; LowerSingularDisplayName = 'community endpoint'; LowerPluralDisplayName = 'community endpoints'; IsPreview = 'false'; Description = 'Community endpoints are collections of networking rules that enable external connectivity to trusted destinations including public websites, well-known services, and external private networks'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.mission/communities/communityendpoints.svg'; Links = '[{"title":"Learn more","uri":"CommunityEndpoint.linkValue"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.mission/communities/transithubs'; SingularDisplayName = 'Transit hub'; PluralDisplayName = 'Transit hubs'; LowerSingularDisplayName = 'transit hub'; LowerPluralDisplayName = 'transit hubs'; IsPreview = 'false'; Description = 'Create transit hubs to securely allow network traffic through the community firewall to and from external destinations.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.mission/communities/transithubs.svg'; Links = '[{"title":"Learn more","uri":"TransitHub.linkValue"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.mission/enclaveconnections'; SingularDisplayName = 'Enclave connection'; PluralDisplayName = 'Enclave connections'; LowerSingularDisplayName = 'enclave connection'; LowerPluralDisplayName = 'enclave connections'; IsPreview = 'false'; Description = 'Enclave connections associate two virtual enclaves within a community using exposed endpoints that define security rules and firewall policies for connecting.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.mission/enclaveconnections.svg'; Links = '[{"title":"Learn more","uri":"EnclaveConnection.linkValue"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.mission/externalconnections'; SingularDisplayName = 'Microsoft.Mission external connection'; PluralDisplayName = 'Microsoft.Mission external connections'; LowerSingularDisplayName = 'microsoft.mission external connection'; LowerPluralDisplayName = 'microsoft.mission external connections'; IsPreview = 'false'; Description = 'Describes an External Connection.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.mission/externalconnections.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.mission/internalconnections'; SingularDisplayName = 'Microsoft.Mission internal connection'; PluralDisplayName = 'Microsoft.Mission internal connections'; LowerSingularDisplayName = 'microsoft.mission internal connection'; LowerPluralDisplayName = 'microsoft.mission internal connections'; IsPreview = 'false'; Description = 'Describes an Internal Connection.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.mission/internalconnections.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.mission/externalconnections'; SingularDisplayName = 'Microsoft.Mission external connection'; PluralDisplayName = 'Microsoft.Mission external connections'; LowerSingularDisplayName = 'microsoft.mission external connection'; LowerPluralDisplayName = 'microsoft.mission external connections'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.mission/externalconnections.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.mission/internalconnections'; SingularDisplayName = 'Microsoft.Mission internal connection'; PluralDisplayName = 'Microsoft.Mission internal connections'; LowerSingularDisplayName = 'microsoft.mission internal connection'; LowerPluralDisplayName = 'microsoft.mission internal connections'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.mission/internalconnections.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.mission/virtualenclaves'; SingularDisplayName = 'Enclave'; PluralDisplayName = 'Enclaves'; LowerSingularDisplayName = 'enclave'; LowerPluralDisplayName = 'enclaves'; IsPreview = 'false'; Description = 'Create an enclave within a community. Enclaves are isolated virtual networks that host workloads and are secured through managed routes, connections, and Azure Policy.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.mission/virtualenclaves.svg'; Links = '[{"title":"Learn more","uri":"https://azure.microsoft.com/"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.mission/virtualenclaves/enclaveendpoints'; SingularDisplayName = 'Enclave endpoint'; PluralDisplayName = 'Enclave endpoints'; LowerSingularDisplayName = 'enclave endpoint'; LowerPluralDisplayName = 'enclave endpoints'; IsPreview = 'false'; Description = 'Community endpoints are collections of networking rules that enable external connectivity to trusted destinations including public websites, well-known services, and external private networks'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.mission/virtualenclaves/enclaveendpoints.svg'; Links = '[{"title":"Learn more","uri":"EnclaveEndpoint.linkValue"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.mission/virtualenclaves/endpoints'; SingularDisplayName = 'Endpoint'; PluralDisplayName = 'Endpoints'; LowerSingularDisplayName = 'endpoint'; LowerPluralDisplayName = 'endpoints'; IsPreview = 'false'; Description = 'Community endpoints are collections of networking rules that enable external connectivity to trusted destinations including public websites, well-known services, and external private networks'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.mission/virtualenclaves/endpoints.svg'; Links = '[{"title":"Learn more","uri":"https://azure.microsoft.com/"}]'; } @@ -1298,7 +1356,7 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.network/networkmanagerconnections'; SingularDisplayName = 'Microsoft.Network network manager connection'; PluralDisplayName = 'Microsoft.Network network manager connections'; LowerSingularDisplayName = 'microsoft.network network manager connection'; LowerPluralDisplayName = 'microsoft.network network manager connections'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkmanagerconnections.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.network/networkmanagers'; SingularDisplayName = 'Network manager'; PluralDisplayName = 'Network managers'; LowerSingularDisplayName = 'network manager'; LowerPluralDisplayName = 'network managers'; IsPreview = 'false'; Description = 'Azure Virtual Network Manager enables you to define and apply connectivity and security configurations for your virtual networks across subscriptions and management groups.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkmanagers.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.network/networkmanagers/connectivityconfigurations'; SingularDisplayName = 'Network manager'; PluralDisplayName = 'Network managers'; LowerSingularDisplayName = 'network manager'; LowerPluralDisplayName = 'network managers'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkmanagers/connectivityconfigurations.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.network/networkmanagers/ipampools'; SingularDisplayName = 'IP address pool'; PluralDisplayName = 'IP address pools'; LowerSingularDisplayName = 'ip address pool'; LowerPluralDisplayName = 'ip address pools'; IsPreview = 'false'; Description = 'Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkmanagers/ipampools.svg'; Links = '[{"title":"Get consistent","uri":"https://aka.ms/portalfx/browse"}]'; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.network/networkmanagers/ipampools'; SingularDisplayName = 'IP address pool'; PluralDisplayName = 'IP address pools'; LowerSingularDisplayName = 'ip address pool'; LowerPluralDisplayName = 'ip address pools'; IsPreview = 'false'; Description = 'Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkmanagers/ipampools.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.network/networkmanagers/networkgroups'; SingularDisplayName = 'Network manager'; PluralDisplayName = 'Network managers'; LowerSingularDisplayName = 'network manager'; LowerPluralDisplayName = 'network managers'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkmanagers/networkgroups.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.network/networkmanagers/routingconfigurations'; SingularDisplayName = 'Network manager'; PluralDisplayName = 'Network managers'; LowerSingularDisplayName = 'network manager'; LowerPluralDisplayName = 'network managers'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkmanagers/routingconfigurations.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.network/networkmanagers/securityadminconfigurations'; SingularDisplayName = 'Network manager'; PluralDisplayName = 'Network managers'; LowerSingularDisplayName = 'network manager'; LowerPluralDisplayName = 'network managers'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkmanagers/securityadminconfigurations.svg'; Links = ''; } @@ -1306,13 +1364,13 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.network/networkmanagers/verifierworkspaces'; SingularDisplayName = 'Verifier Workspace'; PluralDisplayName = 'Verifier workspaces'; LowerSingularDisplayName = 'verifier workspace'; LowerPluralDisplayName = 'verifier workspaces'; IsPreview = 'false'; Description = 'Azure Virtual Network Manager''s verifier workspace enables you to check if your network policies allow or disallow traffic between your Azure network resources. You can create a verifier workspace from your network manager instance.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkmanagers/verifierworkspaces.svg'; Links = '[{"title":"Learn more","uri":"https://learn.microsoft.com/azure/virtual-network-manager/concept-virtual-network-verifier"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.network/networkprofiles'; SingularDisplayName = 'Microsoft.Network network profile'; PluralDisplayName = 'Microsoft.Network network profiles'; LowerSingularDisplayName = 'microsoft.network network profile'; LowerPluralDisplayName = 'microsoft.network network profiles'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkprofiles.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.network/networksecuritygroups'; SingularDisplayName = 'Network security group'; PluralDisplayName = 'Network security groups'; LowerSingularDisplayName = 'network security group'; LowerPluralDisplayName = 'network security groups'; IsPreview = 'false'; Description = 'Create a network security group with rules to filter inbound traffic to, and outbound traffic from, virtual machines and subnets.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networksecuritygroups.svg'; Links = '[{"title":"Learn more","uri":"https://go.microsoft.com/fwlink/p/?linkid=851112"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.network/networksecurityperimeters'; SingularDisplayName = 'Network Security Perimeter'; PluralDisplayName = 'Network Security Perimeters'; LowerSingularDisplayName = 'network security perimeter'; LowerPluralDisplayName = 'network security perimeters'; IsPreview = 'false'; Description = 'Network Security Perimeter is a boundary around PaaS resources. Access between resources on the same network security perimeter is allowed by default.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networksecurityperimeters.svg'; Links = '[{"title":"Learn more","uri":"https://aka.ms/portalfx/browse"}]'; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.network/networksecurityperimeters/profiles'; SingularDisplayName = 'Network Security Perimeter'; PluralDisplayName = 'Network Security Perimeters'; LowerSingularDisplayName = 'network security perimeter'; LowerPluralDisplayName = 'network security perimeters'; IsPreview = 'false'; Description = 'Network Security Perimeter is a boundary around PaaS resources. Access between resources on the same network security perimeter is allowed by default.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networksecurityperimeters/profiles.svg'; Links = '[{"title":"Learn more","uri":"https://aka.ms/portalfx/browse"}]'; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.network/networksecurityperimeters'; SingularDisplayName = 'Network Security Perimeter'; PluralDisplayName = 'Network Security Perimeters'; LowerSingularDisplayName = 'network security perimeter'; LowerPluralDisplayName = 'network security perimeters'; IsPreview = 'false'; Description = 'Network Security Perimeter is a boundary around PaaS resources. Access between resources on the same network security perimeter is allowed by default.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networksecurityperimeters.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.network/networksecurityperimeters/profiles'; SingularDisplayName = 'Network Security Perimeter Profile'; PluralDisplayName = 'Network Security Perimeter Profiles'; LowerSingularDisplayName = 'network security perimeter profile'; LowerPluralDisplayName = 'network security perimeter profiles'; IsPreview = 'false'; Description = 'Network Security Perimeter is a boundary around PaaS resources. Access between resources on the same network security perimeter is allowed by default.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networksecurityperimeters/profiles.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.network/networkverifiers'; SingularDisplayName = 'Virtual Network Verifier'; PluralDisplayName = 'Virtual Network Verifiers'; LowerSingularDisplayName = 'virtual network verifier'; LowerPluralDisplayName = 'virtual network verifiers'; IsPreview = 'false'; Description = 'Azure Virtual Network Verifier enables you to verify your virtual network configurations.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkverifiers.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.network/networkvirtualappliances'; SingularDisplayName = 'Microsoft.Network network virtual appliance'; PluralDisplayName = 'Microsoft.Network network virtual appliances'; LowerSingularDisplayName = 'microsoft.network network virtual appliance'; LowerPluralDisplayName = 'microsoft.network network virtual appliances'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkvirtualappliances.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.network/networkwatchers'; SingularDisplayName = 'Network Watcher'; PluralDisplayName = 'Network Watchers'; LowerSingularDisplayName = 'network watcher'; LowerPluralDisplayName = 'network watchers'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkwatchers.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.network/networkwatchers/flowlogs'; SingularDisplayName = 'Flow log'; PluralDisplayName = 'Flow logs'; LowerSingularDisplayName = 'flow log'; LowerPluralDisplayName = 'flow logs'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/networkwatchers/flowlogs.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.network/p2svpngateways'; SingularDisplayName = 'Microsoft.Network P2S VPN gateway'; PluralDisplayName = 'Microsoft.Network P2S VPN gateways'; LowerSingularDisplayName = 'microsoft.network p2s vpn gateway'; LowerPluralDisplayName = 'microsoft.network p2s vpn gateways'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/p2svpngateways.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.network/p2svpngateways'; SingularDisplayName = 'VPN Gateway (Point to Site)'; PluralDisplayName = 'VPN Gateways'; LowerSingularDisplayName = 'vpn gateway'; LowerPluralDisplayName = 'vpn gateways'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/p2svpngateways.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.network/privatednszones'; SingularDisplayName = 'Private DNS zone'; PluralDisplayName = 'Private DNS zones'; LowerSingularDisplayName = 'private dns zone'; LowerPluralDisplayName = 'private dns zones'; IsPreview = 'false'; Description = 'Azure Private DNS provides a reliable, secure DNS service to manage and resolve domain names in a virtual network without the need to add a custom DNS solution. By using private DNS zones, you can use your own custom domain names rather than the Azure-provided names available today. Using custom domain names helps you to tailor your virtual network architecture to best suit your organization''s needs. It provides name resolution for virtual machines (VMs) within a virtual network and between virtual networks. Additionally, you can configure zones names with a split-horizon view, which allows a private and a public DNS zone to share the name.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/privatednszones.svg'; Links = '[{"title":"Learn more","uri":"https://docs.microsoft.com/azure/dns/private-dns-overview"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.network/privateendpoints'; SingularDisplayName = 'Private endpoint'; PluralDisplayName = 'Private endpoints'; LowerSingularDisplayName = 'private endpoint'; LowerPluralDisplayName = 'private endpoints'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/privateendpoints.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.network/privatelinkservices'; SingularDisplayName = 'Private link service'; PluralDisplayName = 'Private link services'; LowerSingularDisplayName = 'private link service'; LowerPluralDisplayName = 'private link services'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/privatelinkservices.svg'; Links = ''; } @@ -1323,7 +1381,7 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.network/securitypartnerproviders'; SingularDisplayName = 'Microsoft.Network security partner provider'; PluralDisplayName = 'Microsoft.Network security partner providers'; LowerSingularDisplayName = 'microsoft.network security partner provider'; LowerPluralDisplayName = 'microsoft.network security partner providers'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/securitypartnerproviders.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.network/serviceendpointpolicies'; SingularDisplayName = 'Service endpoint policy'; PluralDisplayName = 'Service endpoint policies'; LowerSingularDisplayName = 'service endpoint policy'; LowerPluralDisplayName = 'service endpoint policies'; IsPreview = 'false'; Description = 'Service endpoint policies provide granular access control to specific service resources over the direct connection of service endpoints.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/serviceendpointpolicies.svg'; Links = '[{"title":"Learn more about Service endpoint policy","uri":"https://aka.ms/sepolicydoc"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.network/trafficmanagergeographichierarchies'; SingularDisplayName = 'Microsoft.Network traffic manager geographic hierarchy'; PluralDisplayName = 'Microsoft.Network traffic manager geographic hierarchies'; LowerSingularDisplayName = 'microsoft.network traffic manager geographic hierarchy'; LowerPluralDisplayName = 'microsoft.network traffic manager geographic hierarchies'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/trafficmanagergeographichierarchies.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.network/trafficmanagerprofiles'; SingularDisplayName = 'Traffic Manager profile'; PluralDisplayName = 'Traffic Manager profiles'; LowerSingularDisplayName = 'traffic manager profile'; LowerPluralDisplayName = 'traffic manager profiles'; IsPreview = 'false'; Description = 'Azure Traffic Manager is a DNS-based traffic load balancer. This service allows you to distribute traffic to your public facing applications across the global Azure regions. Traffic Manager also provides your public endpoints with high availability and quick responsiveness.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/trafficmanagerprofiles.svg'; Links = '[{"title":"Learn more","uri":"https://azure.microsoft.com/products/traffic-manager/"}]'; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.network/trafficmanagerprofiles'; SingularDisplayName = 'Traffic Manager profile'; PluralDisplayName = 'Traffic Manager profiles'; LowerSingularDisplayName = 'traffic manager profile'; LowerPluralDisplayName = 'traffic manager profiles'; IsPreview = 'false'; Description = 'Azure Traffic Manager is a DNS-based traffic load balancer. This service allows you to distribute traffic to your public facing applications across the global Azure regions. Traffic Manager also provides your public endpoints with high availability and quick responsiveness.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/trafficmanagerprofiles.svg'; Links = '[{"title":"Learn more","uri":"https://go.microsoft.com/fwlink/p/?linkid=847681"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.network/trafficmanagerusermetricskeys'; SingularDisplayName = 'Microsoft.Network traffic manager user metrics key'; PluralDisplayName = 'Microsoft.Network traffic manager user metrics keys'; LowerSingularDisplayName = 'microsoft.network traffic manager user metrics key'; LowerPluralDisplayName = 'microsoft.network traffic manager user metrics keys'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/trafficmanagerusermetricskeys.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.network/virtualhubs'; SingularDisplayName = 'Microsoft.Network/virtualHub'; PluralDisplayName = 'Microsoft.Network/virtualHubs'; LowerSingularDisplayName = 'microsoft.network/virtualHub'; LowerPluralDisplayName = 'microsoft.network/virtualHubs'; IsPreview = 'false'; Description = 'Create a Route Server to get started.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/virtualhubs.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.network/virtualnetworkgateways'; SingularDisplayName = 'Virtual network gateway'; PluralDisplayName = 'Virtual network gateways'; LowerSingularDisplayName = 'virtual network gateway'; LowerPluralDisplayName = 'virtual network gateways'; IsPreview = 'false'; Description = 'Azure VPN Gateway connects your on-premises networks to Azure through Site-to-Site VPNs in a similar way that you set up and connect to a remote branch office. The connectivity is secure and uses the industry-standard protocols Internet Protocol Security (IPsec) and Internet Key Exchange (IKE).'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/virtualnetworkgateways.svg'; Links = '[{"title":"Learn more about Virtual network gateway","uri":"https://azure.microsoft.com/services/vpn-gateway/"}]'; } @@ -1332,7 +1390,7 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.network/virtualrouters'; SingularDisplayName = 'Microsoft.Network virtual router'; PluralDisplayName = 'Microsoft.Network virtual routers'; LowerSingularDisplayName = 'microsoft.network virtual router'; LowerPluralDisplayName = 'microsoft.network virtual routers'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/virtualrouters.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.network/virtualrouters/peerings'; SingularDisplayName = 'Microsoft.Network virtual routers peering'; PluralDisplayName = 'Microsoft.Network virtual routers peerings'; LowerSingularDisplayName = 'microsoft.network virtual routers peering'; LowerPluralDisplayName = 'microsoft.network virtual routers peerings'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/virtualrouters/peerings.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.network/virtualwans'; SingularDisplayName = 'Virtual WAN'; PluralDisplayName = 'Virtual WANs'; LowerSingularDisplayName = 'virtual WAN'; LowerPluralDisplayName = 'virtual WANs'; IsPreview = 'false'; Description = 'Create a virtual WAN to get started. Next, create sites in your virtual WAN and connect them to virtual hubs in your preferred Azure regions. Within your virtual WAN, you can also connect hubs to your existing virtual networks.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/virtualwans.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.network/vpngateways'; SingularDisplayName = 'VPN Gateway'; PluralDisplayName = 'VPN Gateways'; LowerSingularDisplayName = 'vpn gateway'; LowerPluralDisplayName = 'vpn gateways'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/vpngateways.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.network/vpngateways'; SingularDisplayName = 'VPN Gateway (Site to Site)'; PluralDisplayName = 'VPN Gateways'; LowerSingularDisplayName = 'vpn gateway'; LowerPluralDisplayName = 'vpn gateways'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/vpngateways.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.network/vpngateways/vpnconnections'; SingularDisplayName = 'Microsoft.Network VPN gateways VPN connection'; PluralDisplayName = 'Microsoft.Network VPN gateways VPN connections'; LowerSingularDisplayName = 'microsoft.network vpn gateways vpn connection'; LowerPluralDisplayName = 'microsoft.network vpn gateways vpn connections'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/vpngateways/vpnconnections.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.network/vpngateways/vpnconnections/vpnlinkconnections'; SingularDisplayName = 'Microsoft.Network VPN gateways VPN connections VPN link connection'; PluralDisplayName = 'Microsoft.Network VPN gateways VPN connections VPN link connections'; LowerSingularDisplayName = 'microsoft.network vpn gateways vpn connections vpn link connection'; LowerPluralDisplayName = 'microsoft.network vpn gateways vpn connections vpn link connections'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/vpngateways/vpnconnections/vpnlinkconnections.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.network/vpnserverconfigurations'; SingularDisplayName = 'Microsoft.Network VPN server configuration'; PluralDisplayName = 'Microsoft.Network VPN server configurations'; LowerSingularDisplayName = 'microsoft.network vpn server configuration'; LowerPluralDisplayName = 'microsoft.network vpn server configurations'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.network/vpnserverconfigurations.svg'; Links = ''; } @@ -1359,6 +1417,7 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.networkcloud/edgeclusterskus'; SingularDisplayName = 'Microsoft.NetworkCloud edge cluster SKU'; PluralDisplayName = 'Microsoft.NetworkCloud edge cluster skus'; LowerSingularDisplayName = 'microsoft.networkcloud edge cluster sku'; LowerPluralDisplayName = 'microsoft.networkcloud edge cluster skus'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.networkcloud/edgeclusterskus.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.networkcloud/kubernetesclusters'; SingularDisplayName = 'Kubernetes Cluster (Operator Nexus)'; PluralDisplayName = 'Kubernetes Clusters (Operator Nexus)'; LowerSingularDisplayName = 'kubernetes cluster (operator nexus)'; LowerPluralDisplayName = 'kubernetes clusters (operator nexus)'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.networkcloud/kubernetesclusters.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.networkcloud/kubernetesclusters/agentpools'; SingularDisplayName = 'Agent Pool (Operator Nexus)'; PluralDisplayName = 'Agent Pools (Operator Nexus)'; LowerSingularDisplayName = 'agent pool (operator nexus)'; LowerPluralDisplayName = 'agent pools (operator nexus)'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.networkcloud/kubernetesclusters/agentpools.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.networkcloud/kubernetesclusters/features'; SingularDisplayName = 'Kubernetes Cluster Feature (Operator Nexus)'; PluralDisplayName = 'Kubernetes Cluster Features (Operator Nexus)'; LowerSingularDisplayName = 'kubernetes cluster feature (operator nexus)'; LowerPluralDisplayName = 'kubernetes cluster features (operator nexus)'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.networkcloud/kubernetesclusters/features.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.networkcloud/l2networks'; SingularDisplayName = 'Layer 2 Network (Operator Nexus)'; PluralDisplayName = 'Layer 2 Networks (Operator Nexus)'; LowerSingularDisplayName = 'layer 2 network (operator nexus)'; LowerPluralDisplayName = 'layer 2 networks (operator nexus)'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.networkcloud/l2networks.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.networkcloud/l3networks'; SingularDisplayName = 'Layer 3 Network (Operator Nexus)'; PluralDisplayName = 'Layer 3 Networks (Operator Nexus)'; LowerSingularDisplayName = 'layer 3 network (operator nexus)'; LowerPluralDisplayName = 'layer 3 networks (operator nexus)'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.networkcloud/l3networks.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.networkcloud/racks'; SingularDisplayName = 'Compute Rack (Operator Nexus)'; PluralDisplayName = 'Compute Racks (Operator Nexus)'; LowerSingularDisplayName = 'compute rack (operator nexus)'; LowerPluralDisplayName = 'compute racks (operator nexus)'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.networkcloud/racks.svg'; Links = ''; } @@ -1432,6 +1491,7 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.offazurespringboot/springbootsites/springbootapps'; SingularDisplayName = 'Microsoft.OffAzureSpringBoot springbootsites springbootapp'; PluralDisplayName = 'Microsoft.OffAzureSpringBoot springbootsites springbootapps'; LowerSingularDisplayName = 'microsoft.offazurespringboot springbootsites springbootapp'; LowerPluralDisplayName = 'microsoft.offazurespringboot springbootsites springbootapps'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.offazurespringboot/springbootsites/springbootapps.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.offazurespringboot/springbootsites/springbootservers'; SingularDisplayName = 'Microsoft.OffAzureSpringBoot springbootsites springbootserver'; PluralDisplayName = 'Microsoft.OffAzureSpringBoot springbootsites springbootservers'; LowerSingularDisplayName = 'microsoft.offazurespringboot springbootsites springbootserver'; LowerPluralDisplayName = 'microsoft.offazurespringboot springbootsites springbootservers'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.offazurespringboot/springbootsites/springbootservers.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.offazurespringboot/springbootsites/summaries'; SingularDisplayName = 'Microsoft.OffAzureSpringBoot springbootsites summary'; PluralDisplayName = 'Microsoft.OffAzureSpringBoot springbootsites summaries'; LowerSingularDisplayName = 'microsoft.offazurespringboot springbootsites summary'; LowerPluralDisplayName = 'microsoft.offazurespringboot springbootsites summaries'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.offazurespringboot/springbootsites/summaries.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.onlineexperimentation/workspaces'; SingularDisplayName = 'Online Experimentation Workspace'; PluralDisplayName = 'Online Experimentation Workspaces'; LowerSingularDisplayName = 'online experimentation workspace'; LowerPluralDisplayName = 'online experimentation workspaces'; IsPreview = 'false'; Description = 'An online experiment workspace resource.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.onlineexperimentation/workspaces.svg'; Links = '[{"title":"Learn Online Experimentation","uri":"https://aka.ms/exp/public/docs"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.openenergyplatform/energyservices'; SingularDisplayName = 'Azure Data Manager for Energy'; PluralDisplayName = 'Azure Data Manager for Energy'; LowerSingularDisplayName = 'Azure Data Manager for Energy'; LowerPluralDisplayName = 'Azure Data Manager for Energy'; IsPreview = 'false'; Description = 'Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.openenergyplatform/energyservices.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.openlogisticsplatform/workspaces'; SingularDisplayName = 'Microsoft.OpenLogisticsPlatform workspace'; PluralDisplayName = 'Microsoft.OpenLogisticsPlatform workspaces'; LowerSingularDisplayName = 'microsoft.openlogisticsplatform workspace'; LowerPluralDisplayName = 'microsoft.openlogisticsplatform workspaces'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.openlogisticsplatform/workspaces.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.openlogisticsplatform/workspaces/applicationregistrations'; SingularDisplayName = 'Microsoft.OpenLogisticsPlatform workspaces application registration'; PluralDisplayName = 'Microsoft.OpenLogisticsPlatform workspaces application registrations'; LowerSingularDisplayName = 'microsoft.openlogisticsplatform workspaces application registration'; LowerPluralDisplayName = 'microsoft.openlogisticsplatform workspaces application registrations'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.openlogisticsplatform/workspaces/applicationregistrations.svg'; Links = ''; } @@ -1439,7 +1499,7 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.openlogisticsplatform/workspaces/eventgridfilters'; SingularDisplayName = 'Microsoft.OpenLogisticsPlatform workspaces event grid filter'; PluralDisplayName = 'Microsoft.OpenLogisticsPlatform workspaces event grid filters'; LowerSingularDisplayName = 'microsoft.openlogisticsplatform workspaces event grid filter'; LowerPluralDisplayName = 'microsoft.openlogisticsplatform workspaces event grid filters'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.openlogisticsplatform/workspaces/eventgridfilters.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.openlogisticsplatform/workspaces/shares'; SingularDisplayName = 'Microsoft.OpenLogisticsPlatform workspaces share'; PluralDisplayName = 'Microsoft.OpenLogisticsPlatform workspaces shares'; LowerSingularDisplayName = 'microsoft.openlogisticsplatform workspaces share'; LowerPluralDisplayName = 'microsoft.openlogisticsplatform workspaces shares'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.openlogisticsplatform/workspaces/shares.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.openlogisticsplatform/workspaces/sharesubscriptions'; SingularDisplayName = 'Microsoft.OpenLogisticsPlatform workspaces share subscription'; PluralDisplayName = 'Microsoft.OpenLogisticsPlatform workspaces share subscriptions'; LowerSingularDisplayName = 'microsoft.openlogisticsplatform workspaces share subscription'; LowerPluralDisplayName = 'microsoft.openlogisticsplatform workspaces share subscriptions'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.openlogisticsplatform/workspaces/sharesubscriptions.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.operationalinsights/clusters'; SingularDisplayName = 'Log Analytics dedicated cluster'; PluralDisplayName = 'Log Analytics dedicated clusters'; LowerSingularDisplayName = 'log analytics dedicated cluster'; LowerPluralDisplayName = 'log analytics dedicated clusters'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.operationalinsights/clusters.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.operationalinsights/clusters'; SingularDisplayName = 'Log Analytics dedicated cluster'; PluralDisplayName = 'Log Analytics dedicated clusters'; LowerSingularDisplayName = 'log analytics dedicated cluster'; LowerPluralDisplayName = 'log analytics dedicated clusters'; IsPreview = 'false'; Description = 'Dedicated cluster in Azure Monitor enables advanced security and control capabilities including Customer-managed keys, Lockbox, Availability zones, Ingest from Azure Event Hubs, and cost optimization. Linking and unlinking workspaces from cluster has no interruption to ingestion and query operations.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.operationalinsights/clusters.svg'; Links = '[{"title":"Learn more","uri":"https://aka.ms/LogsDCluster"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.operationalinsights/querypacks'; SingularDisplayName = 'Log Analytics query pack'; PluralDisplayName = 'Log Analytics query packs'; LowerSingularDisplayName = 'log analytics query pack'; LowerPluralDisplayName = 'log analytics query packs'; IsPreview = 'false'; Description = 'Azure Monitor Log Analytics query packs are used to hold and manage Log Analytics queries.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.operationalinsights/querypacks.svg'; Links = '[{"title":"Click this link to learn more.","uri":"https://go.microsoft.com/fwlink/?linkid=2142312"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.operationalinsights/workspaces'; SingularDisplayName = 'Log Analytics workspace'; PluralDisplayName = 'Log Analytics workspaces'; LowerSingularDisplayName = 'log analytics workspace'; LowerPluralDisplayName = 'log analytics workspaces'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.operationalinsights/workspaces.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.operationsmanagement/managementassociations'; SingularDisplayName = 'Microsoft.OperationsManagement management association'; PluralDisplayName = 'Microsoft.OperationsManagement management associations'; LowerSingularDisplayName = 'microsoft.operationsmanagement management association'; LowerPluralDisplayName = 'microsoft.operationsmanagement management associations'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.operationsmanagement/managementassociations.svg'; Links = ''; } @@ -1498,7 +1558,7 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.programmableconnectivity/gateways'; SingularDisplayName = 'APC Gateway'; PluralDisplayName = 'APC Gateways'; LowerSingularDisplayName = 'apc gateway'; LowerPluralDisplayName = 'apc gateways'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.programmableconnectivity/gateways.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.programmableconnectivity/operatorapiconnections'; SingularDisplayName = 'APC Operator API Connection'; PluralDisplayName = 'APC Operator API Connections'; LowerSingularDisplayName = 'apc operator api connection'; LowerPluralDisplayName = 'apc operator api connections'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.programmableconnectivity/operatorapiconnections.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.programmableconnectivity/operatorapiplans'; SingularDisplayName = 'APC Operator API Plan'; PluralDisplayName = 'APC Operator API Plans'; LowerSingularDisplayName = 'apc operator api plan'; LowerPluralDisplayName = 'apc operator api plans'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.programmableconnectivity/operatorapiplans.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.proposal/proposals'; SingularDisplayName = 'Microsoft.Proposal proposal'; PluralDisplayName = 'Microsoft.Proposal proposals'; LowerSingularDisplayName = 'microsoft.proposal proposal'; LowerPluralDisplayName = 'microsoft.proposal proposals'; IsPreview = 'false'; Description = 'A ProposalProviderHub resource'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.proposal/proposals.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.proposal/proposals'; SingularDisplayName = 'Microsoft.Proposal proposal'; PluralDisplayName = 'Microsoft.Proposal proposals'; LowerSingularDisplayName = 'microsoft.proposal proposal'; LowerPluralDisplayName = 'microsoft.proposal proposals'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.proposal/proposals.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.providerhub/providerregistrations'; SingularDisplayName = 'Resource Provider as a Service'; PluralDisplayName = 'Resource Providers'; LowerSingularDisplayName = 'resource provider as a service'; LowerPluralDisplayName = 'resource providers'; IsPreview = 'false'; Description = 'Create a fully-integrated Azure service with Resource Provider as a Service'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.providerhub/providerregistrations.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.providerhub/providerregistrations/customrollouts'; SingularDisplayName = 'Rollout'; PluralDisplayName = 'Rollouts'; LowerSingularDisplayName = 'rollout'; LowerPluralDisplayName = 'rollouts'; IsPreview = 'false'; Description = 'Azure resource provider enables you to deliver your service functionality as native Azure resources in the Azure Control Plane. Deliver them to your organization or release globally and monetize as a part of a new Azure service?.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.providerhub/providerregistrations/customrollouts.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.providerhub/providerregistrations/defaultrollouts'; SingularDisplayName = 'Rollout'; PluralDisplayName = 'Rollouts'; LowerSingularDisplayName = 'rollout'; LowerPluralDisplayName = 'rollouts'; IsPreview = 'false'; Description = 'Azure resource provider enables you to deliver your service functionality as native Azure resources in the Azure Control Plane. Deliver them to your organization or release globally and monetize as a part of a new Azure service?.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.providerhub/providerregistrations/defaultrollouts.svg'; Links = ''; } @@ -1564,6 +1624,7 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.saas/applications'; SingularDisplayName = 'Software as a Service (classic)'; PluralDisplayName = 'Software as a Service (classic)'; LowerSingularDisplayName = 'Software as a Service (classic)'; LowerPluralDisplayName = 'Software as a Service (classic)'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.saas/applications.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.saas/resources'; SingularDisplayName = 'SaaS'; PluralDisplayName = 'SaaS'; LowerSingularDisplayName = 'SaaS'; LowerPluralDisplayName = 'SaaS'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.saas/resources.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.saas/saasresources'; SingularDisplayName = 'SaaS (classic)'; PluralDisplayName = 'SaaS (classic)'; LowerSingularDisplayName = 'SaaS (classic)'; LowerPluralDisplayName = 'SaaS (classic)'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.saas/saasresources.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.saashub/cloudservices'; SingularDisplayName = 'Microsoft.SaaSHub cloud service'; PluralDisplayName = 'Microsoft.SaaSHub cloud services'; LowerSingularDisplayName = 'microsoft.saashub cloud service'; LowerPluralDisplayName = 'microsoft.saashub cloud services'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.saashub/cloudservices.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.saashub/cloudservices/hidden'; SingularDisplayName = 'Microsoft SaaS'; PluralDisplayName = 'Microsoft SaaS'; LowerSingularDisplayName = 'Microsoft SaaS'; LowerPluralDisplayName = 'Microsoft SaaS'; IsPreview = 'true'; Description = 'Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.saashub/cloudservices/hidden.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.salescopilot/conversationintelligencerecordingaccounts'; SingularDisplayName = 'Microsoft.SalesCopilot conversation intelligence recording account'; PluralDisplayName = 'Microsoft.SalesCopilot conversation intelligence recording accounts'; LowerSingularDisplayName = 'microsoft.salescopilot conversation intelligence recording account'; LowerPluralDisplayName = 'microsoft.salescopilot conversation intelligence recording accounts'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.salescopilot/conversationintelligencerecordingaccounts.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.scheduler/jobcollections'; SingularDisplayName = 'Scheduler job collection'; PluralDisplayName = 'Scheduler job collections'; LowerSingularDisplayName = 'microsoft.scheduler job collection'; LowerPluralDisplayName = 'microsoft.scheduler job collections'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.scheduler/jobcollections.svg'; Links = ''; } @@ -1579,6 +1640,7 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.scvmm/virtualnetworks'; SingularDisplayName = 'Microsoft.ScVmm virtual network'; PluralDisplayName = 'Microsoft.ScVmm virtual networks'; LowerSingularDisplayName = 'microsoft.scvmm virtual network'; LowerPluralDisplayName = 'microsoft.scvmm virtual networks'; IsPreview = 'false'; Description = 'The VirtualNetworks resource definition.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.scvmm/virtualnetworks.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.scvmm/vmmservers'; SingularDisplayName = 'SCVMM management server'; PluralDisplayName = 'SCVMM management servers'; LowerSingularDisplayName = 'SCVMM management server'; LowerPluralDisplayName = 'SCVMM management servers'; IsPreview = 'false'; Description = 'Connect your existing SCVMM management server to Azure so you can provision and manage VMs on it through Azure Arc.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.scvmm/vmmservers.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.search/searchservices'; SingularDisplayName = 'Search service'; PluralDisplayName = 'Search services'; LowerSingularDisplayName = 'search service'; LowerPluralDisplayName = 'search services'; IsPreview = 'false'; Description = 'Information retrieval at scale for generative AI (RAG) and classic search over user-owned content.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.search/searchservices.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.secretmanagementsampleprovider/forecasts'; SingularDisplayName = 'Microsoft.SecretManagementSampleProvider forecast'; PluralDisplayName = 'Microsoft.SecretManagementSampleProvider forecasts'; LowerSingularDisplayName = 'microsoft.secretmanagementsampleprovider forecast'; LowerPluralDisplayName = 'microsoft.secretmanagementsampleprovider forecasts'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.secretmanagementsampleprovider/forecasts.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.secretsynccontroller/azurekeyvaultsecretproviderclasses'; SingularDisplayName = 'Microsoft.SecretSyncController Azure key vault secret provider class'; PluralDisplayName = 'Microsoft.SecretSyncController Azure key vault secret provider classes'; LowerSingularDisplayName = 'microsoft.secretsynccontroller azure key vault secret provider class'; LowerPluralDisplayName = 'microsoft.secretsynccontroller azure key vault secret provider classes'; IsPreview = 'false'; Description = 'The AzureKeyVaultSecretProviderClass resource.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.secretsynccontroller/azurekeyvaultsecretproviderclasses.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.secretsynccontroller/secretsyncs'; SingularDisplayName = 'Microsoft.SecretSyncController secret sync'; PluralDisplayName = 'Microsoft.SecretSyncController secret syncs'; LowerSingularDisplayName = 'microsoft.secretsynccontroller secret sync'; LowerPluralDisplayName = 'microsoft.secretsynccontroller secret syncs'; IsPreview = 'false'; Description = 'The SecretSync resource.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.secretsynccontroller/secretsyncs.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.security/adaptivenetworkhardenings'; SingularDisplayName = 'Microsoft.Security adaptive network hardening'; PluralDisplayName = 'Microsoft.Security adaptive network hardenings'; LowerSingularDisplayName = 'microsoft.security adaptive network hardening'; LowerPluralDisplayName = 'microsoft.security adaptive network hardenings'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.security/adaptivenetworkhardenings.svg'; Links = ''; } @@ -1691,6 +1753,7 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.storageactions/storagetasks'; SingularDisplayName = 'Storage task - Azure Storage Actions'; PluralDisplayName = 'Storage tasks - Azure Storage Actions'; LowerSingularDisplayName = 'storage task - azure storage actions'; LowerPluralDisplayName = 'storage tasks - azure storage actions'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.storageactions/storagetasks.svg'; Links = '[{"title":"Learn more","uri":"https://www.bing.com"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.storagecache/amlfilesystems'; SingularDisplayName = 'Azure Managed Lustre'; PluralDisplayName = 'Azure Managed Lustre'; LowerSingularDisplayName = 'azure managed lustre'; LowerPluralDisplayName = 'azure managed lustre'; IsPreview = 'false'; Description = 'File caching for high-performance computing (HPC). Run flexible, file-based workloads in Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.storagecache/amlfilesystems.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.storagecache/caches'; SingularDisplayName = 'HPC cache'; PluralDisplayName = 'HPC caches'; LowerSingularDisplayName = 'hpc cache'; LowerPluralDisplayName = 'hpc caches'; IsPreview = 'false'; Description = 'File caching for high-performance computing (HPC). Run flexible, file-based workloads in Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.storagecache/caches.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.storagediscovery/storagediscoveryworkspaces'; SingularDisplayName = 'Storage Discovery workspace'; PluralDisplayName = 'Storage Discovery workspaces'; LowerSingularDisplayName = 'storage discovery workspace'; LowerPluralDisplayName = 'storage discovery workspaces'; IsPreview = 'false'; Description = 'Storage Discovery placeholder description'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.storagediscovery/storagediscoveryworkspaces.svg'; Links = '[{"title":"Learn more","uri":"https://microsoft.com"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.storageinsights/storagecollectionrules'; SingularDisplayName = 'Microsoft.StorageInsights storage collection rule'; PluralDisplayName = 'Microsoft.StorageInsights storage collection rules'; LowerSingularDisplayName = 'microsoft.storageinsights storage collection rule'; LowerPluralDisplayName = 'microsoft.storageinsights storage collection rules'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.storageinsights/storagecollectionrules.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.storagemover/storagemovers'; SingularDisplayName = 'Storage mover'; PluralDisplayName = 'Storage movers'; LowerSingularDisplayName = 'storage mover'; LowerPluralDisplayName = 'storage movers'; IsPreview = 'false'; Description = 'Azure Storage Mover is a migration service for your on-premises file shares to Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.storagemover/storagemovers.svg'; Links = '[{"title":"Learn more about storage mover","uri":"https://go.microsoft.com/fwlink/?LinkId=2236486"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.storagepool/diskpools'; SingularDisplayName = 'Microsoft.StoragePool disk pool'; PluralDisplayName = 'Microsoft.StoragePool disk pools'; LowerSingularDisplayName = 'microsoft.storagepool disk pool'; LowerPluralDisplayName = 'microsoft.storagepool disk pools'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.storagepool/diskpools.svg'; Links = ''; } @@ -1734,7 +1797,7 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.support/services'; SingularDisplayName = 'Microsoft.Support service'; PluralDisplayName = 'Microsoft.Support services'; LowerSingularDisplayName = 'microsoft.support service'; LowerPluralDisplayName = 'microsoft.support services'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.support/services.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.support/services/problemclassifications'; SingularDisplayName = 'Microsoft.Support services problem classification'; PluralDisplayName = 'Microsoft.Support services problem classifications'; LowerSingularDisplayName = 'microsoft.support services problem classification'; LowerPluralDisplayName = 'microsoft.support services problem classifications'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.support/services/problemclassifications.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.support/supporttickets'; SingularDisplayName = 'Support Request'; PluralDisplayName = 'Manage support requests'; LowerSingularDisplayName = 'support request'; LowerPluralDisplayName = 'support requests'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.support/supporttickets.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.sustainabilityservices/calculations'; SingularDisplayName = 'Microsoft.SustainabilityServices calculation'; PluralDisplayName = 'Microsoft.SustainabilityServices calculations'; LowerSingularDisplayName = 'microsoft.sustainabilityservices calculation'; LowerPluralDisplayName = 'microsoft.sustainabilityservices calculations'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.sustainabilityservices/calculations.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.sustainabilityservices/calculations'; SingularDisplayName = 'Project Sustainability Calculator'; PluralDisplayName = 'Project Sustainability Calculator'; LowerSingularDisplayName = 'Project Sustainability Calculator'; LowerPluralDisplayName = 'Project Sustainability Calculator'; IsPreview = 'true'; Description = 'Start assessing your organization''s environmental emissions footprint across scope 1, scope 2, and scope 3 by creating a Project Sustainability Calculator resource.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.sustainabilityservices/calculations.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.symphony/instances'; SingularDisplayName = 'Microsoft.Symphony instance'; PluralDisplayName = 'Microsoft.Symphony instances'; LowerSingularDisplayName = 'microsoft.symphony instance'; LowerPluralDisplayName = 'microsoft.symphony instances'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.symphony/instances.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.symphony/solutions'; SingularDisplayName = 'Microsoft.Symphony solution'; PluralDisplayName = 'Microsoft.Symphony solutions'; LowerSingularDisplayName = 'microsoft.symphony solution'; LowerPluralDisplayName = 'microsoft.symphony solutions'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.symphony/solutions.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.symphony/targets'; SingularDisplayName = 'Microsoft.Symphony target'; PluralDisplayName = 'Microsoft.Symphony targets'; LowerSingularDisplayName = 'microsoft.symphony target'; LowerPluralDisplayName = 'microsoft.symphony targets'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.symphony/targets.svg'; Links = ''; } @@ -1757,6 +1820,7 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.toolchainorchestrator/campaigns/versions'; SingularDisplayName = 'Microsoft.ToolchainOrchestrator campaigns version'; PluralDisplayName = 'Microsoft.ToolchainOrchestrator campaigns versions'; LowerSingularDisplayName = 'microsoft.toolchainorchestrator campaigns version'; LowerPluralDisplayName = 'microsoft.toolchainorchestrator campaigns versions'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/campaigns/versions.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.toolchainorchestrator/catalogs'; SingularDisplayName = 'Microsoft.ToolchainOrchestrator catalog'; PluralDisplayName = 'Microsoft.ToolchainOrchestrator catalogs'; LowerSingularDisplayName = 'microsoft.toolchainorchestrator catalog'; LowerPluralDisplayName = 'microsoft.toolchainorchestrator catalogs'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/catalogs.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.toolchainorchestrator/catalogs/versions'; SingularDisplayName = 'Microsoft.ToolchainOrchestrator catalogs version'; PluralDisplayName = 'Microsoft.ToolchainOrchestrator catalogs versions'; LowerSingularDisplayName = 'microsoft.toolchainorchestrator catalogs version'; LowerPluralDisplayName = 'microsoft.toolchainorchestrator catalogs versions'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/catalogs/versions.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.toolchainorchestrator/diagnostics'; SingularDisplayName = 'Microsoft.ToolchainOrchestrator diagnostic'; PluralDisplayName = 'Microsoft.ToolchainOrchestrator diagnostics'; LowerSingularDisplayName = 'microsoft.toolchainorchestrator diagnostic'; LowerPluralDisplayName = 'microsoft.toolchainorchestrator diagnostics'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/diagnostics.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.toolchainorchestrator/instances'; SingularDisplayName = 'Microsoft.ToolchainOrchestrator instance'; PluralDisplayName = 'Microsoft.ToolchainOrchestrator instances'; LowerSingularDisplayName = 'microsoft.toolchainorchestrator instance'; LowerPluralDisplayName = 'microsoft.toolchainorchestrator instances'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/instances.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.toolchainorchestrator/instances/versions'; SingularDisplayName = 'Microsoft.ToolchainOrchestrator instances version'; PluralDisplayName = 'Microsoft.ToolchainOrchestrator instances versions'; LowerSingularDisplayName = 'microsoft.toolchainorchestrator instances version'; LowerPluralDisplayName = 'microsoft.toolchainorchestrator instances versions'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/instances/versions.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.toolchainorchestrator/solutions'; SingularDisplayName = 'Microsoft.ToolchainOrchestrator solution'; PluralDisplayName = 'Microsoft.ToolchainOrchestrator solutions'; LowerSingularDisplayName = 'microsoft.toolchainorchestrator solution'; LowerPluralDisplayName = 'microsoft.toolchainorchestrator solutions'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.toolchainorchestrator/solutions.svg'; Links = ''; } @@ -1815,13 +1879,17 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.windowspushnotificationservices/registrations'; SingularDisplayName = 'Windows Push Notification Service'; PluralDisplayName = 'Windows Push Notification Services'; LowerSingularDisplayName = 'windows push notification service'; LowerPluralDisplayName = 'windows push notification services'; IsPreview = 'false'; Description = 'Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.windowspushnotificationservices/registrations.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.workloadmonitor/monitors'; SingularDisplayName = 'Microsoft.WorkloadMonitor monitor'; PluralDisplayName = 'Microsoft.WorkloadMonitor monitors'; LowerSingularDisplayName = 'microsoft.workloadmonitor monitor'; LowerPluralDisplayName = 'microsoft.workloadmonitor monitors'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.workloadmonitor/monitors.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.workloadmonitor/monitors/history'; SingularDisplayName = 'Microsoft.WorkloadMonitor monitors history'; PluralDisplayName = 'Microsoft.WorkloadMonitor monitors history'; LowerSingularDisplayName = 'microsoft.workloadmonitor monitors history'; LowerPluralDisplayName = 'microsoft.workloadmonitor monitors history'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.workloadmonitor/monitors/history.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.workloads/configurationvalidationresults'; SingularDisplayName = 'Microsoft.Workloads configuration validation result'; PluralDisplayName = 'Microsoft.Workloads configuration validation results'; LowerSingularDisplayName = 'microsoft.workloads configuration validation result'; LowerPluralDisplayName = 'microsoft.workloads configuration validation results'; IsPreview = 'false'; Description = 'Configuration validation results.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/configurationvalidationresults.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.workloads/configurationvalidationresults'; SingularDisplayName = 'Microsoft.Workloads configuration validation result'; PluralDisplayName = 'Microsoft.Workloads configuration validation results'; LowerSingularDisplayName = 'microsoft.workloads configuration validation result'; LowerPluralDisplayName = 'microsoft.workloads configuration validation results'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/configurationvalidationresults.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.workloads/connectors'; SingularDisplayName = 'Microsoft.Workloads connector'; PluralDisplayName = 'Microsoft.Workloads connectors'; LowerSingularDisplayName = 'microsoft.workloads connector'; LowerPluralDisplayName = 'microsoft.workloads connectors'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/connectors.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.workloads/connectors/acssbackups'; SingularDisplayName = 'Microsoft.Workloads connectors acss backup'; PluralDisplayName = 'Microsoft.Workloads connectors acss backups'; LowerSingularDisplayName = 'microsoft.workloads connectors acss backup'; LowerPluralDisplayName = 'microsoft.workloads connectors acss backups'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/connectors/acssbackups.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.workloads/connectors/amsinsights'; SingularDisplayName = 'Microsoft.Workloads connectors ams insight'; PluralDisplayName = 'Microsoft.Workloads connectors ams insights'; LowerSingularDisplayName = 'microsoft.workloads connectors ams insight'; LowerPluralDisplayName = 'microsoft.workloads connectors ams insights'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/connectors/amsinsights.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.workloads/connectors/sapvirtualinstancemonitors'; SingularDisplayName = 'Microsoft.Workloads connectors sap virtual instance monitor'; PluralDisplayName = 'Microsoft.Workloads connectors sap virtual instance monitors'; LowerSingularDisplayName = 'microsoft.workloads connectors sap virtual instance monitor'; LowerPluralDisplayName = 'microsoft.workloads connectors sap virtual instance monitors'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/connectors/sapvirtualinstancemonitors.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.workloads/epicvirtualinstances'; SingularDisplayName = 'Virtual Instance for Epic solution'; PluralDisplayName = 'Virtual Instance for Epic solutions'; LowerSingularDisplayName = 'virtual instance for epic solution'; LowerPluralDisplayName = 'virtual instance for epic solutions'; IsPreview = 'false'; Description = 'Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/epicvirtualinstances.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.workloads/insights'; SingularDisplayName = 'Microsoft.Workloads insight'; PluralDisplayName = 'Microsoft.Workloads insights'; LowerSingularDisplayName = 'microsoft.workloads insight'; LowerPluralDisplayName = 'microsoft.workloads insights'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/insights.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.workloads/instancegroupmonitors'; SingularDisplayName = 'Microsoft.Workloads instance group monitor'; PluralDisplayName = 'Microsoft.Workloads instance group monitors'; LowerSingularDisplayName = 'microsoft.workloads instance group monitor'; LowerPluralDisplayName = 'microsoft.workloads instance group monitors'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/instancegroupmonitors.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.workloads/instancehealthdefinitions'; SingularDisplayName = 'Microsoft.Workloads instance health definition'; PluralDisplayName = 'Microsoft.Workloads instance health definitions'; LowerSingularDisplayName = 'microsoft.workloads instance health definition'; LowerPluralDisplayName = 'microsoft.workloads instance health definitions'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/instancehealthdefinitions.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.workloads/instancehealthdefinitions/signaldefinitions'; SingularDisplayName = 'Microsoft.Workloads instance health definitions signal definition'; PluralDisplayName = 'Microsoft.Workloads instance health definitions signal definitions'; LowerSingularDisplayName = 'microsoft.workloads instance health definitions signal definition'; LowerPluralDisplayName = 'microsoft.workloads instance health definitions signal definitions'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/instancehealthdefinitions/signaldefinitions.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.workloads/instancemonitors'; SingularDisplayName = 'Microsoft.Workloads instance monitor'; PluralDisplayName = 'Microsoft.Workloads instance monitors'; LowerSingularDisplayName = 'microsoft.workloads instance monitor'; LowerPluralDisplayName = 'microsoft.workloads instance monitors'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/instancemonitors.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.workloads/monitors'; SingularDisplayName = 'Azure Monitor for SAP solutions'; PluralDisplayName = 'Azure Monitors for SAP solutions'; LowerSingularDisplayName = 'azure monitor for SAP solutions'; LowerPluralDisplayName = 'azure monitors for SAP solutions'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/monitors.svg'; Links = '[{"title":"Learn more about architecture","uri":"https://go.microsoft.com/fwlink/?linkid=2205007"}]'; } ,[PSCustomObject]@{ ResourceType = 'microsoft.workloads/oraclevirtualinstances'; SingularDisplayName = 'Microsoft.Workloads oracle virtual instance'; PluralDisplayName = 'Microsoft.Workloads oracle virtual instances'; LowerSingularDisplayName = 'microsoft.workloads oracle virtual instance'; LowerPluralDisplayName = 'microsoft.workloads oracle virtual instances'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/oraclevirtualinstances.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.workloads/oraclevirtualinstances/databaseinstances'; SingularDisplayName = 'Microsoft.Workloads oracle virtual instances database instance'; PluralDisplayName = 'Microsoft.Workloads oracle virtual instances database instances'; LowerSingularDisplayName = 'microsoft.workloads oracle virtual instances database instance'; LowerPluralDisplayName = 'microsoft.workloads oracle virtual instances database instances'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/oraclevirtualinstances/databaseinstances.svg'; Links = ''; } @@ -1834,16 +1902,18 @@ function Get-OpenDataResourceType ,[PSCustomObject]@{ ResourceType = 'microsoft.workloads/sapvirtualinstances/applicationinstances'; SingularDisplayName = 'App server instance for SAP solutions'; PluralDisplayName = 'App server instances for SAP solutions'; LowerSingularDisplayName = 'App server instance for SAP solutions'; LowerPluralDisplayName = 'App server instances for SAP solutions'; IsPreview = 'false'; Description = 'App server instance is part of a Virtual Instance for SAP solutions. Try changing or clearing your filters. You can also Create a Virtual instance for SAP solutions that runs on Azure to take advantage of the best that Azure has to offer.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/sapvirtualinstances/applicationinstances.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.workloads/sapvirtualinstances/centralinstances'; SingularDisplayName = 'Central service instance for SAP solutions'; PluralDisplayName = 'Central service instances for SAP solutions'; LowerSingularDisplayName = 'Central service instance for SAP solutions'; LowerPluralDisplayName = 'Central service instances for SAP solutions'; IsPreview = 'false'; Description = 'Central service instance is part of a Virtual Instance for SAP solutions. Try changing or clearing your filters. You can also Create a Virtual instance for SAP solutions that runs on Azure to take advantage of the best that Azure has to offer.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/sapvirtualinstances/centralinstances.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'microsoft.workloads/sapvirtualinstances/databaseinstances'; SingularDisplayName = 'Database for SAP solutions'; PluralDisplayName = 'Databases for SAP solutions'; LowerSingularDisplayName = 'Database for SAP solutions'; LowerPluralDisplayName = 'Databases for SAP solutions'; IsPreview = 'false'; Description = 'Database is part of a Virtual Instance for SAP solutions. Try changing or clearing your filters. You can also Create a Virtual instance for SAP solutions that runs on Azure to take advantage of the best that Azure has to offer.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/sapvirtualinstances/databaseinstances.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.workloads/virtualinstances'; SingularDisplayName = 'Microsoft.Workloads virtual instance'; PluralDisplayName = 'Microsoft.Workloads virtual instances'; LowerSingularDisplayName = 'microsoft.workloads virtual instance'; LowerPluralDisplayName = 'microsoft.workloads virtual instances'; IsPreview = 'false'; Description = 'Defines the Virtual Instance (VI) resource.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/virtualinstances.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.workloads/virtualinstances/components'; SingularDisplayName = 'Microsoft.Workloads virtual instances component'; PluralDisplayName = 'Microsoft.Workloads virtual instances components'; LowerSingularDisplayName = 'microsoft.workloads virtual instances component'; LowerPluralDisplayName = 'microsoft.workloads virtual instances components'; IsPreview = 'false'; Description = 'Defines the Workload Component resource.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/virtualinstances/components.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'microsoft.zerotrustsegmentation/segmentationmanagers'; SingularDisplayName = 'Microsoft.ZeroTrustSegmentation segmentation manager'; PluralDisplayName = 'Microsoft.ZeroTrustSegmentation segmentation managers'; LowerSingularDisplayName = 'microsoft.zerotrustsegmentation segmentation manager'; LowerPluralDisplayName = 'microsoft.zerotrustsegmentation segmentation managers'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.zerotrustsegmentation/segmentationmanagers.svg'; Links = ''; } - ,[PSCustomObject]@{ ResourceType = 'mongodb.atlas/organizations'; SingularDisplayName = 'MongoDB Atlas - An Azure Native ISV Service'; PluralDisplayName = 'MongoDB Atlas - An Azure Native ISV Service'; LowerSingularDisplayName = 'MongoDB Atlas - An Azure Native ISV Service'; LowerPluralDisplayName = 'MongoDB Atlas - An Azure Native ISV Service'; IsPreview = 'false'; Description = 'Concrete tracked resource types can be created by aliasing this type using a specific property type.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/mongodb.atlas/organizations.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.workloads/virtualinstances'; SingularDisplayName = 'Microsoft.Workloads virtual instance'; PluralDisplayName = 'Microsoft.Workloads virtual instances'; LowerSingularDisplayName = 'microsoft.workloads virtual instance'; LowerPluralDisplayName = 'microsoft.workloads virtual instances'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/virtualinstances.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.workloads/virtualinstances/components'; SingularDisplayName = 'Microsoft.Workloads virtual instances component'; PluralDisplayName = 'Microsoft.Workloads virtual instances components'; LowerSingularDisplayName = 'microsoft.workloads virtual instances component'; LowerPluralDisplayName = 'microsoft.workloads virtual instances components'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.workloads/virtualinstances/components.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'microsoft.zerotrustsegmentation/segmentationmanagers'; SingularDisplayName = 'Segmentation Manager'; PluralDisplayName = 'Segmentation Managers'; LowerSingularDisplayName = 'segmentation manager'; LowerPluralDisplayName = 'segmentation managers'; IsPreview = 'false'; Description = 'Consistent experiences across Azure enable users to leverage a few well-known and researched design patterns throughout Azure.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/microsoft.zerotrustsegmentation/segmentationmanagers.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'mongodb.atlas/organizations'; SingularDisplayName = 'MongoDB Atlas Organization'; PluralDisplayName = 'MongoDB Atlas'; LowerSingularDisplayName = 'MongoDB Atlas Organization'; LowerPluralDisplayName = 'MongoDB Atlas Organization'; IsPreview = 'false'; Description = 'MongoDB Atlas as an Azure Native ISV Service integrates the fully-managed document database, including native vector search capabilities, directly into the Azure ecosystem. Build and scale modern AI applications with a streamlined setup of an Atlas Organization, unified billing management, and seamless access to Azure services.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/mongodb.atlas/organizations.svg'; Links = '[{"title":"Learn more about MongoDB Atlas","uri":"https://www.mongodb.com/lp/cloud/atlas/try4-reg"}]'; } ,[PSCustomObject]@{ ResourceType = 'neon.postgres/organizations'; SingularDisplayName = 'Neon Serverless Postgres Organization'; PluralDisplayName = 'Neon Serverless Postgres'; LowerSingularDisplayName = 'Neon Serverless Postgres Organization'; LowerPluralDisplayName = 'Neon Serverless Postgres Organizations'; IsPreview = 'false'; Description = 'Neon is a cloud-native Postgres solution designed for modern applications. It offers a serverless, fully managed, and scalable Postgres database with advanced features like automatic scaling, high availability, and robust security. '; Icon = 'https://microsoft.github.io/finops-toolkit/svg/neon.postgres/organizations.svg'; Links = '[{"title":"Learn more","uri":"https://aka.ms/ANI/NeonServerlessPostgres/Docs"}]'; } ,[PSCustomObject]@{ ResourceType = 'newrelic.observability/monitors'; SingularDisplayName = 'New Relic'; PluralDisplayName = 'Azure Native New Relic Service'; LowerSingularDisplayName = 'a New Relic resource'; LowerPluralDisplayName = 'New Relic resources'; IsPreview = 'false'; Description = 'Create a New Relic resource using Azure Marketplace.'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/newrelic.observability/monitors.svg'; Links = '[{"title":"Get started with New Relic","uri":"https://portal.azure.com/#view/Microsoft_Azure_Marketplace/GalleryItemDetailsBladeNopdl/id/newrelicinc1635200720692.newrelic_liftr_payg"}]'; } ,[PSCustomObject]@{ ResourceType = 'nginx.nginxplus/nginxdeployments'; SingularDisplayName = 'NGINXaaS'; PluralDisplayName = 'NGINXaaS'; LowerSingularDisplayName = 'NGINXaaS'; LowerPluralDisplayName = 'NGINXaaS'; IsPreview = 'false'; Description = 'Fully managed NGINX service on Azure provides the capabilities of a load balancer and reverse proxy to deliver your content at scale, secure!'; Icon = 'https://microsoft.github.io/finops-toolkit/svg/nginx.nginxplus/nginxdeployments.svg'; Links = '[{"title":"Learn more about NGINXaaS","uri":"https://docs.nginx.com/nginxaas/azure/"}]'; } ,[PSCustomObject]@{ ResourceType = 'oracle.database/autonomousdatabases'; SingularDisplayName = 'Autonomous Database'; PluralDisplayName = 'Autonomous Databases'; LowerSingularDisplayName = 'autonomous database'; LowerPluralDisplayName = 'autonomous databases'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/oracle.database/autonomousdatabases.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'oracle.database/cloudexadatainfrastructures'; SingularDisplayName = 'Oracle Exadata Infrastructure'; PluralDisplayName = 'Oracle Exadata Infrastructures'; LowerSingularDisplayName = 'cloud exadata infrastructure'; LowerPluralDisplayName = 'cloud exadata infrastructures'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/oracle.database/cloudexadatainfrastructures.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'oracle.database/cloudvmclusters'; SingularDisplayName = 'Oracle Exadata VM Cluster'; PluralDisplayName = 'Oracle Exadata VM Clusters'; LowerSingularDisplayName = 'Oracle Exadata VM Cluster'; LowerPluralDisplayName = 'Oracle Exadata VM Clusters'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/oracle.database/cloudvmclusters.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'oracle.database/exadbvmclusters'; SingularDisplayName = 'Oracle Exascale VM Cluster'; PluralDisplayName = 'Oracle Exascale VM Clusters'; LowerSingularDisplayName = 'Oracle Exascale VM Cluster'; LowerPluralDisplayName = 'Oracle Exascale VM Clusters'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/oracle.database/exadbvmclusters.svg'; Links = ''; } + ,[PSCustomObject]@{ ResourceType = 'oracle.database/exascaledbstoragevaults'; SingularDisplayName = 'Oracle Exascale DB Storage Vault'; PluralDisplayName = 'Oracle Exascale VM Clusters'; LowerSingularDisplayName = 'Oracle Exascale DB Storage Vault'; LowerPluralDisplayName = 'Oracle Exascale VM Clusters'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/oracle.database/exascaledbstoragevaults.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'oracle.database/oraclesubscriptions'; SingularDisplayName = 'OracleSubscription'; PluralDisplayName = 'OracleSubscriptions'; LowerSingularDisplayName = 'OracleSubscription'; LowerPluralDisplayName = 'OracleSubscriptions'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/oracle.database/oraclesubscriptions.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'paloaltonetworks.cloudngfw/firewalls'; SingularDisplayName = 'Cloud NGFW by Palo Alto Networks'; PluralDisplayName = 'Cloud NGFWs by Palo Alto Networks'; LowerSingularDisplayName = 'Cloud NGFW by Palo Alto Networks'; LowerPluralDisplayName = 'Cloud NGFWs by Palo Alto Networks'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/paloaltonetworks.cloudngfw/firewalls.svg'; Links = ''; } ,[PSCustomObject]@{ ResourceType = 'paloaltonetworks.cloudngfw/globalrulestacks'; SingularDisplayName = 'Global Rulestack'; PluralDisplayName = 'Global Rulestacks'; LowerSingularDisplayName = 'global rulestack'; LowerPluralDisplayName = 'global rulestacks'; IsPreview = 'false'; Description = ''; Icon = 'https://microsoft.github.io/finops-toolkit/svg/paloaltonetworks.cloudngfw/globalrulestacks.svg'; Links = ''; } diff --git a/src/powershell/Private/Get-OpenDataService.ps1 b/src/powershell/Private/Get-OpenDataService.ps1 index c11dcc0a1..4eb7d5ed2 100644 --- a/src/powershell/Private/Get-OpenDataService.ps1 +++ b/src/powershell/Private/Get-OpenDataService.ps1 @@ -86,6 +86,7 @@ function Get-OpenDataService ,[PSCustomObject]@{ ConsumedService = 'microsoft.classicstorage'; ResourceType = 'microsoft.classicstorage/storageaccounts'; ServiceName = 'Storage Accounts'; ServiceCategory = 'Storage'; ServiceSubcategory = 'Storage Platforms'; PublisherName = 'Microsoft'; PublisherType = 'Cloud Provider'; Environment = 'Cloud'; ServiceModel = 'IaaS'; } ,[PSCustomObject]@{ ConsumedService = 'microsoft.codesigning'; ResourceType = 'microsoft.codesigning/codesigningaccounts'; ServiceName = 'Trusted Signing'; ServiceCategory = 'Developer Tools'; ServiceSubcategory = 'Continuous Integration and Deployment'; PublisherName = 'Microsoft'; PublisherType = 'Cloud Provider'; Environment = 'Cloud'; ServiceModel = 'SaaS'; } ,[PSCustomObject]@{ ConsumedService = 'microsoft.cognitiveservices'; ResourceType = 'microsoft.cognitiveservices/accounts'; ServiceName = 'Azure AI Services'; ServiceCategory = 'AI and Machine Learning'; ServiceSubcategory = 'AI Platforms'; PublisherName = 'Microsoft'; PublisherType = 'Cloud Provider'; Environment = 'Cloud'; ServiceModel = 'PaaS'; } + ,[PSCustomObject]@{ ConsumedService = 'microsoft.cognitiveservices'; ResourceType = 'microsoft.cognitiveservices/commitmentplans'; ServiceName = 'Azure AI Services'; ServiceCategory = 'AI and Machine Learning'; ServiceSubcategory = 'AI Platforms'; PublisherName = 'Microsoft'; PublisherType = 'Cloud Provider'; Environment = 'Cloud'; ServiceModel = 'PaaS'; } ,[PSCustomObject]@{ ConsumedService = 'microsoft.communication'; ResourceType = 'microsoft.communication/communicationservices'; ServiceName = 'Azure Communication Services'; ServiceCategory = 'Integration'; ServiceSubcategory = 'Messaging'; PublisherName = 'Microsoft'; PublisherType = 'Cloud Provider'; Environment = 'Cloud'; ServiceModel = 'PaaS'; } ,[PSCustomObject]@{ ConsumedService = 'microsoft.community'; ResourceType = 'microsoft.community/communitytrainings'; ServiceName = 'Community Training'; ServiceCategory = 'Business Applications'; ServiceSubcategory = 'Other (Business Applications)'; PublisherName = 'Microsoft'; PublisherType = 'Cloud Provider'; Environment = 'Cloud'; ServiceModel = 'SaaS'; } ,[PSCustomObject]@{ ConsumedService = 'microsoft.compute'; ResourceType = 'microsoft.compute/capacityreservationgroups'; ServiceName = 'Virtual Machines'; ServiceCategory = 'Compute'; ServiceSubcategory = 'Virtual Machines'; PublisherName = 'Microsoft'; PublisherType = 'Cloud Provider'; Environment = 'Cloud'; ServiceModel = 'IaaS'; } @@ -127,6 +128,7 @@ function Get-OpenDataService ,[PSCustomObject]@{ ConsumedService = 'microsoft.dbforpostgresql'; ResourceType = 'microsoft.dbforpostgresql/servers'; ServiceName = 'Azure DB for PostgreSQL'; ServiceCategory = 'Databases'; ServiceSubcategory = 'Relational Databases'; PublisherName = 'Microsoft'; PublisherType = 'Cloud Provider'; Environment = 'Cloud'; ServiceModel = 'PaaS'; } ,[PSCustomObject]@{ ConsumedService = 'microsoft.desktopvirtualization'; ResourceType = 'microsoft.desktopvirtualization/hostpools'; ServiceName = 'Azure Virtual Desktop'; ServiceCategory = 'Compute'; ServiceSubcategory = 'End User Computing'; PublisherName = 'Microsoft'; PublisherType = 'Cloud Provider'; Environment = 'Cloud'; ServiceModel = 'IaaS'; } ,[PSCustomObject]@{ ConsumedService = 'microsoft.devcenter'; ResourceType = 'microsoft.devcenter/projects'; ServiceName = 'Microsoft Dev Box'; ServiceCategory = 'Developer Tools'; ServiceSubcategory = 'Continuous Integration and Deployment'; PublisherName = 'Microsoft'; PublisherType = 'Cloud Provider'; Environment = 'Cloud'; ServiceModel = 'PaaS'; } + ,[PSCustomObject]@{ ConsumedService = 'microsoft.deviceregistry'; ResourceType = 'microsoft.deviceregistry/billingcontainers'; ServiceName = 'Azure IoT Hub'; ServiceCategory = 'Internet of Things'; ServiceSubcategory = 'IoT Platforms'; PublisherName = 'Microsoft'; PublisherType = 'Cloud Provider'; Environment = 'Cloud'; ServiceModel = 'PaaS'; } ,[PSCustomObject]@{ ConsumedService = 'microsoft.devices'; ResourceType = 'microsoft.devices/iothubs'; ServiceName = 'Azure IoT Hub'; ServiceCategory = 'Internet of Things'; ServiceSubcategory = 'IoT Platforms'; PublisherName = 'Microsoft'; PublisherType = 'Cloud Provider'; Environment = 'Cloud'; ServiceModel = 'PaaS'; } ,[PSCustomObject]@{ ConsumedService = 'microsoft.devices'; ResourceType = 'microsoft.devices/provisioningservices'; ServiceName = 'Azure IoT Hub'; ServiceCategory = 'Internet of Things'; ServiceSubcategory = 'IoT Platforms'; PublisherName = 'Microsoft'; PublisherType = 'Cloud Provider'; Environment = 'Cloud'; ServiceModel = 'PaaS'; } ,[PSCustomObject]@{ ConsumedService = 'microsoft.deviceupdate'; ResourceType = 'microsoft.deviceupdate/accounts'; ServiceName = 'Azure IoT Hub'; ServiceCategory = 'Internet of Things'; ServiceSubcategory = 'IoT Platforms'; PublisherName = 'Microsoft'; PublisherType = 'Cloud Provider'; Environment = 'Cloud'; ServiceModel = 'PaaS'; } diff --git a/src/powershell/Private/Get-VersionNumber.ps1 b/src/powershell/Private/Get-VersionNumber.ps1 index 75f2afe47..dfbf6af2a 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' + return '0.9' } diff --git a/src/powershell/Tests/Integration/Toolkit.Tests.ps1 b/src/powershell/Tests/Integration/Toolkit.Tests.ps1 index d6171279f..729107753 100644 --- a/src/powershell/Tests/Integration/Toolkit.Tests.ps1 +++ b/src/powershell/Tests/Integration/Toolkit.Tests.ps1 @@ -6,8 +6,8 @@ Describe 'Get-FinOpsToolkitVersion' { It 'Should return all known releases' { # Arrange - $plannedRelease = '0.8' - $expected = @('0.7', '0.6', '0.5', '0.4', '0.3', '0.2', '0.1.1', '0.1', '0.0.1') + $plannedRelease = '0.9' + $expected = @('0.8', '0.7', '0.6', '0.5', '0.4', '0.3', '0.2', '0.1.1', '0.1', '0.0.1') # Act $result = Get-FinOpsToolkitVersion @@ -35,6 +35,7 @@ Describe 'Get-FinOpsToolkitVersion' { $verStr | Should -BeIn (@($plannedRelease) + $expected) -Because "version '$verStr' should be added to the verification test" # Templates + CheckFile "finops-hub-dashboard.json" '0.8' $null CheckFile "finops-hub-v$verStr.zip" $null $null CheckFile "finops-workbooks-v$verStr.zip" '0.6' $null CheckFile "governance-workbook-v$verStr.zip" '0.1' '0.5' diff --git a/src/scripts/Build-OpenData.ps1 b/src/scripts/Build-OpenData.ps1 index 3163e7302..7d4b8a0c2 100644 --- a/src/scripts/Build-OpenData.ps1 +++ b/src/scripts/Build-OpenData.ps1 @@ -341,6 +341,10 @@ if (($Name -eq "ResourceTypes" -or $Name -eq "*") -and $Json) # Remove unnecessary properties/tags and switch opacity to fill-opacity (ffimg bug) $icon = ($icon.Replace(" opacity=", " fill-opacity=") -replace ' xmlns:svg=', ' xmlns=' -replace " (focusable|role|xmlns:[^=]+)='[^']+'", "") -replace "[^<]*", "" + if ($icon -notmatch ' xmlns=') + { + $icon = $icon -replace ''', '''')"' + } } - $modelJson.model.tables = $modelJson.model.tables | Where-Object { $metadata.Tables -contains $_.name } - $modelJson.model.relationships = @($modelJson.model.relationships | Where-Object { $metadata.Tables -contains $_.fromTable -and $metadata.Tables -contains $_.toTable }) - $modelJson.model.expressions = $modelJson.model.expressions | Where-Object { $metadata.Expressions -contains $_.name } + $modelJson.model.tables = $modelJson.model.tables | Where-Object { $metadata.Tables -contains $_.name -or $metadata.Tables -contains "[$reportType]$($_.name)" } + $modelJson.model.relationships = @($modelJson.model.relationships | Where-Object { ($metadata.Tables -contains $_.fromTable -or $metadata.Tables -contains "[$reportType]$($_.fromTable)") -and ($metadata.Tables -contains $_.toTable -or $metadata.Tables -contains "[$reportType]$($_.toTable)") }) + $modelJson.model.expressions = $modelJson.model.expressions | Where-Object { $metadata.Expressions -contains $_.name -or $metadata.Expressions -contains "[$reportType]$($_.name)" } $modelJson.model.annotations = $modelJson.model.annotations ` | ForEach-Object { $ann = $_ @@ -167,14 +173,16 @@ $reports | ForEach-Object { # DiagramLayout Write-UTF16LE -File "$targetFile/DiagramLayout" -Json (Get-Content "$datasetDir/diagramLayout.json" -Raw | ConvertFrom-Json -Depth 100) - + # Report/Layout - # TODO: Will this work as a JSON file? - Write-UTF16LE -File "$targetFile/Report/Layout" -Json (Get-Content "$reportDir/report.json" -Raw | ConvertFrom-Json -Depth 100) - + $reportJson = (Get-Content "$reportDir/report.json" -Raw) ` + -replace '\$\$ftkver\$\$', $version ` + -replace '\$\$build-date\$\$', (Get-Date -Format 'yyyy-MM-dd') + Write-UTF16LE -File "$targetFile/Report/Layout" -Json ($reportJson | ConvertFrom-Json -Depth 100) + # Report/StaticResources Copy-Item "$reportDir/StaticResources" "$targetFile/Report/StaticResources" -Recurse -Force - + # Metadata # TODO: Where does "Version" come from? # TODO: Add all intro paragraphs @@ -189,16 +197,13 @@ $reports | ForEach-Object { # TODO: Validate "CreatedFromRelease" CreatedFromRelease = "20$($desktopVersion -replace '^[^\(]+\(([0-9]{2}\.[0-2][0-9])\)[^\)]+$','$1')" } - + # Settings - # TODO: Where does "ShouldNotifyUserOfNameConflictResolution" come from? - # TODO: Where does "QueriesSettings.Version" come from? $editorSettings = Get-Content "$datasetDir/.pbi/editorSettings.json" | ConvertFrom-Json - $localSettings = Get-Content "$datasetDir/.pbi/localSettings.json" | ConvertFrom-Json Write-UTF16LE -File "$targetFile/Settings" -Json @{ Version = 4 ReportSettings = @{ - UserConsentsToCompositeModels = $localSettings.userConsent.compositeModel + UserConsentsToCompositeModels = $true ShouldNotifyUserOfNameConflictResolution = $false } QueriesSettings = @{ diff --git a/src/scripts/Build-Toolkit.ps1 b/src/scripts/Build-Toolkit.ps1 index fe2b995f4..31e8531db 100644 --- a/src/scripts/Build-Toolkit.ps1 +++ b/src/scripts/Build-Toolkit.ps1 @@ -136,6 +136,17 @@ Get-ChildItem -Path "$PSScriptRoot/../templates/*", "$PSScriptRoot/../optimizati Build-MainBicep $destDir } + # Update placeholder variables + # TODO: Genericize this so it can be used for any files + if (Test-Path "$srcDir/dashboard.json") + { + (Get-Content "$destDir/dashboard.json" -Raw) ` + -replace '\$\$ftkver\$\$', $ver ` + -replace '\$\$build-date\$\$', (Get-Date -Format 'yyyy-MM-dd') ` + -replace '\$\$build-month\$\$', (Get-Date -Format 'MMMM yyyy') ` + | Out-File "$destDir/dashboard.json" -Encoding utf8 -Force + } + # Update version in ftkver.txt files Get-ChildItem $destDir -Include ftkver.txt -Recurse | ForEach-Object { $ver | Out-File $_ -NoNewline } diff --git a/src/scripts/Package-Toolkit.ps1 b/src/scripts/Package-Toolkit.ps1 index 389cab63f..906b3eed8 100644 --- a/src/scripts/Package-Toolkit.ps1 +++ b/src/scripts/Package-Toolkit.ps1 @@ -41,7 +41,7 @@ Builds the latest code, generates ZIP files for each template, and opens Power BI projects to be saved as PBIX files. #> -Param( +param( [Parameter(Position = 0)][string]$Template = "*", [switch]$Build, [switch]$CopyFiles, @@ -84,7 +84,7 @@ function Copy-TemplateFiles() Remove-Item "$relDir/*.zip" -Force return Get-ChildItem "$relDir/$Template*" -Directory ` - | Where-Object { $_.Name -ne 'pbix' } ` + | Where-Object { @('pbit', 'pbix', 'FinOpsToolkit') -notcontains $_.Name } ` | ForEach-Object { Write-Verbose ("Packaging $_" -replace (Get-Item $relDir).FullName, '.') $srcPath = $_ diff --git a/src/templates/finops-alerts/.buildignore b/src/templates/finops-alerts/.buildignore new file mode 100644 index 000000000..e69de29bb diff --git a/src/templates/finops-alerts/createUiDefinition.json b/src/templates/finops-alerts/createUiDefinition.json new file mode 100644 index 000000000..7f519e102 --- /dev/null +++ b/src/templates/finops-alerts/createUiDefinition.json @@ -0,0 +1,72 @@ +{ + "$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 alerts is an Azure Logic Apps-based automated detection system that identifies idle resources across selected subscriptions on a configurable schedule and sends notifications to admins to investigate and take action", + "location": { + "label": "Location", + "toolTip": "Location of logic app must be in the same region as the resource group.", + "resourceTypes": [ + "Microsoft.Logic/workflows", + "Microsoft.Web/connections" + ] + } + } + }, + "basics": [ + { + "name": "finopsalertsName", + "type": "Microsoft.Common.TextBox", + "label": "FinOps alerts name", + "defaultValue": "finops-alerts", + "toolTip": "Name of the FinOps alerts instance.", + "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": "connectionsName", + "type": "Microsoft.Common.TextBox", + "label": "Connection name", + "defaultValue": "finops-alerts-connection", + "toolTip": "Name of the API connection.", + "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 + } + ], + "steps": [{ + "name": "tags", + "label": "Tags", + "elements": [ + { + "name": "tagsByResource", + "label": "Tags", + "toolTip": "Tags to apply to resources.", + "type": "Microsoft.Common.TagsByResource", + "resources": [ + "Microsoft.Logic/workflows", + "Microsoft.Web/connections" + ] + } + ] + }], + "outputs": { + "hubName": "[basics('finopsalertsName')]", + "location": "[location()]", + "tagsByResource": "[steps('tags').tagsByResource]"}, + "resourceTypes": [ + "Microsoft.Logic/workflows", + "Microsoft.Web/connections" + ] + } +} diff --git a/src/templates/finops-alerts/main.bicep b/src/templates/finops-alerts/main.bicep new file mode 100644 index 000000000..185e8eaaf --- /dev/null +++ b/src/templates/finops-alerts/main.bicep @@ -0,0 +1,51 @@ +//============================================================================== +// Parameters +//============================================================================== + +targetScope = 'resourceGroup' + +@description('Azure location where resources should be created') +param location string = resourceGroup().location + +@description('Name of the logic app') +@minLength(1) +@maxLength(20) +param appName string = 'finops-alerts' + +@description('Specifies the frequency of the recurrence trigger. Possible values are Week, Day or Hour.') +param recurrenceFrequency string = 'Week' + +@description('Specifies the interval for the recurrence trigger. Represents the number of frequency units.') +param recurrenceInterval int = 1 + +@description('Specifies the type of the trigger. For this example, it is a recurrence trigger.') +param recurrenceType string = 'Recurrence' + +//@description('A list of resource Id of subscriptions.') +//param subscriptionsIds array = [ + //'dbc1e833-6b33-4788-b219-b9266b898fad' +//] + +@description('The Id of the subscription to deploy the logic app in.') +param logicAppSubscriptionId string = '' + +@description('The name of the resource group.') +param resourceGroupName string = '' + +//============================================================================== +// Resources +//============================================================================== + +module logicApp 'modules/logicApp.bicep' = { + name: 'logicApp-${uniqueString(deployment().name,location,appName)}' + scope: resourceGroup(logicAppSubscriptionId, resourceGroupName) + params: { + appName: appName + location: location + recurrenceFrequency: recurrenceFrequency + recurrenceInterval: recurrenceInterval + recurrenceType: recurrenceType + } +} + + diff --git a/src/templates/finops-alerts/modules/logicApp.bicep b/src/templates/finops-alerts/modules/logicApp.bicep new file mode 100644 index 000000000..d5b742cb2 --- /dev/null +++ b/src/templates/finops-alerts/modules/logicApp.bicep @@ -0,0 +1,4218 @@ +//============================================================================== +// Parameters +//============================================================================== +@description('Azure location where resources should be created') +param location string = resourceGroup().location + +@description('Name of the logic app') +@minLength(1) +@maxLength(20) +param appName string = 'finops-alerts' + +@description('Specifies the frequency of the recurrence trigger. Possible values are Week, Day or Hour.') +param recurrenceFrequency string = 'Week' + +@description('Specifies the interval for the recurrence trigger. Represents the number of frequency units.') +param recurrenceInterval int = 1 + +@description('Specifies the type of the trigger. For this example, it is a recurrence trigger.') +param recurrenceType string = 'Recurrence' + +//============================================================================== +// Variables +//============================================================================== +var safeSuffix = replace(replace(toLower(appName), '-', ''), '_', '') + + +@description('Name of the connection to use for the logic app') +var connectionName = '${safeSuffix}-connection' + +@description('Display name of the connection') +var displayName = '${safeSuffix}-connection' + +//Only one actionKey will be needed here after updating the code +@description('Used to track number of functions available in this App') +var actionKeys = [ + 'Send_an_email_V2' +] + +//============================================================================== +// Resources +//============================================================================== + +resource finopsAlerts 'Microsoft.Logic/workflows@2019-05-01' = { + identity: { + type: 'SystemAssigned' + } + properties: { + state: 'Enabled' + definition: { + '$schema': 'https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#' + contentVersion: '1.0.0.0' + parameters: { + '$connections': { + defaultValue: {} + type: 'Object' + } + } + triggers: { + Recurrence: { + recurrence: { + frequency: recurrenceFrequency + interval: recurrenceInterval + } + evaluatedRecurrence: { + frequency: recurrenceFrequency + interval: recurrenceInterval + } + type: recurrenceType + } + } + actions: { + For_each_App_GW: { + foreach: '@body(\'Parse_idle_App_Gateways\')?[\'data\']' + actions: { + Set_App_Gateways_URI: { + type: 'SetVariable' + inputs: { + name: 'AppGwURI' + value: '@{concat(\'https://portal.azure.com/#@\',items(\'For_each_App_GW\')?[\'tenantId\'],\'/resource\',items(\'For_each_App_GW\')?[\'id\'])}' + } + } + Compose_AppGw: { + runAfter: { + Set_App_Gateways_URI: [ + 'Succeeded' + ] + } + type: 'Compose' + inputs: '@variables(\'AppGwURI\')' + } + Append_to_App_Gateway_HTML: { + runAfter: { + Compose_AppGw: [ + 'Succeeded' + ] + } + type: 'AppendToStringVariable' + inputs: { + name: 'AppGatewayHTML' + value: '
\n @{items(\'For_each_App_GW\')?[\'name\']}\n @{items(\'For_each_App_GW\')?[\'resourceGroup\']}\n @{items(\'For_each_App_GW\')?[\'subscriptionName\']}\n
' + } + } + } + runAfter: { + Condition_App_Gateway: [ + 'Succeeded' + ] + } + type: 'Foreach' + runtimeConfiguration: { + concurrency: { + repetitions: 1 + } + } + } + For_each_Disk: { + foreach: '@body(\'Parse_Idle_disks\')?[\'data\']' + actions: { + Set_Disk_URI: { + type: 'SetVariable' + inputs: { + name: 'DiskURI' + value: '@{concat(\'https://portal.azure.com/#@\',items(\'For_each_Disk\')?[\'tenantId\'],\'/resource\',items(\'For_each_Disk\')?[\'DiskId\'])}' + } + } + Compose_Disk: { + runAfter: { + Set_Disk_URI: [ + 'Succeeded' + ] + } + type: 'Compose' + inputs: '@variables(\'DiskURI\')' + } + Append_to_Idle_Disk_HTML: { + runAfter: { + Compose_Disk: [ + 'Succeeded' + ] + } + type: 'AppendToStringVariable' + inputs: { + name: 'IdleDiskHTML' + value: '
\n @{items(\'For_each_Disk\')?[\'DiskName\']}\n @{items(\'For_each_Disk\')?[\'resourceGroup\']}\n @{items(\'For_each_Disk\')?[\'subscriptionName\']}\n
' + } + } + } + runAfter: { + Condition_Disk: [ + 'Succeeded' + ] + } + type: 'Foreach' + runtimeConfiguration: { + concurrency: { + repetitions: 1 + } + } + } + For_each_IP_address: { + foreach: '@body(\'Parse_Idle_IP_addresses\')?[\'data\']' + actions: { + Set_IP_address_URI: { + type: 'SetVariable' + inputs: { + name: 'IPAddressURI' + value: '@{concat(\'https://portal.azure.com/#@\',items(\'For_each_IP_address\')?[\'tenantId\'],\'/resource\',items(\'For_each_IP_address\')?[\'PublicIpId\'])}' + } + } + Compose_IP: { + runAfter: { + Set_IP_address_URI: [ + 'Succeeded' + ] + } + type: 'Compose' + inputs: '@variables(\'IPAddressURI\')' + } + Append_to_IP_Address_HTML: { + runAfter: { + Compose_IP: [ + 'Succeeded' + ] + } + type: 'AppendToStringVariable' + inputs: { + name: 'IPAddressHTML' + value: '
\n @{items(\'For_each_IP_address\')?[\'IPName\']}\n @{items(\'For_each_IP_address\')?[\'resourceGroup\']}\n @{items(\'For_each_IP_address\')?[\'subscriptionName\']}\n
' + } + } + } + runAfter: { + Condition_IP_Address: [ + 'Succeeded' + ] + } + type: 'Foreach' + runtimeConfiguration: { + concurrency: { + repetitions: 1 + } + } + } + For_each_Load_Balancer: { + foreach: '@body(\'Parse_Idle_Load_Balancers\')?[\'data\']' + actions: { + Set_Load_Balancer_URI: { + type: 'SetVariable' + inputs: { + name: 'LoadBalancerURI' + value: '@{concat(\'https://portal.azure.com/#@\',items(\'For_each_Load_Balancer\')?[\'tenantId\'],\'/resource\',items(\'For_each_Load_Balancer\')?[\'loadBalancerid\'])}' + } + } + Compose_LB: { + runAfter: { + Set_Load_Balancer_URI: [ + 'Succeeded' + ] + } + type: 'Compose' + inputs: '@variables(\'LoadBalancerURI\')' + } + Append_to_Load_Balancer_HTML: { + runAfter: { + Compose_LB: [ + 'Succeeded' + ] + } + type: 'AppendToStringVariable' + inputs: { + name: 'LoadBalancerHTML' + value: '
\n @{items(\'For_each_Load_Balancer\')?[\'LoadBalancerName\']}\n @{items(\'For_each_Load_Balancer\')?[\'resourceGroup\']}\n @{items(\'For_each_Load_Balancer\')?[\'subscriptionName\']}\n
' + } + } + } + runAfter: { + Condition_Load_Balancer: [ + 'Succeeded' + ] + } + type: 'Foreach' + runtimeConfiguration: { + concurrency: { + repetitions: 1 + } + } + } + For_each_Snapshot: { + foreach: '@body(\'Parse_Snapshots\')?[\'data\']' + actions: { + Set_Snapshot_URI: { + type: 'SetVariable' + inputs: { + name: 'SnapshotURI' + value: '@{concat(\'https://portal.azure.com/#@\',items(\'For_each_Snapshot\')?[\'tenantId\'],\'/resource\',items(\'For_each_Snapshot\')?[\'SnapshotId\'])}\n' + } + } + Compose_Snapshot: { + runAfter: { + Set_Snapshot_URI: [ + 'Succeeded' + ] + } + type: 'Compose' + inputs: '@variables(\'SnapshotURI\')' + } + Append_to_Disk_Snapshot_HTML: { + runAfter: { + Compose_Snapshot: [ + 'Succeeded' + ] + } + type: 'AppendToStringVariable' + inputs: { + name: 'DiskSnapshotHTML' + value: '
\n @{items(\'For_each_Snapshot\')?[\'Snapshotname\']}\n @{items(\'For_each_Snapshot\')?[\'resourceGroup\']}\n @{items(\'For_each_Snapshot\')?[\'subscriptionName\']}\n
' + } + } + } + runAfter: { + Condition_Disk_Snapshots: [ + 'Succeeded' + ] + } + type: 'Foreach' + runtimeConfiguration: { + concurrency: { + repetitions: 1 + } + } + } + For_each_Stopped_VM: { + foreach: '@body(\'Parse_stopped_VMs\')?[\'data\']' + actions: { + Set_Stopped_VM_URI: { + type: 'SetVariable' + inputs: { + name: 'StoppedVMURI' + value: '@{concat(\'https://portal.azure.com/#@\',items(\'For_each_Stopped_VM\')?[\'tenantId\'],\'/resource\',items(\'For_each_Stopped_VM\')?[\'VirtualMachineId\'])}' + } + } + Compose_VM: { + runAfter: { + Set_Stopped_VM_URI: [ + 'Succeeded' + ] + } + type: 'Compose' + inputs: '@variables(\'StoppedVMURI\')' + } + Append_to_Stopped_VM_HTML: { + runAfter: { + Compose_VM: [ + 'Succeeded' + ] + } + type: 'AppendToStringVariable' + inputs: { + name: 'StoppedVMHTML' + value: '
\n @{items(\'For_each_Stopped_VM\')?[\'VMname\']}\n @{items(\'For_each_Stopped_VM\')?[\'resourceGroup\']}\n @{items(\'For_each_Stopped_VM\')?[\'subscriptionName\']}\n
' + } + } + } + runAfter: { + Condition_Stopped_VMs: [ + 'Succeeded' + ] + } + type: 'Foreach' + runtimeConfiguration: { + concurrency: { + repetitions: 1 + } + } + } + Get_idle_App_Gateways: { + runAfter: { + Initialize_resources_table: [ + 'Succeeded' + ] + } + type: 'Http' + inputs: { + uri: '${environment().resourceManager}//providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01' + method: 'POST' + body: { + query: '@{variables(\'resourcesTable\')} | where type =~ \'Microsoft.Network/applicationGateways\'| extend backendPoolsCount = array_length(properties.backendAddressPools),SKUName= tostring(properties.sku.name), SKUTier=tostring(properties.sku.tier),SKUCapacity=properties.sku.capacity,backendPools=properties.backendAddressPools| join (resources | where type =~ \'Microsoft.Network/applicationGateways\'| mvexpand backendPools = properties.backendAddressPools| extend backendIPCount =array_length(backendPools.properties.backendIPConfigurations) | extend backendAddressesCount = array_length(backendPools.properties.backendAddresses) | extend backendPoolName=backendPools.properties.backendAddressPools.name | summarize backendIPCount = sum(backendIPCount) ,backendAddressesCount=sum(backendAddressesCount) by id) on id| project-away id1| where (backendIPCount == 0 or isempty(backendIPCount)) and (backendAddressesCount==0 or isempty(backendAddressesCount))| order by id asc | join kind=leftouter ( resourcecontainers | where type == \'microsoft.resources/subscriptions\' | project subscriptionId, subscriptionName = name) on subscriptionId' + scope: 'Tenant' + } + authentication: { + type: 'ManagedServiceIdentity' + } + } + } + Get_idle_Disks: { + runAfter: { + Initialize_resources_table: [ + 'Succeeded' + ] + } + type: 'Http' + inputs: { + uri: '${environment().resourceManager}//providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01' + method: 'POST' + body: { + query: '@{variables(\'resourcesTable\')} | where type =~ \'microsoft.compute/disks\' and managedBy == \'\'| extend diskState = tostring(properties.diskState) | where (managedBy == \'\' and diskState != \'ActiveSAS\') or (diskState == \'Unattached\' and diskState != \'ActiveSAS\') | extend DiskId = id, DiskName = name, SKUName = sku.name, SKUTier = sku.tier, DiskSizeGB = tostring(properties.diskSizeGB), Location = location, TimeCreated = tostring(properties.timeCreated) | order by DiskId asc | project DiskId, DiskName, DiskSizeGB, SKUName, SKUTier, resourceGroup, Location, TimeCreated, subscriptionId | join kind=leftouter (resourcecontainers | where type == \'microsoft.resources/subscriptions\' | project subscriptionId, subscriptionName = name) on subscriptionId' + scope: 'Tenant' + } + authentication: { + type: 'ManagedServiceIdentity' + } + } + } + Get_idle_IP_addresses: { + runAfter: { + Initialize_resources_table: [ + 'Succeeded' + ] + } + type: 'Http' + inputs: { + uri: '${environment().resourceManager}//providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01' + method: 'POST' + body: { + query: '@{variables(\'resourcesTable\')} | where type =~ \'Microsoft.Network/publicIPAddresses\' and isempty(properties.ipConfiguration) and isempty(properties.natGateway) | extend PublicIpId=id, IPName=name, AllocationMethod=tostring(properties.publicIPAllocationMethod), SKUName=sku.name, Location=location | project PublicIpId,IPName, SKUName, resourceGroup, Location, AllocationMethod, subscriptionId, tenantId | union ( Resources | where type =~ \'microsoft.network/networkinterfaces\' and isempty(properties.virtualMachine) and isnull(properties.privateEndpoint) and isnotempty(properties.ipConfigurations) | extend IPconfig = properties.ipConfigurations | mv-expand IPconfig | extend PublicIpId= tostring(IPconfig.properties.publicIPAddress.id) | project PublicIpId | join ( resources | where type =~ \'Microsoft.Network/publicIPAddresses\' | extend PublicIpId=id, IPName=name, AllocationMethod=tostring(properties.publicIPAllocationMethod), SKUName=sku.name, resourceGroup, Location=location ) on PublicIpId | project PublicIpId,IPName, SKUName, resourceGroup, Location, AllocationMethod, subscriptionId, tenantId) | join kind=leftouter ( resourcecontainers | where type == \'microsoft.resources/subscriptions\' | project subscriptionId, subscriptionName = name) on subscriptionId' + scope: 'Tenant' + } + authentication: { + type: 'ManagedServiceIdentity' + } + } + } + Get_idle_Load_Balancers: { + runAfter: { + Initialize_resources_table: [ + 'Succeeded' + ] + } + type: 'Http' + inputs: { + uri: '${environment().resourceManager}//providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01' + method: 'POST' + body: { + query: '@{variables(\'resourcesTable\')} | where type =~ \'microsoft.network/loadbalancers\' and tostring(properties.backendAddressPools) == \'[]\' | extend loadBalancerId=id,LBRG=resourceGroup, LoadBalancerName=name, SKU=sku, LBLocation=location | order by loadBalancerId asc | project loadBalancerId,LoadBalancerName, SKU.name,SKU.tier, LBLocation, resourceGroup, subscriptionId | join kind=leftouter ( resourcecontainers | where type == \'microsoft.resources/subscriptions\' | project subscriptionId, subscriptionName = name) on subscriptionId' + scope: 'Tenant' + } + authentication: { + type: 'ManagedServiceIdentity' + } + } + } + Get_Disk_Snapshots_older_than_30_days: { + runAfter: { + Initialize_resources_table: [ + 'Succeeded' + ] + } + type: 'Http' + inputs: { + uri: '${environment().resourceManager}//providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01' + method: 'POST' + body: { + query: '@{variables(\'resourcesTable\')} | where type =~ \'microsoft.compute/snapshots\' | extend TimeCreated = properties.timeCreated | where TimeCreated < ago(30d) | extend SnapshotId=id, Snapshotname=name | order by id asc | project id, SnapshotId, Snapshotname, resourceGroup, location, TimeCreated ,subscriptionId | join kind=leftouter ( resourcecontainers | where type == \'microsoft.resources/subscriptions\' | project subscriptionId, subscriptionName = name) on subscriptionId' + scope: 'Tenant' + } + authentication: { + type: 'ManagedServiceIdentity' + } + } + } + Get_Stopped_VMs: { + runAfter: { + Initialize_resources_table: [ + 'Succeeded' + ] + } + type: 'Http' + inputs: { + uri: '${environment().resourceManager}//providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01' + method: 'POST' + body: { + query: '@{variables(\'resourcesTable\')} | where type =~ \'microsoft.compute/virtualmachines\' and tostring(properties.extended.instanceView.powerState.displayStatus) != \'VM deallocated\' and tostring(properties.extended.instanceView.powerState.displayStatus) != \'VM running\'| extend VMname=name, PowerState=tostring(properties.extended.instanceView.powerState.displayStatus), VMLocation=location, VirtualMachineId=id| order by VirtualMachineId asc| project VirtualMachineId,VMname, PowerState, VMLocation, resourceGroup, subscriptionId | join kind=leftouter ( resourcecontainers | where type == \'microsoft.resources/subscriptions\' | project subscriptionId, subscriptionName = name) on subscriptionId' + scope: 'Tenant' + } + authentication: { + type: 'ManagedServiceIdentity' + } + } + } + Initialize_App_Gateways_URI: { + runAfter: { + Parse_idle_App_Gateways: [ + 'Succeeded' + ] + } + type: 'InitializeVariable' + inputs: { + variables: [ + { + name: 'AppGwURI' + type: 'string' + } + ] + } + } + Initialize_Disk_URI: { + runAfter: { + Parse_Idle_disks: [ + 'Succeeded' + ] + } + type: 'InitializeVariable' + inputs: { + variables: [ + { + name: 'DiskURI' + type: 'string' + } + ] + } + } + Initialize_IP_addresses_URI: { + runAfter: { + Parse_Idle_IP_addresses: [ + 'Succeeded' + ] + } + type: 'InitializeVariable' + inputs: { + variables: [ + { + name: 'IPAddressURI' + type: 'string' + } + ] + } + } + Initialize_Load_Balancer_URI: { + runAfter: { + Parse_Idle_Load_Balancers: [ + 'Succeeded' + ] + } + type: 'InitializeVariable' + inputs: { + variables: [ + { + name: 'LoadBalancerURI' + type: 'string' + } + ] + } + } + Initialize_Snapshot_URI: { + runAfter: { + Parse_Snapshots: [ + 'Succeeded' + ] + } + type: 'InitializeVariable' + inputs: { + variables: [ + { + name: 'SnapshotURI' + type: 'string' + } + ] + } + } + Initialize_Stopped_VM_URI: { + runAfter: { + Parse_stopped_VMs: [ + 'Succeeded' + ] + } + type: 'InitializeVariable' + inputs: { + variables: [ + { + name: 'StoppedVMURI' + type: 'string' + } + ] + } + } + Excluded_subscriptions: { + runAfter: { + Included_subscriptions: [ + 'Succeeded' + ] + } + type: 'InitializeVariable' + inputs: { + variables: [ + { + name: 'ExcludedSubscriptions' + type: 'array' + value: [] + } + ] + } + } + Parse_idle_App_Gateways: { + runAfter: { + Get_idle_App_Gateways: [ + 'Succeeded' + ] + } + type: 'ParseJson' + inputs: { + content: '@body(\'Get_idle_App_Gateways\')' + schema: { + properties: { + properties: { + properties: { + count: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + data: { + properties: { + items: { + properties: { + properties: { + properties: { + SKUCapacity: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + SKUName: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + SKUTier: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + backendAddressesCount: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + backendIPCount: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + backendPools: { + properties: { + items: { + properties: { + properties: { + properties: { + etag: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + name: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + properties: { + properties: { + properties: { + properties: { + backendAddresses: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + provisioningState: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + requestRoutingRules: { + properties: { + items: { + properties: { + properties: { + properties: { + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + required: { + items: { + type: 'string' + } + type: 'array' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + required: { + items: { + type: 'string' + } + type: 'array' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + backendPoolsCount: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + extendedLocation: { + properties: {} + type: 'object' + } + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + identity: { + properties: {} + type: 'object' + } + kind: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + location: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + managedBy: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + name: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + plan: { + properties: {} + type: 'object' + } + properties: { + properties: { + properties: { + properties: { + authenticationCertificates: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + backendAddressPools: { + properties: { + items: { + properties: { + properties: { + properties: { + etag: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + name: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + properties: { + properties: { + properties: { + properties: { + backendAddresses: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + provisioningState: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + requestRoutingRules: { + properties: { + items: { + properties: { + properties: { + properties: { + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + required: { + items: { + type: 'string' + } + type: 'array' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + required: { + items: { + type: 'string' + } + type: 'array' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + backendHttpSettingsCollection: { + properties: { + items: { + properties: { + properties: { + properties: { + etag: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + name: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + properties: { + properties: { + properties: { + properties: { + cookieBasedAffinity: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + pickHostNameFromBackendAddress: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + port: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + protocol: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + provisioningState: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + requestRoutingRules: { + properties: { + items: { + properties: { + properties: { + properties: { + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + required: { + items: { + type: 'string' + } + type: 'array' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + requestTimeout: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + required: { + items: { + type: 'string' + } + type: 'array' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + enableHttp2: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + frontendIPConfigurations: { + properties: { + items: { + properties: { + properties: { + properties: { + etag: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + name: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + properties: { + properties: { + properties: { + properties: { + httpListeners: { + properties: { + items: { + properties: { + properties: { + properties: { + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + required: { + items: { + type: 'string' + } + type: 'array' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + privateIPAllocationMethod: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + provisioningState: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + subnet: { + properties: { + properties: { + properties: { + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + required: { + items: { + type: 'string' + } + type: 'array' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + frontendPorts: { + properties: { + items: { + properties: { + properties: { + properties: { + etag: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + name: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + properties: { + properties: { + properties: { + properties: { + httpListeners: { + properties: { + items: { + properties: { + properties: { + properties: { + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + required: { + items: { + type: 'string' + } + type: 'array' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + port: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + provisioningState: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + required: { + items: { + type: 'string' + } + type: 'array' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + gatewayIPConfigurations: { + properties: { + items: { + properties: { + properties: { + properties: { + etag: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + name: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + properties: { + properties: { + properties: { + properties: { + provisioningState: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + subnet: { + properties: { + properties: { + properties: { + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + required: { + items: { + type: 'string' + } + type: 'array' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + httpListeners: { + properties: { + items: { + properties: { + properties: { + properties: { + etag: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + name: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + properties: { + properties: { + properties: { + properties: { + frontendIPConfiguration: { + properties: { + properties: { + properties: { + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + frontendPort: { + properties: { + properties: { + properties: { + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + protocol: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + provisioningState: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + requestRoutingRules: { + properties: { + items: { + properties: { + properties: { + properties: { + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + required: { + items: { + type: 'string' + } + type: 'array' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + requireServerNameIndication: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + required: { + items: { + type: 'string' + } + type: 'array' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + operationalState: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + probes: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + provisioningState: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + redirectConfigurations: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + requestRoutingRules: { + properties: { + items: { + properties: { + properties: { + properties: { + etag: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + name: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + properties: { + properties: { + properties: { + properties: { + backendAddressPool: { + properties: { + properties: { + properties: { + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + backendHttpSettings: { + properties: { + properties: { + properties: { + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + httpListener: { + properties: { + properties: { + properties: { + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + provisioningState: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + ruleType: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + required: { + items: { + type: 'string' + } + type: 'array' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + resourceGuid: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + rewriteRuleSets: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + sku: { + properties: { + properties: { + properties: { + capacity: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + name: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + tier: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + sslCertificates: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + urlPathMaps: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + resourceGroup: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + sku: { + properties: {} + type: 'object' + } + subscriptionId: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + tags: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + tenantId: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + type: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + zones: { + properties: {} + type: 'object' + } + } + type: 'object' + } + required: { + items: { + type: 'string' + } + type: 'array' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + facets: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + resultTruncated: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + totalRecords: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + } + } + Parse_Idle_IP_addresses: { + runAfter: { + Get_idle_IP_addresses: [ + 'Succeeded' + ] + } + type: 'ParseJson' + inputs: { + content: '@body(\'Get_idle_IP_addresses\')' + schema: { + properties: { + properties: { + properties: { + count: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + data: { + properties: { + items: { + properties: { + properties: { + properties: { + extendedLocation: { + properties: {} + type: 'object' + } + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + identity: { + properties: {} + type: 'object' + } + kind: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + location: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + managedBy: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + name: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + plan: { + properties: {} + type: 'object' + } + properties: { + properties: { + properties: { + properties: { + idleTimeoutInMinutes: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + ipTags: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + provisioningState: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + publicIPAddressVersion: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + publicIPAllocationMethod: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + resourceGuid: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + resourceGroup: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + sku: { + properties: { + properties: { + properties: { + name: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + tier: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + subscriptionId: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + tags: { + properties: {} + type: 'object' + } + tenantId: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + type: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + zones: { + properties: {} + type: 'object' + } + } + type: 'object' + } + required: { + items: { + type: 'string' + } + type: 'array' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + facets: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + resultTruncated: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + totalRecords: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + } + } + Parse_Idle_Load_Balancers: { + runAfter: { + Get_idle_Load_Balancers: [ + 'Succeeded' + ] + } + type: 'ParseJson' + inputs: { + content: '@body(\'Get_idle_Load_Balancers\')' + schema: { + properties: { + items: { + properties: { + properties: { + properties: { + childErrors: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + errorType: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + lineNumber: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + linePosition: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + message: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + path: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + schemaId: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + value: { + properties: { + items: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + required: { + items: { + type: 'string' + } + type: 'array' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + } + } + Parse_Idle_disks: { + runAfter: { + Get_idle_Disks: [ + 'Succeeded' + ] + } + type: 'ParseJson' + inputs: { + content: '@body(\'Get_idle_Disks\')' + schema: { + properties: { + properties: { + properties: { + count: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + data: { + properties: { + items: { + properties: { + properties: { + properties: { + extendedLocation: { + properties: {} + type: 'object' + } + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + identity: { + properties: {} + type: 'object' + } + kind: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + location: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + managedBy: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + name: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + plan: { + properties: {} + type: 'object' + } + properties: { + properties: { + properties: { + properties: { + creationData: { + properties: { + properties: { + properties: { + createOption: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + imageReference: { + properties: { + properties: { + properties: { + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + diskIOPSReadWrite: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + diskMBpsReadWrite: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + diskSizeBytes: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + diskSizeGB: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + diskState: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + encryption: { + properties: { + properties: { + properties: { + type: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + hyperVGeneration: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + networkAccessPolicy: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + osType: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + provisioningState: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + publicNetworkAccess: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + supportedCapabilities: { + properties: { + properties: { + properties: { + architecture: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + timeCreated: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + uniqueId: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + resourceGroup: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + sku: { + properties: { + properties: { + properties: { + name: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + tier: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + subscriptionId: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + tags: { + properties: {} + type: 'object' + } + tenantId: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + type: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + zones: { + properties: {} + type: 'object' + } + } + type: 'object' + } + required: { + items: { + type: 'string' + } + type: 'array' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + facets: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + resultTruncated: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + totalRecords: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + } + } + Parse_Snapshots: { + runAfter: { + Get_Disk_Snapshots_older_than_30_days: [ + 'Succeeded' + ] + } + type: 'ParseJson' + inputs: { + content: '@body(\'Get_Disk_Snapshots_older_than_30_days\')' + schema: { + properties: { + query: { + type: 'string' + } + subscriptions: { + items: { + type: 'string' + } + type: 'array' + } + } + type: 'object' + } + } + } + Parse_stopped_VMs: { + runAfter: { + Get_Stopped_VMs: [ + 'Succeeded' + ] + } + type: 'ParseJson' + inputs: { + content: '@body(\'Get_Stopped_VMs\')' + schema: { + properties: { + properties: { + properties: { + count: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + data: { + properties: { + items: { + properties: { + properties: { + properties: { + extendedLocation: { + properties: {} + type: 'object' + } + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + identity: { + properties: {} + type: 'object' + } + kind: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + location: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + managedBy: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + name: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + plan: { + properties: {} + type: 'object' + } + properties: { + properties: { + properties: { + properties: { + diagnosticsProfile: { + properties: { + properties: { + properties: { + bootDiagnostics: { + properties: { + properties: { + properties: { + enabled: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + extended: { + properties: { + properties: { + properties: { + instanceView: { + properties: { + properties: { + properties: { + hyperVGeneration: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + powerState: { + properties: { + properties: { + properties: { + code: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + displayStatus: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + level: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + hardwareProfile: { + properties: { + properties: { + properties: { + vmSize: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + networkProfile: { + properties: { + properties: { + properties: { + networkInterfaces: { + properties: { + items: { + properties: { + properties: { + properties: { + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + required: { + items: { + type: 'string' + } + type: 'array' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + osProfile: { + properties: { + properties: { + properties: { + adminUsername: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + allowExtensionOperations: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + computerName: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + requireGuestProvisionSignal: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + secrets: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + windowsConfiguration: { + properties: { + properties: { + properties: { + enableAutomaticUpdates: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + patchSettings: { + properties: { + properties: { + properties: { + assessmentMode: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + enableHotpatching: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + patchMode: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + provisionVMAgent: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + provisioningState: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + storageProfile: { + properties: { + properties: { + properties: { + dataDisks: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + imageReference: { + properties: { + properties: { + properties: { + exactVersion: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + offer: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + publisher: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + sku: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + version: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + osDisk: { + properties: { + properties: { + properties: { + caching: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + createOption: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + deleteOption: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + diskSizeGB: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + managedDisk: { + properties: { + properties: { + properties: { + id: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + storageAccountType: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + name: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + osType: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + vmId: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + resourceGroup: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + sku: { + properties: {} + type: 'object' + } + subscriptionId: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + tags: { + properties: {} + type: 'object' + } + tenantId: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + type: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + zones: { + properties: {} + type: 'object' + } + } + type: 'object' + } + required: { + items: { + type: 'string' + } + type: 'array' + } + type: { + type: 'string' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + facets: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + resultTruncated: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + totalRecords: { + properties: { + type: { + type: 'string' + } + } + type: 'object' + } + } + type: 'object' + } + type: { + type: 'string' + } + } + type: 'object' + } + } + } + Set_alert_recipient: { + runAfter: { + Set_email_subject: [ + 'Succeeded' + ] + } + type: 'InitializeVariable' + inputs: { + variables: [ + { + name: 'SendAlertTo' + type: 'string' + } + ] + } + } + Initialize_App_Gateway_HTML: { + runAfter: { + Initialize_App_Gateways_URI: [ + 'Succeeded' + ] + } + type: 'InitializeVariable' + inputs: { + variables: [ + { + name: 'AppGatewayHTML' + type: 'string' + value: '

Idle Application Gateway Details

' + } + ] + } + } + Initialize_Disk_HTML: { + runAfter: { + Initialize_Disk_URI: [ + 'Succeeded' + ] + } + type: 'InitializeVariable' + inputs: { + variables: [ + { + name: 'IdleDiskHTML' + type: 'string' + value: '

Idle Disk Details

' + } + ] + } + } + 'Send_an_email_(V2)': { + runAfter: { + EmailNotice: [ + 'Succeeded' + ] + } + type: 'ApiConnection' + inputs: { + host: { + connection: { + name: '@parameters(\'$connections\')[\'office365\'][\'connectionId\']' + } + } + method: 'post' + body: { + To: '@variables(\'SendAlertTo\')' + Subject: '@variables(\'SetEmailSubject\')' + Body: '

@{variables(\'EmailNotice\')}

@{variables(\'AppGatewayHTML\')}
@{variables(\'IdleDiskHTML\')}
@{variables(\'IPAddressHTML\')}
@{variables(\'LoadBalancerHTML\')}
@{variables(\'DiskSnapshotHTML\')}
@{variables(\'StoppedVMHTML\')}


📧 About FinOps alerts

FinOps alerts keep you informed about cost optimization opportunities within in your cloud environment. They are fully configurable and can be tailored to run on your desired schedule, ensuring that you receive timely notifications on the scenarios most important to your organization. FinOps alerts are part of the FinOps toolkit, an open-source collection of FinOps solutions that help you manage and optimize your cost, usage, and carbon.

Provide feedback

Give feedback
Vote on or suggest ideas


' + } + path: '/v2/Mail' + } + } + Initialize_IP_Address_HTML: { + runAfter: { + Initialize_IP_addresses_URI: [ + 'Succeeded' + ] + } + type: 'InitializeVariable' + inputs: { + variables: [ + { + name: 'IPAddressHTML' + type: 'string' + value: '

Idle IP Address Details

' + } + ] + } + } + Initialize_Load_Balancer_HTML: { + runAfter: { + Initialize_Load_Balancer_URI: [ + 'Succeeded' + ] + } + type: 'InitializeVariable' + inputs: { + variables: [ + { + name: 'LoadBalancerHTML' + type: 'string' + value: '

Idle Load Balancer Details

' + } + ] + } + } + Initialize_Disk_Snapshot_HTML: { + runAfter: { + Initialize_Snapshot_URI: [ + 'Succeeded' + ] + } + type: 'InitializeVariable' + inputs: { + variables: [ + { + name: 'DiskSnapshotHTML' + type: 'string' + value: '

Old Disk Snapshot Details

' + } + ] + } + } + Initialize_Stopped_VM_HTML: { + runAfter: { + Initialize_Stopped_VM_URI: [ + 'Succeeded' + ] + } + type: 'InitializeVariable' + inputs: { + variables: [ + { + name: 'StoppedVMHTML' + type: 'string' + value: '

Stopped VM Details

' + } + ] + } + } + End_to_App_Gateway_HTML: { + runAfter: { + For_each_App_GW: [ + 'Succeeded' + ] + } + type: 'AppendToStringVariable' + inputs: { + name: 'AppGatewayHTML' + value: '
NameResource GroupSubscription
' + } + } + End_to_IP_Address_HTML: { + runAfter: { + For_each_IP_address: [ + 'Succeeded' + ] + } + type: 'AppendToStringVariable' + inputs: { + name: 'IPAddressHTML' + value: ' ' + } + } + End_to_Disk_HTML: { + runAfter: { + For_each_Disk: [ + 'Succeeded' + ] + } + type: 'AppendToStringVariable' + inputs: { + name: 'IdleDiskHTML' + value: '' + } + } + End_to_Load_Balancer_HTML: { + runAfter: { + For_each_Load_Balancer: [ + 'Succeeded' + ] + } + type: 'AppendToStringVariable' + inputs: { + name: 'LoadBalancerHTML' + value: '' + } + } + End_to_Disk_Snapshot_HTML: { + runAfter: { + For_each_Snapshot: [ + 'Succeeded' + ] + } + type: 'AppendToStringVariable' + inputs: { + name: 'DiskSnapshotHTML' + value: '' + } + } + End_to_Stopped_VM_HTML: { + runAfter: { + For_each_Stopped_VM: [ + 'Succeeded' + ] + } + type: 'AppendToStringVariable' + inputs: { + name: 'StoppedVMHTML' + value: '' + } + } + Set_email_subject: { + runAfter: {} + type: 'InitializeVariable' + inputs: { + variables: [ + { + name: 'SetEmailSubject' + type: 'string' + } + ] + } + } + Included_subscriptions: { + runAfter: { + Set_alert_recipient: [ + 'Succeeded' + ] + } + type: 'InitializeVariable' + inputs: { + variables: [ + { + name: 'IncludedSubscriptions' + type: 'array' + value: [] + } + ] + } + } + Initialize_resources_table: { + runAfter: { + Excluded_subscriptions: [ + 'Succeeded' + ] + } + type: 'InitializeVariable' + inputs: { + variables: [ + { + name: 'resourcesTable' + type: 'string' + value: 'resources@{if(equals(length(variables(\'IncludedSubscriptions\')), 0), \'\', concat(\'| where subscriptionId in ("\', replace(replace(string(variables(\'IncludedSubscriptions\')), \'[\', \'\'), \']\', \'\'), \'")\'))}@{if(equals(length(variables(\'ExcludedSubscriptions\')), 0), \'\', concat(\'| where subscriptionId !in ("\', replace(replace(string(variables(\'ExcludedSubscriptions\')), \'[\', \'\'), \']\', \'\'), \'")\'))}' + } + ] + } + } + Condition_App_Gateway: { + actions: { + Append_no_App_Gateway_results_text: { + type: 'AppendToStringVariable' + inputs: { + name: 'AppGatewayHTML' + value: 'No resources are idle.' + } + } + } + runAfter: { + Initialize_App_Gateway_HTML: [ + 'Succeeded' + ] + } + else: { + actions: { + Append_App_Gateway_results_in_table: { + type: 'AppendToStringVariable' + inputs: { + name: 'AppGatewayHTML' + value: '\n \n \n \n \n \n' + } + } + } + } + expression: { + and: [ + { + equals: [ + '@length(body(\'Get_idle_App_Gateways\')[\'data\'])' + 0 + ] + } + ] + } + type: 'If' + } + Condition_Stopped_VMs: { + actions: { + Append_no_Stopped_VM_results_text_: { + type: 'AppendToStringVariable' + inputs: { + name: 'StoppedVMHTML' + value: 'No resources are idle.' + } + } + } + runAfter: { + Initialize_Stopped_VM_HTML: [ + 'Succeeded' + ] + } + else: { + actions: { + Append_Stopped_VM_result_in_table_: { + type: 'AppendToStringVariable' + inputs: { + name: 'StoppedVMHTML' + value: '
NameResource GroupSubscription
\n \n \n \n \n \n' + } + } + } + } + expression: { + and: [ + { + equals: [ + '@length(body(\'Get_Stopped_VMs\')[\'data\'])' + 0 + ] + } + ] + } + type: 'If' + } + Condition_Disk: { + actions: { + Append_no_Disk_results_text: { + type: 'AppendToStringVariable' + inputs: { + name: 'IdleDiskHTML' + value: 'No resources are idle.' + } + } + } + runAfter: { + Initialize_Disk_HTML: [ + 'Succeeded' + ] + } + else: { + actions: { + Append_Disk_results_in_table: { + type: 'AppendToStringVariable' + inputs: { + name: 'IdleDiskHTML' + value: '
NameResource GroupSubscription
\n \n \n \n \n \n' + } + } + } + } + expression: { + and: [ + { + equals: [ + '@length(body(\'Get_idle_Disks\')[\'data\'])' + 0 + ] + } + ] + } + type: 'If' + } + Condition_IP_Address: { + actions: { + Append_no_IP_Address_results_text: { + type: 'AppendToStringVariable' + inputs: { + name: 'IPAddressHTML' + value: 'No resources are idle.' + } + } + } + runAfter: { + Initialize_IP_Address_HTML: [ + 'Succeeded' + ] + } + else: { + actions: { + Append_IP_Address_results_in_table: { + type: 'AppendToStringVariable' + inputs: { + name: 'IPAddressHTML' + value: '
NameResource GroupSubscription
\n \n \n \n \n \n' + } + } + } + } + expression: { + and: [ + { + equals: [ + '@length(body(\'Get_idle_IP_addresses\')[\'data\'])' + 0 + ] + } + ] + } + type: 'If' + } + Condition_Load_Balancer: { + actions: { + Append_no_Load_Balancer_results_text: { + type: 'AppendToStringVariable' + inputs: { + name: 'LoadBalancerHTML' + value: 'No resources are idle.' + } + } + } + runAfter: { + Initialize_Load_Balancer_HTML: [ + 'Succeeded' + ] + } + else: { + actions: { + Append_Load_Balancer_results_in_table: { + type: 'AppendToStringVariable' + inputs: { + name: 'LoadBalancerHTML' + value: '
NameResource GroupSubscription
\n \n \n \n \n \n' + } + } + } + } + expression: { + and: [ + { + equals: [ + '@length(body(\'Get_idle_Load_Balancers\')[\'data\'])' + 0 + ] + } + ] + } + type: 'If' + } + Condition_Disk_Snapshots: { + actions: { + Append_no_Disk_Snapshot_results_text: { + type: 'AppendToStringVariable' + inputs: { + name: 'DiskSnapshotHTML' + value: 'No resources are idle.' + } + } + } + runAfter: { + Initialize_Disk_Snapshot_HTML: [ + 'Succeeded' + ] + } + else: { + actions: { + Append_Disk_Snapshot_results_in_table: { + type: 'AppendToStringVariable' + inputs: { + name: 'DiskSnapshotHTML' + value: '
NameResource GroupSubscription
\n \n \n \n \n \n' + } + } + } + } + expression: { + and: [ + { + equals: [ + '@length(body(\'Get_Disk_Snapshots_older_than_30_days\')[\'data\'])' + 0 + ] + } + ] + } + type: 'If' + } + Condition_App_Gateway_next_steps: { + actions: {} + runAfter: { + End_to_App_Gateway_HTML: [ + 'Succeeded' + ] + } + else: { + actions: { + Append_to_App_Gateway_table: { + type: 'AppendToStringVariable' + inputs: { + name: 'AppGatewayHTML' + value: '
\n 👉 Next steps: Review application gateways which include backend pools with no targets.\n
' + } + } + } + } + expression: { + and: [ + { + equals: [ + '@length(body(\'Get_idle_App_Gateways\')[\'data\'])' + 0 + ] + } + ] + } + type: 'If' + } + Condition_Disk_next_steps: { + actions: {} + runAfter: { + End_to_Disk_HTML: [ + 'Succeeded' + ] + } + else: { + actions: { + Append_to_Disk_table: { + type: 'AppendToStringVariable' + inputs: { + name: 'IdleDiskHTML' + value: '
\n 👉 Next steps: Review managed disks that are not attached to any virtual machine.\n
' + } + } + } + } + expression: { + and: [ + { + equals: [ + '@length(body(\'Get_idle_Disks\')[\'data\'])' + 0 + ] + } + ] + } + type: 'If' + } + Condition_IP_Address_next_steps: { + actions: {} + runAfter: { + End_to_IP_Address_HTML: [ + 'Succeeded' + ] + } + else: { + actions: { + Append_to_IP_Address_table: { + type: 'AppendToStringVariable' + inputs: { + name: 'IPAddressHTML' + value: '
\n 👉 Next steps: Review unattached public IP addresses, as they may represent additional cost.\n
' + } + } + } + } + expression: { + and: [ + { + equals: [ + '@length(body(\'Get_idle_IP_addresses\')[\'data\'])' + 0 + ] + } + ] + } + type: 'If' + } + Condition_Load_Balancer_next_steps: { + actions: {} + runAfter: { + End_to_Load_Balancer_HTML: [ + 'Succeeded' + ] + } + else: { + actions: { + Append_to_Load_Balancer_table: { + type: 'AppendToStringVariable' + inputs: { + name: 'LoadBalancerHTML' + value: '
\n 👉 Next steps: Review load balancers with no backend pools and remove them if not needed.\n
' + } + } + } + } + expression: { + and: [ + { + equals: [ + '@length(body(\'Get_idle_Load_Balancers\')[\'data\'])' + 0 + ] + } + ] + } + type: 'If' + } + Condition_Disk_Snapshot_next_steps: { + actions: {} + runAfter: { + End_to_Disk_Snapshot_HTML: [ + 'Succeeded' + ] + } + else: { + actions: { + Append_to_Disk_Snapshot_table: { + type: 'AppendToStringVariable' + inputs: { + name: 'DiskSnapshotHTML' + value: '
\n 👉 Next steps: Review managed disk snapshots that are older than 30 days.\n
' + } + } + } + } + expression: { + and: [ + { + equals: [ + '@length(body(\'Get_Disk_Snapshots_older_than_30_days\')[\'data\'])' + 0 + ] + } + ] + } + type: 'If' + } + Condition_stopped_VM_next_steps: { + actions: {} + runAfter: { + End_to_Stopped_VM_HTML: [ + 'Succeeded' + ] + } + else: { + actions: { + Append_to_Stopped_VM_table: { + type: 'AppendToStringVariable' + inputs: { + name: 'StoppedVMHTML' + value: '
\n 👉 Next steps: Review stopped VMs, as they are billed for the allocated cost.\n
' + } + } + } + } + expression: { + and: [ + { + equals: [ + '@length(body(\'Get_Stopped_VMs\')[\'data\'])' + 0 + ] + } + ] + } + type: 'If' + } + EmailNotice: { + runAfter: { + Condition_App_Gateway_next_steps: [ + 'Succeeded' + ] + Condition_Disk_next_steps: [ + 'Succeeded' + ] + Condition_IP_Address_next_steps: [ + 'Succeeded' + ] + Condition_Load_Balancer_next_steps: [ + 'Succeeded' + ] + Condition_Disk_Snapshot_next_steps: [ + 'Succeeded' + ] + Condition_stopped_VM_next_steps: [ + 'Succeeded' + ] + } + type: 'InitializeVariable' + inputs: { + variables: [ + { + name: 'EmailNotice' + type: 'string' + value: '

The following resources have been identified through FinOps alerts. Please take a moment to review and proceed with the next steps outlined below:



' + } + ] + } + } + } + outputs: {} + } + parameters: { + '$connections': { + value: { + office365: { + connectionId: apiConnection.id + connectionName: connectionName + id: resourceId('Microsoft.Web/locations/managedApis', location, 'office365') + } + } + } + } + } + name: appName + location: location + tags: { + displayName: 'FinOpsalert' + } +} + +resource apiConnection 'Microsoft.Web/connections@2016-06-01' = { + name: connectionName + location: location + properties: { + api: { + id: resourceId('Microsoft.Web/locations/managedApis', location, 'office365') + } + displayName:displayName + } +} + +//============================================================================== +// Outputs +//============================================================================== +output logicAppName string = finopsAlerts.name +output connectionName string = connectionName +output actionsCount int = length(actionKeys) +output logicAppResourceId string = finopsAlerts.id +output logicAppPrincipalId string = finopsAlerts.identity.principalId +output logicAppTriggerUrl string = 'https://${finopsAlerts.name}.logic.azure.com:443/workflows/${finopsAlerts.name}/triggers/Recurrence/run?api-version=2016-10-01' diff --git a/src/templates/finops-hub/dashboard.json b/src/templates/finops-hub/dashboard.json index 4217466f0..e63c47647 100644 --- a/src/templates/finops-hub/dashboard.json +++ b/src/templates/finops-hub/dashboard.json @@ -1,8 +1,8 @@ { - "$schema": "https://dataexplorer.azure.com/static/d/schema/52/dashboard.json", + "$schema": "https://dataexplorer.azure.com/static/d/schema/60/dashboard.json", "id": "a20bfb32-a3e1-4854-bc9f-e93b86e40813", - "eTag": "9d0d10a6-73e5-442d-852c-54c476106e31", - "schema_version": "52", + "eTag": "b8194dc2-334e-4644-886f-848b65e14aa8", + "schema_version": "60", "title": "FinOps hub", "tiles": [ { @@ -11,7 +11,10 @@ "visualType": "multistat", "pageId": "f416685d-f559-4514-8e45-5e0e09aec286", "layout": { "x": 0, "y": 3, "width": 4, "height": 8 }, - "queryRef": { "kind": "query", "queryId": "152f2041-bbc1-41e4-b155-271b2e0cf6e9" }, + "queryRef": { + "kind": "query", + "queryId": "152f2041-bbc1-41e4-b155-271b2e0cf6e9" + }, "visualOptions": { "multiStat__textSize": "large", "multiStat__valueColumn": null, @@ -29,10 +32,21 @@ "visualType": "column", "pageId": "f416685d-f559-4514-8e45-5e0e09aec286", "layout": { "x": 4, "y": 3, "width": 17, "height": 4 }, - "queryRef": { "kind": "query", "queryId": "bc24e050-f2b9-4b4a-a08d-69fc4a4bb95e" }, + "queryRef": { + "kind": "query", + "queryId": "bc24e050-f2b9-4b4a-a08d-69fc4a4bb95e" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -47,7 +61,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -56,10 +72,21 @@ "visualType": "column", "pageId": "f416685d-f559-4514-8e45-5e0e09aec286", "layout": { "x": 4, "y": 7, "width": 17, "height": 4 }, - "queryRef": { "kind": "query", "queryId": "0d91ea4a-c81d-4a21-b708-b6af37be1eec" }, + "queryRef": { + "kind": "query", + "queryId": "0d91ea4a-c81d-4a21-b708-b6af37be1eec" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -74,7 +101,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -83,7 +112,10 @@ "visualType": "multistat", "pageId": "f416685d-f559-4514-8e45-5e0e09aec286", "layout": { "x": 0, "y": 11, "width": 12, "height": 4 }, - "queryRef": { "kind": "query", "queryId": "f2cecbb0-13f8-4642-afa4-bbcc0558f777" }, + "queryRef": { + "kind": "query", + "queryId": "f2cecbb0-13f8-4642-afa4-bbcc0558f777" + }, "visualOptions": { "multiStat__textSize": "auto", "multiStat__valueColumn": null, @@ -101,7 +133,10 @@ "visualType": "multistat", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 15, "width": 6, "height": 8 }, - "queryRef": { "kind": "query", "queryId": "5d63e04d-1a11-4307-96f1-ebbf68e09be0" }, + "queryRef": { + "kind": "query", + "queryId": "5d63e04d-1a11-4307-96f1-ebbf68e09be0" + }, "visualOptions": { "multiStat__textSize": "auto", "multiStat__valueColumn": null, @@ -135,10 +170,21 @@ "visualType": "column", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 6, "y": 2, "width": 16, "height": 9 }, - "queryRef": { "kind": "query", "queryId": "290e7eab-8159-4338-8531-85e2718cedb1" }, + "queryRef": { + "kind": "query", + "queryId": "290e7eab-8159-4338-8531-85e2718cedb1" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "Effective cost", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "Effective cost", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [ { "id": "e7c54e29-4843-465c-ab63-75e816da8fe0", @@ -163,7 +209,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -172,7 +220,7 @@ "visualType": "markdownCard", "pageId": "969ddf4c-8f2a-4ec4-9588-bb2f39473c9f", "layout": { "x": 0, "y": 0, "width": 18, "height": 6 }, - "markdownText": "# FinOps hubs 0.8 (January 2025)\nThe FinOps hub dashboard provides several summaries of your cost and usage in aligment with the [FinOps Framework](https://aka.ms/ftk/fx/capabilities). All data formatted based on the [FinOps Open Cost and Usage Specification (FOCUS)](https://aka.ms/finops/focus).\n\nMost of this dashboard is designed to work with effective (amortized) cost rather than billed (actual) cost. Amortization breaks down reservation and savings plan purchases and allocates costs to the resources that received the benefit to facilitate chargeback reporting. Effective costs will not match your invoice. For invoice reconciliation, refer to the **Invoicing** page.\n\n[Learn more](https://aka.ms/finops/hubs)\n", + "markdownText": "# FinOps hubs $$ftkver$$ ($$build-month$$)\nThe FinOps hub dashboard provides several summaries of your cost and usage in aligment with the [FinOps Framework](https://aka.ms/finops/fx). All data formatted based on the [FinOps Open Cost and Usage Specification (FOCUS)](https://aka.ms/finops/focus).\n\nMost of this dashboard is designed to work with effective (amortized) cost rather than billed (actual) cost. Amortization breaks down reservation and savings plan purchases and allocates costs to the resources that received the benefit to facilitate chargeback reporting. Effective costs will not match your invoice. For invoice reconciliation, refer to the **Invoicing** page.\n\n[Learn more](https://aka.ms/finops/hubs)     [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Summary)\n", "visualOptions": {} }, { @@ -189,11 +237,22 @@ "title": "3-month running total trend", "visualType": "column", "pageId": "5838c918-4541-44fe-90d2-77306ef1e241", - "layout": { "x": 0, "y": 13, "width": 16, "height": 7 }, - "queryRef": { "kind": "query", "queryId": "d5ed469a-45ea-49a2-b305-b841050213cf" }, + "layout": { "x": 0, "y": 14, "width": 16, "height": 7 }, + "queryRef": { + "kind": "query", + "queryId": "d5ed469a-45ea-49a2-b305-b841050213cf" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -208,7 +267,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -217,10 +278,21 @@ "visualType": "area", "pageId": "5c57f940-6f0f-4e39-930b-b6e89bb758ad", "layout": { "x": 0, "y": 3, "width": 16, "height": 8 }, - "queryRef": { "kind": "query", "queryId": "10300876-866a-40d7-836d-b3a8783ecece" }, + "queryRef": { + "kind": "query", + "queryId": "10300876-866a-40d7-836d-b3a8783ecece" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -235,7 +307,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -243,11 +317,22 @@ "title": "3-month daily trend", "visualType": "column", "pageId": "5838c918-4541-44fe-90d2-77306ef1e241", - "layout": { "x": 0, "y": 20, "width": 16, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "9e41a624-d5f9-40c6-b47f-fef4b50ec3dd" }, + "layout": { "x": 0, "y": 21, "width": 16, "height": 5 }, + "queryRef": { + "kind": "query", + "queryId": "9e41a624-d5f9-40c6-b47f-fef4b50ec3dd" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -262,7 +347,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -270,11 +357,22 @@ "title": "3-month daily trend by subscription", "visualType": "stackedcolumn", "pageId": "5838c918-4541-44fe-90d2-77306ef1e241", - "layout": { "x": 0, "y": 25, "width": 16, "height": 7 }, - "queryRef": { "kind": "query", "queryId": "f26e2204-270e-4219-8f68-5acef1c9393f" }, + "layout": { "x": 0, "y": 26, "width": 16, "height": 7 }, + "queryRef": { + "kind": "query", + "queryId": "f26e2204-270e-4219-8f68-5acef1c9393f" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -289,7 +387,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -298,10 +398,21 @@ "visualType": "stackedarea", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 6, "y": 11, "width": 16, "height": 7 }, - "queryRef": { "kind": "query", "queryId": "dcc1f533-e5f9-4855-9e4c-21e21fcdf943" }, + "queryRef": { + "kind": "query", + "queryId": "dcc1f533-e5f9-4855-9e4c-21e21fcdf943" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "Cost + savings", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "Cost + savings", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -316,7 +427,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -325,7 +438,10 @@ "visualType": "multistat", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 2, "width": 6, "height": 13 }, - "queryRef": { "kind": "query", "queryId": "e8b343dc-7430-4487-8d44-ef48ac454f2d" }, + "queryRef": { + "kind": "query", + "queryId": "e8b343dc-7430-4487-8d44-ef48ac454f2d" + }, "visualOptions": { "multiStat__textSize": "auto", "multiStat__valueColumn": null, @@ -374,7 +490,10 @@ "visualType": "table", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 23, "width": 22, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "c077a6d4-719f-42fe-b39b-36f77dc68976" }, + "queryRef": { + "kind": "query", + "queryId": "c077a6d4-719f-42fe-b39b-36f77dc68976" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": false, @@ -393,7 +512,10 @@ "visualType": "table", "pageId": "5c57f940-6f0f-4e39-930b-b6e89bb758ad", "layout": { "x": 0, "y": 11, "width": 22, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "3d947a7c-edca-46b5-a862-de77a725c85f" }, + "queryRef": { + "kind": "query", + "queryId": "3d947a7c-edca-46b5-a862-de77a725c85f" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": false, @@ -412,7 +534,10 @@ "visualType": "table", "pageId": "5c57f940-6f0f-4e39-930b-b6e89bb758ad", "layout": { "x": 0, "y": 16, "width": 22, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "3886b5cd-34a8-42d7-9e16-33ea4d236953" }, + "queryRef": { + "kind": "query", + "queryId": "3886b5cd-34a8-42d7-9e16-33ea4d236953" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": false, @@ -431,7 +556,7 @@ "visualType": "markdownCard", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 58, "width": 22, "height": 4 }, - "markdownText": "# Regions\r\nEffective cost breakdown by region\r\n\r\n⬆️ [Top](?tile=e3ac3bbc-a9ef-44dd-828f-226afbcfda33)", + "markdownText": "# Regions\r\nEffective cost breakdown by region\r\n\r\n⬆️ [Top](?tile=e3ac3bbc-a9ef-44dd-828f-226afbcfda33)     💜 [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Understand.Summary.Regions)", "visualOptions": {} }, { @@ -440,10 +565,21 @@ "visualType": "stackedcolumn", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 62, "width": 22, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "d5224d06-c8e7-4dd9-afec-595b39712f5a" }, + "queryRef": { + "kind": "query", + "queryId": "d5224d06-c8e7-4dd9-afec-595b39712f5a" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -458,7 +594,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -467,7 +605,10 @@ "visualType": "table", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 67, "width": 22, "height": 8 }, - "queryRef": { "kind": "query", "queryId": "0dcf2c54-7f1d-45e9-a53b-d598a24493a4" }, + "queryRef": { + "kind": "query", + "queryId": "0dcf2c54-7f1d-45e9-a53b-d598a24493a4" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": false, @@ -486,10 +627,21 @@ "visualType": "stackedcolumn", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 45, "width": 22, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "30644718-defd-4c6c-9ffa-a9c2cd1f871f" }, + "queryRef": { + "kind": "query", + "queryId": "30644718-defd-4c6c-9ffa-a9c2cd1f871f" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -504,7 +656,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -513,7 +667,10 @@ "visualType": "table", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 50, "width": 22, "height": 8 }, - "queryRef": { "kind": "query", "queryId": "6259f773-593c-4953-898c-15aa5ff6e53a" }, + "queryRef": { + "kind": "query", + "queryId": "6259f773-593c-4953-898c-15aa5ff6e53a" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": false, @@ -532,7 +689,7 @@ "visualType": "markdownCard", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 75, "width": 22, "height": 4 }, - "markdownText": "# Subscriptions\r\nEffective cost breakdown by subscription (subaccount)\r\n\r\n⬆️ [Top](?tile=e3ac3bbc-a9ef-44dd-828f-226afbcfda33)", + "markdownText": "# Subscriptions\r\nEffective cost breakdown by subscription (subaccount)\r\n\r\n⬆️ [Top](?tile=e3ac3bbc-a9ef-44dd-828f-226afbcfda33)     💜 [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Understand.Summary.Subscriptions)", "visualOptions": {} }, { @@ -541,10 +698,21 @@ "visualType": "stackedcolumn", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 79, "width": 22, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "21a87abe-19e2-44ec-8298-ba872e66c162" }, + "queryRef": { + "kind": "query", + "queryId": "21a87abe-19e2-44ec-8298-ba872e66c162" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -559,7 +727,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -568,7 +738,10 @@ "visualType": "table", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 84, "width": 22, "height": 8 }, - "queryRef": { "kind": "query", "queryId": "90502e9a-2d0d-4ae4-8d9d-cc21f9b72d5d" }, + "queryRef": { + "kind": "query", + "queryId": "90502e9a-2d0d-4ae4-8d9d-cc21f9b72d5d" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": false, @@ -587,7 +760,10 @@ "visualType": "table", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 101, "width": 22, "height": 8 }, - "queryRef": { "kind": "query", "queryId": "c2c65ec0-e57d-4834-8a6b-b5975afeb9a0" }, + "queryRef": { + "kind": "query", + "queryId": "c2c65ec0-e57d-4834-8a6b-b5975afeb9a0" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": false, @@ -606,10 +782,21 @@ "visualType": "stackedcolumn", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 96, "width": 22, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "61b26784-6a73-4e80-85b2-9c5cfbd2dd06" }, + "queryRef": { + "kind": "query", + "queryId": "61b26784-6a73-4e80-85b2-9c5cfbd2dd06" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -624,7 +811,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -633,7 +822,7 @@ "visualType": "markdownCard", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 92, "width": 22, "height": 4 }, - "markdownText": "# Resource groups\r\nEffective cost breakdown by resource group\r\n\r\n⬆️ [Top](?tile=e3ac3bbc-a9ef-44dd-828f-226afbcfda33)", + "markdownText": "# Resource groups\r\nEffective cost breakdown by resource group\r\n\r\n⬆️ [Top](?tile=e3ac3bbc-a9ef-44dd-828f-226afbcfda33)     💜 [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Understand.Summary.ResourceGroups)", "visualOptions": {} }, { @@ -642,7 +831,7 @@ "visualType": "markdownCard", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 109, "width": 22, "height": 4 }, - "markdownText": "# Resources\r\nEffective cost breakdown by resource\r\n\r\n⬆️ [Top](?tile=e3ac3bbc-a9ef-44dd-828f-226afbcfda33)", + "markdownText": "# Resources\r\nEffective cost breakdown by resource\r\n\r\n⬆️ [Top](?tile=e3ac3bbc-a9ef-44dd-828f-226afbcfda33)     💜 [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Understand.Summary.Resources)", "visualOptions": {} }, { @@ -651,10 +840,21 @@ "visualType": "stackedcolumn", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 113, "width": 22, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "3924981c-23e4-464d-a872-045df1752750" }, + "queryRef": { + "kind": "query", + "queryId": "3924981c-23e4-464d-a872-045df1752750" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -669,7 +869,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -678,7 +880,10 @@ "visualType": "table", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 123, "width": 22, "height": 8 }, - "queryRef": { "kind": "query", "queryId": "c7be613e-deb4-4779-ad75-4445e8d5e01f" }, + "queryRef": { + "kind": "query", + "queryId": "c7be613e-deb4-4779-ad75-4445e8d5e01f" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": false, @@ -697,10 +902,21 @@ "visualType": "stackedcolumn", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 118, "width": 22, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "49e24ee0-91de-4b1c-973f-036a3c060aca" }, + "queryRef": { + "kind": "query", + "queryId": "49e24ee0-91de-4b1c-973f-036a3c060aca" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -715,7 +931,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -724,7 +942,7 @@ "visualType": "markdownCard", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 28, "width": 22, "height": 4 }, - "markdownText": "# Services\r\nEffective cost breakdown by service category and service name\r\n\r\n⬆️ [Top](?tile=e3ac3bbc-a9ef-44dd-828f-226afbcfda33)", + "markdownText": "# Services\r\nEffective cost breakdown by service category and service name\r\n\r\n⬆️ [Top](?tile=e3ac3bbc-a9ef-44dd-828f-226afbcfda33)     💜 [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Understand.Summary.Services)", "visualOptions": {} }, { @@ -733,10 +951,21 @@ "visualType": "stackedcolumn", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 32, "width": 22, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "4c7a7614-9b8c-415b-a4e1-d2d53c023d31" }, + "queryRef": { + "kind": "query", + "queryId": "4c7a7614-9b8c-415b-a4e1-d2d53c023d31" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -751,7 +980,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -760,7 +991,10 @@ "visualType": "table", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 37, "width": 22, "height": 8 }, - "queryRef": { "kind": "query", "queryId": "1d273b55-d2ea-427c-8a5f-01f6c240e98a" }, + "queryRef": { + "kind": "query", + "queryId": "1d273b55-d2ea-427c-8a5f-01f6c240e98a" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": false, @@ -779,7 +1013,7 @@ "visualType": "markdownCard", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 131, "width": 22, "height": 4 }, - "markdownText": "# Resource inventory\r\nSummary of resources and their costs\r\n\r\n⬆️ [Top](?tile=e3ac3bbc-a9ef-44dd-828f-226afbcfda33)", + "markdownText": "# Resource inventory\r\nSummary of resources and their costs\r\n\r\n⬆️ [Top](?tile=e3ac3bbc-a9ef-44dd-828f-226afbcfda33)     💜 [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Understand.Summary.ResourceInventory)", "visualOptions": {} }, { @@ -788,10 +1022,21 @@ "visualType": "stackedcolumn", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 154, "width": 22, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "90e30901-a931-4a1d-b81e-0a1821032c3c" }, + "queryRef": { + "kind": "query", + "queryId": "90e30901-a931-4a1d-b81e-0a1821032c3c" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -806,7 +1051,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -815,10 +1062,21 @@ "visualType": "stackedcolumn", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 141, "width": 22, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "ebe41e27-e9f9-478e-ab90-fd1f87906766" }, + "queryRef": { + "kind": "query", + "queryId": "ebe41e27-e9f9-478e-ab90-fd1f87906766" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -833,7 +1091,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -842,7 +1102,10 @@ "visualType": "table", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 159, "width": 22, "height": 8 }, - "queryRef": { "kind": "query", "queryId": "7f7b08a9-ae15-46f8-8b0f-767280375add" }, + "queryRef": { + "kind": "query", + "queryId": "7f7b08a9-ae15-46f8-8b0f-767280375add" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": false, @@ -861,11 +1124,22 @@ "visualType": "bar", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 17, "y": 146, "width": 5, "height": 8 }, - "queryRef": { "kind": "query", "queryId": "a35b4c05-8ecb-4c51-9aaf-980af3d7923e" }, + "queryRef": { + "kind": "query", + "queryId": "a35b4c05-8ecb-4c51-9aaf-980af3d7923e" + }, "description": "Uses the Daily trend parameter for the lookback period", "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -880,7 +1154,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -889,11 +1165,22 @@ "visualType": "bar", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 12, "y": 146, "width": 5, "height": 8 }, - "queryRef": { "kind": "query", "queryId": "9c5d3cf0-b6cb-45a2-acfd-b19df425bddf" }, + "queryRef": { + "kind": "query", + "queryId": "9c5d3cf0-b6cb-45a2-acfd-b19df425bddf" + }, "description": "Uses the Daily trend parameter for the lookback period", "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -908,7 +1195,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -917,7 +1206,10 @@ "visualType": "table", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 146, "width": 12, "height": 8 }, - "queryRef": { "kind": "query", "queryId": "2d7b6447-2769-40b8-958a-f252dab68b1e" }, + "queryRef": { + "kind": "query", + "queryId": "2d7b6447-2769-40b8-958a-f252dab68b1e" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": false, @@ -936,7 +1228,10 @@ "visualType": "multistat", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 135, "width": 22, "height": 6 }, - "queryRef": { "kind": "query", "queryId": "f062533b-8c94-412f-bf83-0eb5cd06063d" }, + "queryRef": { + "kind": "query", + "queryId": "f062533b-8c94-412f-bf83-0eb5cd06063d" + }, "hideTitle": true, "visualOptions": { "multiStat__textSize": "auto", @@ -954,8 +1249,8 @@ "title": "", "visualType": "markdownCard", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 117, "width": 22, "height": 4 }, - "markdownText": "# SKU prices\r\nSummary of the SKUs used and their applicable discounts\r\n\r\n⬆️ [Top](?tile=c0bd4bc4-a910-4a74-89a9-d4ae0f995563)", + "layout": { "x": 0, "y": 114, "width": 22, "height": 4 }, + "markdownText": "# SKU prices\r\nSummary of the SKUs used and their applicable discounts\r\n\r\n⬆️ [Top](?tile=c0bd4bc4-a910-4a74-89a9-d4ae0f995563)     💜 [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Understand.RateOptimization.SkuPrices)", "visualOptions": {} }, { @@ -964,7 +1259,7 @@ "visualType": "markdownCard", "pageId": "ea47329e-0bc9-4c11-b110-534878dbb3ad", "layout": { "x": 0, "y": 0, "width": 22, "height": 5 }, - "markdownText": "# Understand uage and cost\nThe **Understand usage and cost** domain is focused on data acquisition, reporting, analysis, and alerting on top of your cost, usage, and carbon consumption. This domain focuses on observability and business intelligence. It involves gathering data (ingestion), organizing it for the organization (allocation), generating reports (reporting), and monitoring to proactively identify and address issues (anomalies).\n\n[Learn more](https://learn.microsoft.com/cloud-computing/finops/framework/understand/understand-cloud-usage-cost)\n", + "markdownText": "# Understand uage and cost\nThe **Understand usage and cost** domain is focused on data acquisition, reporting, analysis, and alerting on top of your cost, usage, and carbon consumption. This domain focuses on observability and business intelligence. It involves gathering data (ingestion), organizing it for the organization (allocation), generating reports (reporting), and monitoring to proactively identify and address issues (anomalies).\n\n[Learn more](https://learn.microsoft.com/cloud-computing/finops/framework/understand/understand-cloud-usage-cost)     [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Understand)\n", "visualOptions": {} }, { @@ -1008,8 +1303,8 @@ "title": "", "visualType": "markdownCard", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 106, "width": 22, "height": 4 }, - "markdownText": "# Purchases\r\nCosts from commitment discount, Marketplace, and other purchases\r\n\r\n⬆️ [Top](?tile=c0bd4bc4-a910-4a74-89a9-d4ae0f995563)", + "layout": { "x": 0, "y": 103, "width": 22, "height": 4 }, + "markdownText": "# Purchases\r\nCosts from commitment discount, Marketplace, and other purchases\r\n\r\n⬆️ [Top](?tile=c0bd4bc4-a910-4a74-89a9-d4ae0f995563)     💜 [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Understand.RateOptimization.Purchases)", "visualOptions": {} }, { @@ -1018,7 +1313,7 @@ "visualType": "markdownCard", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 0, "width": 22, "height": 2 }, - "markdownText": "  [Services](?tile=d9960334-1cff-4686-9d4a-e6afc5574aa7)\r\n• [Regions](?tile=e47767ba-1884-4ca7-8458-24025b92464a)\r\n• [Subscriptions](?tile=4956ec68-b338-4926-bd72-ae6ca9e886d6)\r\n• [Resource groups](?tile=6750ce15-ec4e-4c60-8079-b00a4b462d63)\r\n• [Resources](?tile=52055726-2788-4216-b813-9d91714c5953)\r\n• [Inventory](?tile=a8edc317-353b-4648-9d32-e73e0d0a2894)", + "markdownText": "  [Services](?tile=d9960334-1cff-4686-9d4a-e6afc5574aa7)\r\n• [Regions](?tile=e47767ba-1884-4ca7-8458-24025b92464a)\r\n• [Subscriptions](?tile=4956ec68-b338-4926-bd72-ae6ca9e886d6)\r\n• [Resource groups](?tile=6750ce15-ec4e-4c60-8079-b00a4b462d63)\r\n• [Resources](?tile=52055726-2788-4216-b813-9d91714c5953)\r\n• [Inventory](?tile=a8edc317-353b-4648-9d32-e73e0d0a2894)\r\n• [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Understand.Summary.Nav)", "visualOptions": {} }, { @@ -1026,11 +1321,22 @@ "title": "Daily trend", "visualType": "column", "pageId": "5838c918-4541-44fe-90d2-77306ef1e241", - "layout": { "x": 0, "y": 3, "width": 16, "height": 10 }, - "queryRef": { "kind": "query", "queryId": "1d9c166d-22b6-48fd-9a90-9f983083ecc7" }, + "layout": { "x": 0, "y": 4, "width": 16, "height": 10 }, + "queryRef": { + "kind": "query", + "queryId": "1d9c166d-22b6-48fd-9a90-9f983083ecc7" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "Effective cost", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "Effective cost", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [ { "id": "e7c54e29-4843-465c-ab63-75e816da8fe0", @@ -1055,7 +1361,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -1064,7 +1372,7 @@ "visualType": "markdownCard", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", "layout": { "x": 0, "y": 0, "width": 22, "height": 2 }, - "markdownText": "  [Savings](?tile=fa177e0f-9a74-4475-b64d-a399224e96e0)\r\n• [Commitment discounts](?tile=cad5d666-02e8-4319-bbad-1bdf46ca2961)\r\n• [Purchases](?tile=6ea8b37d-617b-47dd-add0-8e3c0f708540)\r\n• [SKU prices](?tile=5bd3258c-034c-4e23-b543-7cdf87bd153d)\r\n", + "markdownText": "  [Savings](?tile=fa177e0f-9a74-4475-b64d-a399224e96e0)\r\n• [Commitment discounts](?tile=cad5d666-02e8-4319-bbad-1bdf46ca2961)\r\n• [Purchases](?tile=6ea8b37d-617b-47dd-add0-8e3c0f708540)\r\n• [SKU prices](?tile=5bd3258c-034c-4e23-b543-7cdf87bd153d)\r\n• [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Understand.RateOptimization.Nav)\r\n", "visualOptions": {} }, { @@ -1072,8 +1380,11 @@ "title": "SKUs with negotiated discounts (last n days)", "visualType": "table", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 121, "width": 14, "height": 6 }, - "queryRef": { "kind": "query", "queryId": "af6424d4-8f73-4b81-bfdd-f0287ebcaaca" }, + "layout": { "x": 0, "y": 118, "width": 14, "height": 6 }, + "queryRef": { + "kind": "query", + "queryId": "af6424d4-8f73-4b81-bfdd-f0287ebcaaca" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": false, @@ -1091,8 +1402,11 @@ "title": "SKUs with commitment discounts (last n days)", "visualType": "table", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 127, "width": 14, "height": 6 }, - "queryRef": { "kind": "query", "queryId": "c4f6542d-a9cb-4284-bd4e-b9f94ad02192" }, + "layout": { "x": 0, "y": 124, "width": 14, "height": 6 }, + "queryRef": { + "kind": "query", + "queryId": "c4f6542d-a9cb-4284-bd4e-b9f94ad02192" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": false, @@ -1110,8 +1424,11 @@ "title": "SKUs with no discounts (last n days)", "visualType": "table", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 133, "width": 14, "height": 6 }, - "queryRef": { "kind": "query", "queryId": "00ae3917-c783-45f6-a04e-9113e4c5d445" }, + "layout": { "x": 0, "y": 130, "width": 14, "height": 6 }, + "queryRef": { + "kind": "query", + "queryId": "00ae3917-c783-45f6-a04e-9113e4c5d445" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": false, @@ -1129,11 +1446,22 @@ "title": "Most used SKUs (last n days)", "visualType": "bar", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 14, "y": 121, "width": 8, "height": 18 }, - "queryRef": { "kind": "query", "queryId": "d8a4634e-7ebe-47ce-83b5-ff7f50f6bee6" }, + "layout": { "x": 14, "y": 118, "width": 8, "height": 18 }, + "queryRef": { + "kind": "query", + "queryId": "d8a4634e-7ebe-47ce-83b5-ff7f50f6bee6" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -1148,7 +1476,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -1157,7 +1487,7 @@ "visualType": "markdownCard", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 167, "width": 22, "height": 4 }, - "markdownText": "# Purchases\r\nCosts from commitment discount, Marketplace, and other purchases\r\n\r\n⬆️ [Top](?tile=c0bd4bc4-a910-4a74-89a9-d4ae0f995563)", + "markdownText": "# Purchases\r\nCosts from commitment discount, Marketplace, and other purchases\r\n\r\n⬆️ [Top](?tile=c0bd4bc4-a910-4a74-89a9-d4ae0f995563)     💜 [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Understand.Summary.Purchases)", "visualOptions": {} }, { @@ -1166,7 +1496,10 @@ "visualType": "table", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 0, "y": 171, "width": 15, "height": 7 }, - "queryRef": { "kind": "query", "queryId": "98c9b9b5-bebf-41f8-8319-5fa2523f9dd0" }, + "queryRef": { + "kind": "query", + "queryId": "98c9b9b5-bebf-41f8-8319-5fa2523f9dd0" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": false, @@ -1184,8 +1517,11 @@ "title": "Purchases", "visualType": "table", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 110, "width": 22, "height": 7 }, - "queryRef": { "kind": "query", "queryId": "35a3a2b3-4ab0-4449-96f7-c78db789089e" }, + "layout": { "x": 0, "y": 107, "width": 22, "height": 7 }, + "queryRef": { + "kind": "query", + "queryId": "35a3a2b3-4ab0-4449-96f7-c78db789089e" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": false, @@ -1205,10 +1541,21 @@ "visualType": "bar", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 6, "y": 18, "width": 8, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "5ff29428-de83-4a2c-8f86-d8beebe68750" }, + "queryRef": { + "kind": "query", + "queryId": "5ff29428-de83-4a2c-8f86-d8beebe68750" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -1223,7 +1570,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -1233,10 +1582,21 @@ "visualType": "bar", "pageId": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "layout": { "x": 14, "y": 18, "width": 8, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "f5f240a8-a818-4f27-bdfb-e96fcfe433bd" }, + "queryRef": { + "kind": "query", + "queryId": "f5f240a8-a818-4f27-bdfb-e96fcfe433bd" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -1251,7 +1611,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -1259,8 +1621,8 @@ "title": "", "visualType": "markdownCard", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 66, "width": 22, "height": 4 }, - "markdownText": "# Commitment discounts\r\nCommitment discount usage and costs\r\n\r\n⬆️ [Top](?tile=c0bd4bc4-a910-4a74-89a9-d4ae0f995563)", + "layout": { "x": 0, "y": 63, "width": 22, "height": 4 }, + "markdownText": "# Commitment discounts\r\nCommitment discount usage and costs\r\n\r\n⬆️ [Top](?tile=c0bd4bc4-a910-4a74-89a9-d4ae0f995563)     💜 [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Understand.RateOptimization.CommitmentDiscounts)", "visualOptions": {} }, { @@ -1268,8 +1630,11 @@ "title": "Commitment discount usage (last n days)", "visualType": "table", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 70, "width": 13, "height": 6 }, - "queryRef": { "kind": "query", "queryId": "d7f31381-ba44-46a1-ad3e-dc6b8826706d" }, + "layout": { "x": 0, "y": 67, "width": 13, "height": 6 }, + "queryRef": { + "kind": "query", + "queryId": "d7f31381-ba44-46a1-ad3e-dc6b8826706d" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": false, @@ -1287,8 +1652,11 @@ "title": "Savings summary (last n months)", "visualType": "multistat", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 11, "width": 15, "height": 9 }, - "queryRef": { "kind": "query", "queryId": "e17346d1-0227-4aa4-8765-f9b4bf43bed5" }, + "layout": { "x": 0, "y": 8, "width": 15, "height": 9 }, + "queryRef": { + "kind": "query", + "queryId": "e17346d1-0227-4aa4-8765-f9b4bf43bed5" + }, "visualOptions": { "multiStat__textSize": "auto", "multiStat__valueColumn": "Value", @@ -1349,7 +1717,13 @@ "applyToColumn": null, "hideText": false, "applyTo": "cells", - "conditions": [{ "operator": "==", "column": "Type", "values": ["PartialSavings"] }], + "conditions": [ + { + "operator": "==", + "column": "Type", + "values": ["PartialSavings"] + } + ], "chainingOperator": "and", "colorStyle": "bold", "color": "blue", @@ -1381,8 +1755,11 @@ "title": "Savings summary (last n days)", "visualType": "multistat", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 47, "width": 15, "height": 9 }, - "queryRef": { "kind": "query", "queryId": "f1ef29df-7a1d-4dd0-8619-0c0164707b31" }, + "layout": { "x": 0, "y": 44, "width": 15, "height": 9 }, + "queryRef": { + "kind": "query", + "queryId": "f1ef29df-7a1d-4dd0-8619-0c0164707b31" + }, "visualOptions": { "multiStat__textSize": "auto", "multiStat__valueColumn": "Value", @@ -1443,7 +1820,13 @@ "applyToColumn": null, "hideText": false, "applyTo": "cells", - "conditions": [{ "operator": "==", "column": "Type", "values": ["PartialSavings"] }], + "conditions": [ + { + "operator": "==", + "column": "Type", + "values": ["PartialSavings"] + } + ], "chainingOperator": "and", "colorStyle": "bold", "color": "blue", @@ -1475,8 +1858,11 @@ "title": "Commitment discount breakdown (last n months)", "visualType": "multistat", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 15, "y": 11, "width": 7, "height": 9 }, - "queryRef": { "kind": "query", "queryId": "7d0c2c1f-338b-4534-b173-36b284779131" }, + "layout": { "x": 15, "y": 8, "width": 7, "height": 9 }, + "queryRef": { + "kind": "query", + "queryId": "7d0c2c1f-338b-4534-b173-36b284779131" + }, "visualOptions": { "multiStat__textSize": "auto", "multiStat__valueColumn": "Value", @@ -1493,8 +1879,11 @@ "title": "Commitment discount breakdown (last n days)", "visualType": "multistat", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 15, "y": 47, "width": 7, "height": 9 }, - "queryRef": { "kind": "query", "queryId": "84ecad69-79ac-45b9-a8af-60be28dcc748" }, + "layout": { "x": 15, "y": 44, "width": 7, "height": 9 }, + "queryRef": { + "kind": "query", + "queryId": "84ecad69-79ac-45b9-a8af-60be28dcc748" + }, "visualOptions": { "multiStat__textSize": "auto", "multiStat__valueColumn": "Value", @@ -1511,8 +1900,11 @@ "title": "Monthly trend by service category", "visualType": "table", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 37, "width": 22, "height": 8 }, - "queryRef": { "kind": "query", "queryId": "85320475-730b-411f-98d5-fbc345bf5e68" }, + "layout": { "x": 0, "y": 34, "width": 22, "height": 8 }, + "queryRef": { + "kind": "query", + "queryId": "85320475-730b-411f-98d5-fbc345bf5e68" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": false, @@ -1530,11 +1922,22 @@ "title": "Monthly savings trend", "visualType": "stackedcolumn", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 24, "width": 15, "height": 6 }, - "queryRef": { "kind": "query", "queryId": "5bbb5369-ac95-45fc-853c-a6a2ce6a9e7b" }, + "layout": { "x": 0, "y": 21, "width": 15, "height": 6 }, + "queryRef": { + "kind": "query", + "queryId": "5bbb5369-ac95-45fc-853c-a6a2ce6a9e7b" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -1549,7 +1952,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -1557,8 +1962,8 @@ "title": "", "visualType": "markdownCard", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 5, "width": 22, "height": 4 }, - "markdownText": "# Savings\r\nSummary of negotiated and commitment discount savings\r\n\r\n⬆️ [Top](?tile=c0bd4bc4-a910-4a74-89a9-d4ae0f995563)", + "layout": { "x": 0, "y": 2, "width": 22, "height": 4 }, + "markdownText": "# Savings\r\nSummary of negotiated and commitment discount savings\r\n\r\n⬆️ [Top](?tile=c0bd4bc4-a910-4a74-89a9-d4ae0f995563)     💜 [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Understand.RateOptimization.Savings)", "visualOptions": {} }, { @@ -1566,8 +1971,11 @@ "title": "Total savings (last n months)", "visualType": "pie", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 15, "y": 20, "width": 7, "height": 10 }, - "queryRef": { "kind": "query", "queryId": "93f0eb9f-fa4d-4c54-96c2-8c1d3387d13a" }, + "layout": { "x": 15, "y": 17, "width": 7, "height": 10 }, + "queryRef": { + "kind": "query", + "queryId": "93f0eb9f-fa4d-4c54-96c2-8c1d3387d13a" + }, "visualOptions": { "hideLegend": false, "legendLocation": "bottom", @@ -1592,11 +2000,22 @@ "title": "Daily savings trend", "visualType": "stackedcolumn", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 60, "width": 15, "height": 6 }, - "queryRef": { "kind": "query", "queryId": "5c442903-65b0-4b53-9e7c-3ea9c1af7be5" }, + "layout": { "x": 0, "y": 57, "width": 15, "height": 6 }, + "queryRef": { + "kind": "query", + "queryId": "5c442903-65b0-4b53-9e7c-3ea9c1af7be5" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -1611,7 +2030,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -1619,8 +2040,11 @@ "title": "Total savings (last n days)", "visualType": "pie", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 15, "y": 56, "width": 7, "height": 10 }, - "queryRef": { "kind": "query", "queryId": "9a9ee4b0-a37d-475f-bf1d-f51573243491" }, + "layout": { "x": 15, "y": 53, "width": 7, "height": 10 }, + "queryRef": { + "kind": "query", + "queryId": "9a9ee4b0-a37d-475f-bf1d-f51573243491" + }, "visualOptions": { "hideLegend": false, "legendLocation": "bottom", @@ -1645,7 +2069,7 @@ "title": "", "visualType": "markdownCard", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 9, "width": 22, "height": 2 }, + "layout": { "x": 0, "y": 6, "width": 22, "height": 2 }, "markdownText": "## Monthly trend (last n months)", "visualOptions": {} }, @@ -1654,7 +2078,7 @@ "title": "", "visualType": "markdownCard", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 45, "width": 22, "height": 2 }, + "layout": { "x": 0, "y": 42, "width": 22, "height": 2 }, "markdownText": "## Daily trend (last n days)", "visualOptions": {} }, @@ -1663,7 +2087,7 @@ "title": "", "visualType": "markdownCard", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 76, "width": 22, "height": 2 }, + "layout": { "x": 0, "y": 73, "width": 22, "height": 2 }, "markdownText": "## Subscription chargeback (last n months)", "visualOptions": {} }, @@ -1672,7 +2096,7 @@ "title": "", "visualType": "markdownCard", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 86, "width": 22, "height": 2 }, + "layout": { "x": 0, "y": 83, "width": 22, "height": 2 }, "markdownText": "## Resource group chargeback (last n months)", "visualOptions": {} }, @@ -1681,8 +2105,11 @@ "title": "Commitment discount chargeback by resource group", "visualType": "table", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 88, "width": 22, "height": 8 }, - "queryRef": { "kind": "query", "queryId": "377e3693-0738-45d7-97d9-4b6e71ec5b36" }, + "layout": { "x": 0, "y": 85, "width": 22, "height": 8 }, + "queryRef": { + "kind": "query", + "queryId": "377e3693-0738-45d7-97d9-4b6e71ec5b36" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": false, @@ -1700,8 +2127,11 @@ "title": "Commitment discount chargeback by subscription", "visualType": "table", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 78, "width": 22, "height": 8 }, - "queryRef": { "kind": "query", "queryId": "13cad52d-91e7-4ab4-aad5-4aae21c1019a" }, + "layout": { "x": 0, "y": 75, "width": 22, "height": 8 }, + "queryRef": { + "kind": "query", + "queryId": "13cad52d-91e7-4ab4-aad5-4aae21c1019a" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": false, @@ -1719,8 +2149,11 @@ "title": "Commitment discount usage by resource (last n days)", "visualType": "table", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 98, "width": 22, "height": 8 }, - "queryRef": { "kind": "query", "queryId": "dcf69b47-233e-4bc4-b914-3f6f09f4cb82" }, + "layout": { "x": 0, "y": 95, "width": 22, "height": 8 }, + "queryRef": { + "kind": "query", + "queryId": "dcf69b47-233e-4bc4-b914-3f6f09f4cb82" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": false, @@ -1738,7 +2171,7 @@ "title": "", "visualType": "markdownCard", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 96, "width": 22, "height": 2 }, + "layout": { "x": 0, "y": 93, "width": 22, "height": 2 }, "markdownText": "## Resources usage (last n days)", "visualOptions": {} }, @@ -1748,7 +2181,7 @@ "visualType": "markdownCard", "pageId": "9e099251-9658-48da-b416-80422a2a47c7", "layout": { "x": 0, "y": 0, "width": 22, "height": 2 }, - "markdownText": "  [FinOps hubs](?tile=1e089e2c-d94a-4bfa-95e7-5f8b1249c982)\r\n• [Ingested data](?tile=10d7d4d3-0201-4cdf-977b-4814152fda24)", + "markdownText": "  [FinOps hubs](?tile=1e089e2c-d94a-4bfa-95e7-5f8b1249c982)\r\n• [Ingested data](?tile=10d7d4d3-0201-4cdf-977b-4814152fda24)\r\n• [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Understand.DataIngestion.Nav)", "visualOptions": {} }, { @@ -1757,7 +2190,7 @@ "visualType": "markdownCard", "pageId": "9e099251-9658-48da-b416-80422a2a47c7", "layout": { "x": 0, "y": 5, "width": 22, "height": 4 }, - "markdownText": "# FinOps hubs\r\nSummary of the cost and usage of FinOps hubs infrastructure\r\n\r\n⬆️ [Top](?tile=ab300a6a-3bbd-450b-942c-7f30113cba15)", + "markdownText": "# FinOps hubs\r\nSummary of the cost and usage of FinOps hubs infrastructure\r\n\r\n⬆️ [Top](?tile=ab300a6a-3bbd-450b-942c-7f30113cba15)     💜 [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Understand.DataIngestion.FinOpsHubs)", "visualOptions": {} }, { @@ -1765,11 +2198,22 @@ "title": "Monthly trend by hub instance", "visualType": "stackedcolumn", "pageId": "9e099251-9658-48da-b416-80422a2a47c7", - "layout": { "x": 0, "y": 9, "width": 22, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "d7a9ff96-da17-4826-9fb5-b23f4c7b938d" }, + "layout": { "x": 0, "y": 13, "width": 22, "height": 5 }, + "queryRef": { + "kind": "query", + "queryId": "d7a9ff96-da17-4826-9fb5-b23f4c7b938d" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -1784,7 +2228,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -1792,11 +2238,22 @@ "title": "Daily trend by hub instance", "visualType": "stackedcolumn", "pageId": "9e099251-9658-48da-b416-80422a2a47c7", - "layout": { "x": 0, "y": 14, "width": 22, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "13813a00-e634-4428-9eac-ea255fd1eaca" }, + "layout": { "x": 0, "y": 18, "width": 22, "height": 5 }, + "queryRef": { + "kind": "query", + "queryId": "13813a00-e634-4428-9eac-ea255fd1eaca" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -1811,7 +2268,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -1819,8 +2278,11 @@ "title": "Monthly trend by hub instance", "visualType": "table", "pageId": "9e099251-9658-48da-b416-80422a2a47c7", - "layout": { "x": 0, "y": 19, "width": 22, "height": 8 }, - "queryRef": { "kind": "query", "queryId": "62bbceee-c089-45db-822c-0b4745358aa4" }, + "layout": { "x": 0, "y": 23, "width": 22, "height": 8 }, + "queryRef": { + "kind": "query", + "queryId": "62bbceee-c089-45db-822c-0b4745358aa4" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": false, @@ -1838,8 +2300,8 @@ "title": "", "visualType": "markdownCard", "pageId": "9e099251-9658-48da-b416-80422a2a47c7", - "layout": { "x": 0, "y": 27, "width": 22, "height": 4 }, - "markdownText": "# Ingested data\r\nSummary of the data that's been ingested into FinOps hubs\r\n\r\n⬆️ [Top](?tile=ab300a6a-3bbd-450b-942c-7f30113cba15)", + "layout": { "x": 0, "y": 31, "width": 22, "height": 4 }, + "markdownText": "# Ingested data\r\nSummary of the data that's been ingested into FinOps hubs\r\n\r\n⬆️ [Top](?tile=ab300a6a-3bbd-450b-942c-7f30113cba15)     💜 [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Understand.DataIngestion.IngestedData)", "visualOptions": {} }, { @@ -1847,11 +2309,22 @@ "title": "Ingested data by table", "visualType": "stackedcolumn", "pageId": "9e099251-9658-48da-b416-80422a2a47c7", - "layout": { "x": 0, "y": 34, "width": 22, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "b98c9ed7-47b3-41c1-a596-fd9d32725b33" }, + "layout": { "x": 0, "y": 38, "width": 22, "height": 5 }, + "queryRef": { + "kind": "query", + "queryId": "b98c9ed7-47b3-41c1-a596-fd9d32725b33" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -1866,7 +2339,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -1874,11 +2349,22 @@ "title": "Ingested cost data by scope", "visualType": "stackedcolumn", "pageId": "9e099251-9658-48da-b416-80422a2a47c7", - "layout": { "x": 0, "y": 39, "width": 22, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "187e22fe-3d78-45a2-a2bf-090ece144fd1" }, + "layout": { "x": 0, "y": 43, "width": 22, "height": 5 }, + "queryRef": { + "kind": "query", + "queryId": "187e22fe-3d78-45a2-a2bf-090ece144fd1" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -1893,7 +2379,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -1901,29 +2389,58 @@ "title": "Ingested scopes", "visualType": "card", "pageId": "9e099251-9658-48da-b416-80422a2a47c7", - "layout": { "x": 0, "y": 31, "width": 4, "height": 3 }, - "queryRef": { "kind": "query", "queryId": "d2c522dc-ef4b-4714-a473-09350e275557" }, - "visualOptions": { "multiStat__textSize": "auto", "multiStat__valueColumn": null, "colorRulesDisabled": false, "colorStyle": "light", "colorRules": [] } + "layout": { "x": 0, "y": 35, "width": 4, "height": 3 }, + "queryRef": { + "kind": "query", + "queryId": "d2c522dc-ef4b-4714-a473-09350e275557" + }, + "visualOptions": { + "multiStat__textSize": "auto", + "multiStat__valueColumn": null, + "colorRulesDisabled": false, + "colorStyle": "light", + "colorRules": [] + } }, { "id": "379b25b8-7188-4657-b82f-dee14b344bec", "title": "Ingested months", "visualType": "card", "pageId": "9e099251-9658-48da-b416-80422a2a47c7", - "layout": { "x": 4, "y": 31, "width": 4, "height": 3 }, - "queryRef": { "kind": "query", "queryId": "6fe11b78-82ef-4e9a-8411-a65e5b0d8bba" }, - "visualOptions": { "multiStat__textSize": "auto", "multiStat__valueColumn": null, "colorRulesDisabled": false, "colorStyle": "light", "colorRules": [] } + "layout": { "x": 4, "y": 35, "width": 4, "height": 3 }, + "queryRef": { + "kind": "query", + "queryId": "6fe11b78-82ef-4e9a-8411-a65e5b0d8bba" + }, + "visualOptions": { + "multiStat__textSize": "auto", + "multiStat__valueColumn": null, + "colorRulesDisabled": false, + "colorStyle": "light", + "colorRules": [] + } }, { "id": "71b29fd4-2999-45dc-9e4b-14152c48a4f4", "title": "Ingested price data by scope", "visualType": "stackedcolumn", "pageId": "9e099251-9658-48da-b416-80422a2a47c7", - "layout": { "x": 0, "y": 44, "width": 22, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "b3621977-59be-4f98-a034-a94479612115" }, + "layout": { "x": 0, "y": 48, "width": 22, "height": 5 }, + "queryRef": { + "kind": "query", + "queryId": "b3621977-59be-4f98-a034-a94479612115" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -1938,7 +2455,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -1946,11 +2465,22 @@ "title": "Ingested recommendation data by scope", "visualType": "stackedcolumn", "pageId": "9e099251-9658-48da-b416-80422a2a47c7", - "layout": { "x": 0, "y": 49, "width": 22, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "4a2a77fe-e819-4059-b027-dab0a1770a0a" }, + "layout": { "x": 0, "y": 53, "width": 22, "height": 5 }, + "queryRef": { + "kind": "query", + "queryId": "4a2a77fe-e819-4059-b027-dab0a1770a0a" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -1965,7 +2495,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -1973,11 +2505,22 @@ "title": "Ingested transaction data by scope", "visualType": "stackedcolumn", "pageId": "9e099251-9658-48da-b416-80422a2a47c7", - "layout": { "x": 0, "y": 54, "width": 22, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "8f1ad1ef-6f5e-4f20-a1c4-3941e871d0cd" }, + "layout": { "x": 0, "y": 58, "width": 22, "height": 5 }, + "queryRef": { + "kind": "query", + "queryId": "8f1ad1ef-6f5e-4f20-a1c4-3941e871d0cd" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -1992,7 +2535,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -2000,11 +2545,22 @@ "title": "Ingested commitment discount usage data by scope", "visualType": "stackedcolumn", "pageId": "9e099251-9658-48da-b416-80422a2a47c7", - "layout": { "x": 0, "y": 59, "width": 22, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "e9a9a135-6a74-4463-b69f-eac6930ff1f2" }, + "layout": { "x": 0, "y": 63, "width": 22, "height": 5 }, + "queryRef": { + "kind": "query", + "queryId": "e9a9a135-6a74-4463-b69f-eac6930ff1f2" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -2019,7 +2575,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -2037,7 +2595,7 @@ "visualType": "markdownCard", "pageId": "8beab65c-f5ec-4661-bc67-37b10baffb16", "layout": { "x": 0, "y": 0, "width": 22, "height": 5 }, - "markdownText": "# Quantify business value\nThe **Quantify business value** domain focuses on analyzing cost, usage, and sustainability to align with organizational plans and measure the return on investment from cloud computing efforts. This domain is all about measuring and maximizing the business value each team and workload gets from the cloud to maximize future potential.\n\n[Learn more](https://learn.microsoft.com/cloud-computing/finops/framework/quantify/quantify-business-value)\n", + "markdownText": "# Quantify business value\nThe **Quantify business value** domain focuses on analyzing cost, usage, and sustainability to align with organizational plans and measure the return on investment from cloud computing efforts. This domain is all about measuring and maximizing the business value each team and workload gets from the cloud to maximize future potential.\n\n[Learn more](https://learn.microsoft.com/cloud-computing/finops/framework/quantify/quantify-business-value)     [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Quantify)\n", "visualOptions": {} }, { @@ -2045,7 +2603,7 @@ "title": "", "visualType": "markdownCard", "pageId": "8beab65c-f5ec-4661-bc67-37b10baffb16", - "layout": { "x": 0, "y": 5, "width": 5, "height": 7 }, + "layout": { "x": 0, "y": 5, "width": 4, "height": 8 }, "markdownText": "### Planning and estimating\nPlanning and estimating involve predicting the cost and usage of new and existing workloads based on potential architectural changes and shifting business priorities. With this capability, you establish baseline expectations for new cloud workloads and prepare for changes to existing workloads. This capability is an important part of establishing and maintaining organizational budgets.\n\n \n\n📊 Coming soon\n   \n📗 [Learn more](http://aka.ms/ftk/fx/planning)", "visualOptions": {} }, @@ -2054,7 +2612,7 @@ "title": "", "visualType": "markdownCard", "pageId": "8beab65c-f5ec-4661-bc67-37b10baffb16", - "layout": { "x": 5, "y": 5, "width": 5, "height": 7 }, + "layout": { "x": 4, "y": 5, "width": 4, "height": 8 }, "markdownText": "### Forecasting\nForecasting involves analyzing historical trends and future plans to predict costs, understand the impact on current budgets, and influence future budgets. With this capability, you'll project future cost, usage, and carbon emissions based on historical trends. This capability is a major part of establishing accurate budgets for each team.\n\n \n\n📊 Coming soon\n   \n📗 [Learn more](http://aka.ms/ftk/fx/forecasting)", "visualOptions": {} }, @@ -2063,7 +2621,7 @@ "title": "", "visualType": "markdownCard", "pageId": "8beab65c-f5ec-4661-bc67-37b10baffb16", - "layout": { "x": 10, "y": 5, "width": 5, "height": 7 }, + "layout": { "x": 8, "y": 5, "width": 5, "height": 8 }, "markdownText": "### Budgeting\nBudgeting is the process of monitoring and managing financial plans and limits over a specific period to control spending effectively. This capability allows you to use established estimates and forecasts to allocate funds to each team for fiscal year planning and set up alerts to ensure budget accountability. This capability plays a key role in staying within established fiscal constraints on an ongoing basis.\n\n \n\n📊 [View report](#5c57f940-6f0f-4e39-930b-b6e89bb758ad)\n   \n📗 [Learn more](http://aka.ms/ftk/fx/budgeting)", "visualOptions": {} }, @@ -2072,7 +2630,7 @@ "title": "", "visualType": "markdownCard", "pageId": "8beab65c-f5ec-4661-bc67-37b10baffb16", - "layout": { "x": 15, "y": 5, "width": 5, "height": 7 }, + "layout": { "x": 13, "y": 5, "width": 4, "height": 8 }, "markdownText": "### Benchmarking\nBenchmarking is a systematic process of evaluating the performance and value of cloud services using efficiency metrics, either within an organization or against industry peers. This capability allows you to measure and track key performance indicators to identify and accelerate the adoption of successful initiatives, maximizing cloud return on investment (ROI) across teams and external organizations when applicable.\n\n \n\n📊 Coming soon\n   \n📗 [Learn more](http://aka.ms/ftk/fx/benchmarking)", "visualOptions": {} }, @@ -2081,7 +2639,7 @@ "title": "", "visualType": "markdownCard", "pageId": "8beab65c-f5ec-4661-bc67-37b10baffb16", - "layout": { "x": 0, "y": 12, "width": 5, "height": 7 }, + "layout": { "x": 17, "y": 5, "width": 5, "height": 8 }, "markdownText": "### Unit economics\nUnit economics refers to the process of calculating the cost and carbon emissions of a single unit of a business that can show the business value of the cloud. With this capability, you break down cost, usage, and carbon emissions and compare that with the business value per unit to identify high- and low-value workloads. This capability helps you identify areas that can be scaled out to accelerate business value through specific technology decisions.\n\n \n\n📊 Coming soon\n   \n📗 [Learn more](http://aka.ms/ftk/fx/uniteconomics)", "visualOptions": {} }, @@ -2091,7 +2649,7 @@ "visualType": "markdownCard", "pageId": "d01a8154-8a60-4d22-96ea-54b45b1417fe", "layout": { "x": 0, "y": 0, "width": 22, "height": 5 }, - "markdownText": "# Optimize usage and cost\nThe **Optimize usage and cost** domain focused on designing and optimizing solutions for efficiency to ensure you get the most out of your cloud investments.\n\n[Learn more](https://learn.microsoft.com/cloud-computing/finops/framework/optimize/optimize-cloud-usage-cost)\n", + "markdownText": "# Optimize usage and cost\nThe **Optimize usage and cost** domain focused on designing and optimizing solutions for efficiency to ensure you get the most out of your cloud investments.\n\n[Learn more](https://learn.microsoft.com/cloud-computing/finops/framework/optimize/optimize-cloud-usage-cost)     [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Quantify)\n", "visualOptions": {} }, { @@ -2099,7 +2657,7 @@ "title": "", "visualType": "markdownCard", "pageId": "d01a8154-8a60-4d22-96ea-54b45b1417fe", - "layout": { "x": 0, "y": 5, "width": 5, "height": 7 }, + "layout": { "x": 0, "y": 5, "width": 5, "height": 8 }, "markdownText": "### Architecting for the cloud\nArchitecting for the cloud involves designing and implementing cloud infrastructure and applications to optimize cost, performance, scalability, and reliability. Simultaneously, you align with business objectives.\n\nWith this capability, you ensure solutions are designed for efficiency in early development and migration stages to ensure they follow proven practices to maximize value and reduce waste. This capability is an important step towards reducing post-deployment optimization efforts, which often require much time and effort.\n\n📊 Coming soon\n   \n📗 [Learn more](http://aka.ms/ftk/fx/architecting)", "visualOptions": {} }, @@ -2108,7 +2666,7 @@ "title": "", "visualType": "markdownCard", "pageId": "d01a8154-8a60-4d22-96ea-54b45b1417fe", - "layout": { "x": 5, "y": 5, "width": 5, "height": 7 }, + "layout": { "x": 5, "y": 5, "width": 5, "height": 8 }, "markdownText": "### Workload optimization\nWorkload optimization refers to the process of ensuring cloud services are utilized and tuned to maximize business value and minimize wasteful usage and spending. With this capability, you analyze cost, usage, and carbon emissions for cloud workloads to identify opportunities to maximize efficiency. This capability usually starts with recommendations and expands into more nuanced optimization efforts based on detailed resource utilization analysis. This capability can be time and effort intensive as each cloud service has its different optimization opportunities.\n\n📊 Coming soon\n   \n📗 [Learn more](http://aka.ms/ftk/fx/workloads)", "visualOptions": {} }, @@ -2117,7 +2675,7 @@ "title": "", "visualType": "markdownCard", "pageId": "d01a8154-8a60-4d22-96ea-54b45b1417fe", - "layout": { "x": 10, "y": 5, "width": 5, "height": 7 }, + "layout": { "x": 10, "y": 5, "width": 4, "height": 8 }, "markdownText": "### Rate optimization\nRate optimization is the practice of obtaining reduced rates on cloud services, often by committing to a certain level of usage or spend over a specific period. With this capability, you analyze SKU usage patterns to inform rate negotiation efforts and commitment discount planning. This capability can lead to impressive discounts based on consistent usage patterns.\n\n📊 [View report](#306fef9a-c760-4559-a326-7c25d196b616)\n   \n📗 [Learn more](http://aka.ms/ftk/fx/rates)", "visualOptions": {} }, @@ -2126,7 +2684,7 @@ "title": "", "visualType": "markdownCard", "pageId": "d01a8154-8a60-4d22-96ea-54b45b1417fe", - "layout": { "x": 15, "y": 5, "width": 5, "height": 7 }, + "layout": { "x": 14, "y": 5, "width": 4, "height": 8 }, "markdownText": "### Licensing and SaaS\nLicensing & SaaS involves managing and optimizing the financial aspects of software licensing agreements and Software as a Service (SaaS) investments within an organization. With this capability, you track and manage software licenses and prepaid SaaS products to ensure they're being fully utilized. This capability also covers bring your own license offers, like Azure Hybrid Benefit.\n\n📊 [View report](#a4ec1d55-5b6e-49af-bb9e-4f3d136cdf05)\n   \n📗 [Learn more](http://aka.ms/ftk/fx/licensing)", "visualOptions": {} }, @@ -2136,7 +2694,7 @@ "visualType": "markdownCard", "pageId": "a4ec1d55-5b6e-49af-bb9e-4f3d136cdf05", "layout": { "x": 0, "y": 0, "width": 22, "height": 2 }, - "markdownText": "  [Hybrid Benefit](?tile=805cac8c-a189-45cb-8ba3-fbb1a06dfba0)", + "markdownText": "  [Hybrid Benefit](?tile=805cac8c-a189-45cb-8ba3-fbb1a06dfba0)\r\n• [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Understand.Licensing.Nav)", "visualOptions": {} }, { @@ -2145,7 +2703,7 @@ "visualType": "markdownCard", "pageId": "a4ec1d55-5b6e-49af-bb9e-4f3d136cdf05", "layout": { "x": 0, "y": 5, "width": 22, "height": 4 }, - "markdownText": "# Azure Hybrid Benefit\r\nSummary of the Hybrid Benefit coverage and utilization\r\n\r\n⬆️ [Top](?tile=2ba70b12-ac64-41b9-b13f-d3c91dab6df4)", + "markdownText": "# Azure Hybrid Benefit\r\nSummary of the Hybrid Benefit coverage and utilization\r\n\r\n⬆️ [Top](?tile=2ba70b12-ac64-41b9-b13f-d3c91dab6df4)     💜 [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Understand.Licensing.HybridBenefit)", "visualOptions": {} }, { @@ -2154,7 +2712,10 @@ "visualType": "multistat", "pageId": "a4ec1d55-5b6e-49af-bb9e-4f3d136cdf05", "layout": { "x": 0, "y": 9, "width": 6, "height": 15 }, - "queryRef": { "kind": "query", "queryId": "1a400b6c-9204-434d-88ff-2dc5260a95bf" }, + "queryRef": { + "kind": "query", + "queryId": "1a400b6c-9204-434d-88ff-2dc5260a95bf" + }, "visualOptions": { "multiStat__textSize": "auto", "multiStat__valueColumn": "Value", @@ -2172,7 +2733,10 @@ "visualType": "table", "pageId": "a4ec1d55-5b6e-49af-bb9e-4f3d136cdf05", "layout": { "x": 6, "y": 9, "width": 16, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "c2ad5370-f4df-4a13-ac31-2c095f88754d" }, + "queryRef": { + "kind": "query", + "queryId": "c2ad5370-f4df-4a13-ac31-2c095f88754d" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, @@ -2191,7 +2755,10 @@ "visualType": "table", "pageId": "a4ec1d55-5b6e-49af-bb9e-4f3d136cdf05", "layout": { "x": 6, "y": 14, "width": 16, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "4614acfb-2288-4a71-97f7-32845a9ddcb2" }, + "queryRef": { + "kind": "query", + "queryId": "4614acfb-2288-4a71-97f7-32845a9ddcb2" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, @@ -2210,7 +2777,10 @@ "visualType": "table", "pageId": "a4ec1d55-5b6e-49af-bb9e-4f3d136cdf05", "layout": { "x": 6, "y": 19, "width": 16, "height": 5 }, - "queryRef": { "kind": "query", "queryId": "99d44f1f-c53a-40ee-b749-8e5557ec58c7" }, + "queryRef": { + "kind": "query", + "queryId": "99d44f1f-c53a-40ee-b749-8e5557ec58c7" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, @@ -2228,7 +2798,7 @@ "title": "", "visualType": "markdownCard", "pageId": "d01a8154-8a60-4d22-96ea-54b45b1417fe", - "layout": { "x": 0, "y": 12, "width": 5, "height": 7 }, + "layout": { "x": 18, "y": 5, "width": 4, "height": 8 }, "markdownText": "### Cloud sustainability\nCloud sustainability balances environmental and financial efficiency in cloud optimization, ensuring alignment with strategic objectives. With this capability, you focus explicitly on optimizing carbon emissions through usage and workload analysis. This capability relies heavily on understanding the carbon impact of different services across different regions to identify the right cost/carbon balance for your organizational goals.\n\n📊 Coming soon\n   \n📗 [Learn more](http://aka.ms/ftk/fx/sustainability)", "visualOptions": {} }, @@ -2238,7 +2808,7 @@ "visualType": "markdownCard", "pageId": "11f019cd-e0cc-4aa7-a125-4dc852eb3f10", "layout": { "x": 0, "y": 0, "width": 22, "height": 5 }, - "markdownText": "# Manage the FinOps practice\nThe **Manage the FinOps practice** domain focuses on establishing a clear and consistent vision of FinOps and driving cultural adoption across your organization. Other domains are focused on the FinOps tasks you perform to drive efficiency and maximize value. This domain is focused more on how you run your FinOps practice and supporting those efforts.\n\n[Learn more](https://learn.microsoft.com/cloud-computing/finops/framework/manage/manage-finops)\n", + "markdownText": "# Manage the FinOps practice\nThe **Manage the FinOps practice** domain focuses on establishing a clear and consistent vision of FinOps and driving cultural adoption across your organization. Other domains are focused on the FinOps tasks you perform to drive efficiency and maximize value. This domain is focused more on how you run your FinOps practice and supporting those efforts.\n\n[Learn more](https://learn.microsoft.com/cloud-computing/finops/framework/manage/manage-finops)     [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Manage)\n", "visualOptions": {} }, { @@ -2247,7 +2817,7 @@ "visualType": "markdownCard", "pageId": "11f019cd-e0cc-4aa7-a125-4dc852eb3f10", "layout": { "x": 0, "y": 5, "width": 6, "height": 7 }, - "markdownText": "### FinOps education and enablement\nFinOps education and enablement involve refers to the process of providing training, resources, and support to help individuals and teams within an organization adopt FinOps practices. This capability ensures that stakeholders across the organization have the resources they need to:\n\n- Understand FinOps\n- Understand how it can help them achieve their goals\n- Understand how to perform FinOps tasks using the available tools and services.\n\n📊 Coming soon\n   \n📗 [Learn more](http://aka.ms/ftk/fx/education)", + "markdownText": "### FinOps education and enablement\nFinOps education and enablement involve refers to the process of providing training, resources, and support to help individuals and teams within an organization adopt FinOps practices. This capability ensures that stakeholders across the organization have the resources they need to:\n\n- Understand FinOps\n- Understand how it can help them achieve their goals\n- Understand how to perform FinOps tasks using the available tools and services.\n\n🧭 [Open FinOps guide](https://aka.ms/finops/guide)\n   \n📗 [Learn more](http://aka.ms/ftk/fx/education)", "visualOptions": {} }, { @@ -2282,8 +2852,8 @@ "title": "", "visualType": "markdownCard", "pageId": "11f019cd-e0cc-4aa7-a125-4dc852eb3f10", - "layout": { "x": 0, "y": 12, "width": 5, "height": 6 }, - "markdownText": "### Invoicing and chargeback\nInvoicing and chargeback refer to the process of receiving, reconciling, and paying provider invoices, and then billing internal teams for their respective cloud costs using existing internal finance tools and processes. With this capability, you break down invoices and cross-charge portions of these invoices to the teams responsible for the charges.\n\n📊 Coming soon\n   \n📗 [Learn more](http://aka.ms/ftk/fx/chargeback)", + "layout": { "x": 0, "y": 12, "width": 6, "height": 7 }, + "markdownText": "### Invoicing and chargeback\nInvoicing and chargeback refer to the process of receiving, reconciling, and paying provider invoices, and then billing internal teams for their respective cloud costs using existing internal finance tools and processes. With this capability, you break down invoices and cross-charge portions of these invoices to the teams responsible for the charges.\n\n📊 [View report](#f416685d-f559-4514-8e45-5e0e09aec286)\n   \n📗 [Learn more](http://aka.ms/ftk/fx/chargeback)", "visualOptions": {} }, { @@ -2291,8 +2861,8 @@ "title": "", "visualType": "markdownCard", "pageId": "11f019cd-e0cc-4aa7-a125-4dc852eb3f10", - "layout": { "x": 5, "y": 12, "width": 7, "height": 6 }, - "markdownText": "### FinOps assessment\nFinOps assessment refers to the process of measuring the effectiveness of a FinOps practice, aligning activities with organizational goals, and identifying areas for improvement to drive FinOps maturity. With this capability, you assess and benchmark the maturity of different teams to identify focus areas for key milestones. This capability is important to set clear, quantitative expectations with teams that are backed up with recommendations to drive targeted improvements and prioritize organizational goals.\n\n📊 Coming soon\n   \n📗 [Learn more](http://aka.ms/ftk/fx/assessment)", + "layout": { "x": 6, "y": 12, "width": 6, "height": 7 }, + "markdownText": "### FinOps assessment\nFinOps assessment refers to the process of measuring the effectiveness of a FinOps practice, aligning activities with organizational goals, and identifying areas for improvement to drive FinOps maturity. With this capability, you assess and benchmark the maturity of different teams to identify focus areas for key milestones. This capability is important to set clear, quantitative expectations with teams that are backed up with recommendations to drive targeted improvements and prioritize organizational goals.\n\n📋 [Start a FinOps review](https://aka.ms/finops/review)\n   \n📗 [Learn more](http://aka.ms/ftk/fx/assessment)", "visualOptions": {} }, { @@ -2300,7 +2870,7 @@ "title": "", "visualType": "markdownCard", "pageId": "11f019cd-e0cc-4aa7-a125-4dc852eb3f10", - "layout": { "x": 12, "y": 12, "width": 5, "height": 6 }, + "layout": { "x": 12, "y": 12, "width": 5, "height": 7 }, "markdownText": "### FinOps tools and services\nFinOps tools and services encapsulate identifying, configuring, and integrating tools and services that meet the needs of FinOps capabilities. They also enable the FinOps practice at scale throughout the organization. With this capability, you identify the tools and services needed to accelerate FinOps tasks and support your FinOps practice.\n\n📊 Coming soon\n   \n📗 [Learn more](http://aka.ms/ftk/fx/tools)", "visualOptions": {} }, @@ -2309,53 +2879,35 @@ "title": "", "visualType": "markdownCard", "pageId": "11f019cd-e0cc-4aa7-a125-4dc852eb3f10", - "layout": { "x": 17, "y": 12, "width": 5, "height": 6 }, + "layout": { "x": 17, "y": 12, "width": 5, "height": 7 }, "markdownText": "### Intersecting frameworks\nFinOps and intersecting frameworks refers to integrating FinOps practices with other frameworks and methodologies used by an organization. With this capability, you'll partner with stakeholders in other disciplines to understand each other's others priorities to achieve an acceptable balance compared to cost, usage, and carbon efficiency goals.\n\n📊 Coming soon\n   \n📗 [Learn more](http://aka.ms/ftk/fx/frameworks)", "visualOptions": {} }, { "id": "876b81e5-4f71-4c69-bd62-8d470f50bf31", - "title": "About this domain", + "title": "About this capability", "visualType": "markdownCard", "pageId": "f416685d-f559-4514-8e45-5e0e09aec286", "layout": { "x": 0, "y": 0, "width": 21, "height": 3 }, - "markdownText": "Invoicing and chargeback refer to the process of receiving, reconciling, and paying provider invoices, and then billing internal teams for their respective cloud costs using existing internal finance tools and processes. With this capability, you break down invoices and cross-charge portions of these invoices to the teams responsible for the charges. [Learn more](http://aka.ms/ftk/fx/chargeback)", + "markdownText": "Invoicing and chargeback refer to the process of receiving, reconciling, and paying provider invoices, and then billing internal teams for their respective cloud costs using existing internal finance tools and processes. With this capability, you break down invoices and cross-charge portions of these invoices to the teams responsible for the charges.\r\n\r\n[Learn more](http://aka.ms/ftk/fx/chargeback)     [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Manage.Invoicing)", "visualOptions": {} }, { "id": "a66f0b2b-6bce-4bfb-ad3e-13f7eabcb586", - "title": "About this domain", + "title": "About this capability", "visualType": "markdownCard", "pageId": "5c57f940-6f0f-4e39-930b-b6e89bb758ad", "layout": { "x": 0, "y": 0, "width": 22, "height": 3 }, - "markdownText": "Budgeting is the process of monitoring and managing financial plans and limits over a specific period to control spending effectively. This capability allows you to use established estimates and forecasts to allocate funds to each team for fiscal year planning and set up alerts to ensure budget accountability. This capability plays a key role in staying within established fiscal constraints on an ongoing basis. [Learn more](http://aka.ms/ftk/fx/budgeting)", - "visualOptions": {} - }, - { - "id": "8f02d466-36fc-464b-adb2-bfa4ff888891", - "title": "About this domain", - "visualType": "markdownCard", - "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 2, "width": 22, "height": 3 }, - "markdownText": "Rate optimization is the practice of obtaining reduced rates on cloud services, often by committing to a certain level of usage or spend over a specific period. With this capability, you analyze SKU usage patterns to inform rate negotiation efforts and commitment discount planning. This capability can lead to impressive discounts based on consistent usage patterns. [Learn more](http://aka.ms/ftk/fx/rates)", - "visualOptions": {} - }, - { - "id": "3b6b230c-4bc1-40f7-917a-aa7c02ba22c5", - "title": "About this domain", - "visualType": "markdownCard", - "pageId": "a4ec1d55-5b6e-49af-bb9e-4f3d136cdf05", - "layout": { "x": 0, "y": 2, "width": 22, "height": 3 }, - "markdownText": "Licensing & SaaS involves managing and optimizing the financial aspects of software licensing agreements and Software as a Service (SaaS) investments within an organization. With this capability, you track and manage software licenses and prepaid SaaS products to ensure they're being fully utilized. This capability also covers bring your own license offers, like Azure Hybrid Benefit. [Learn more](http://aka.ms/ftk/fx/licensing)", + "markdownText": "Budgeting is the process of monitoring and managing financial plans and limits over a specific period to control spending effectively. This capability allows you to use established estimates and forecasts to allocate funds to each team for fiscal year planning and set up alerts to ensure budget accountability. This capability plays a key role in staying within established fiscal constraints on an ongoing basis.\r\n\r\n[Learn more](http://aka.ms/ftk/fx/budgeting)     [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Understand.Quantify.Budgeting.Nav)", "visualOptions": {} }, { "id": "08c92e20-6563-464b-893f-81d80dd3caa1", - "title": "About this domain", + "title": "About this capability", "visualType": "markdownCard", "pageId": "5838c918-4541-44fe-90d2-77306ef1e241", - "layout": { "x": 0, "y": 0, "width": 16, "height": 3 }, - "markdownText": "Anomaly management refers to the practice of detecting and addressing abnormal or unexpected cost and usage patterns in a timely manner. With this capability, you identify, triage, and address unexpected changes in cost, usage, and carbon. This capability is especially important with usage-based billing and sustainability models, where small fluctuations in usage can result in large fiscal and environmental impact. [Learn more](http://aka.ms/ftk/fx/anomalies)\n", + "layout": { "x": 0, "y": 0, "width": 16, "height": 4 }, + "markdownText": "Anomaly management refers to the practice of detecting and addressing abnormal or unexpected cost and usage patterns in a timely manner. With this capability, you identify, triage, and address unexpected changes in cost, usage, and carbon. This capability is especially important with usage-based billing and sustainability models, where small fluctuations in usage can result in large fiscal and environmental impact.\n\n[Learn more](http://aka.ms/ftk/fx/anomalies)     [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Understand.Anomalies.Nav)\n", "visualOptions": {} }, { @@ -2363,11 +2915,22 @@ "title": "Forecast (next n days)", "visualType": "timechart", "pageId": "5838c918-4541-44fe-90d2-77306ef1e241", - "layout": { "x": 0, "y": 32, "width": 9, "height": 7 }, - "queryRef": { "kind": "query", "queryId": "5fd3ea2a-8882-4438-9103-fa3945240604" }, + "layout": { "x": 0, "y": 33, "width": 9, "height": 7 }, + "queryRef": { + "kind": "query", + "queryId": "5fd3ea2a-8882-4438-9103-fa3945240604" + }, "visualOptions": { "multipleYAxes": { - "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, + "base": { + "id": "-1", + "label": "", + "columns": [], + "yAxisMaximumValue": null, + "yAxisMinimumValue": null, + "yAxisScale": "linear", + "horizontalLines": [] + }, "additional": [], "showMultiplePanels": false }, @@ -2382,7 +2945,9 @@ "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], - "drillthrough": [] + "drillthrough": [], + "selectedDataOnLoad": { "all": true, "limit": 10 }, + "dataPointsTooltip": { "all": false, "limit": 1 } } }, { @@ -2390,8 +2955,11 @@ "title": "Effective Savings Rate (last n months)", "visualType": "multistat", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 20, "width": 15, "height": 4 }, - "queryRef": { "kind": "query", "queryId": "e1bc2d51-44af-4dd9-8b0d-a71088b551f5" }, + "layout": { "x": 0, "y": 17, "width": 15, "height": 4 }, + "queryRef": { + "kind": "query", + "queryId": "e1bc2d51-44af-4dd9-8b0d-a71088b551f5" + }, "visualOptions": { "multiStat__textSize": "auto", "multiStat__valueColumn": "Value", @@ -2452,7 +3020,13 @@ "applyToColumn": null, "hideText": false, "applyTo": "cells", - "conditions": [{ "operator": "==", "column": "Type", "values": ["PartialSavings"] }], + "conditions": [ + { + "operator": "==", + "column": "Type", + "values": ["PartialSavings"] + } + ], "chainingOperator": "and", "colorStyle": "bold", "color": "blue", @@ -2482,7 +3056,13 @@ "applyToColumn": null, "hideText": false, "applyTo": "cells", - "conditions": [{ "operator": "==", "column": "Type", "values": ["EffectiveSavingsRate"] }], + "conditions": [ + { + "operator": "==", + "column": "Type", + "values": ["EffectiveSavingsRate"] + } + ], "chainingOperator": "and", "colorStyle": "bold", "color": "yellow", @@ -2499,8 +3079,11 @@ "title": "Savings breakdown by month", "visualType": "table", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 30, "width": 22, "height": 7 }, - "queryRef": { "kind": "query", "queryId": "3b3f0a58-2d84-4e3e-bebc-3e747a7d5ede" }, + "layout": { "x": 0, "y": 27, "width": 10, "height": 7 }, + "queryRef": { + "kind": "query", + "queryId": "3b3f0a58-2d84-4e3e-bebc-3e747a7d5ede" + }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": false, @@ -2518,8 +3101,11 @@ "title": "Effective Savings Rate (last n days)", "visualType": "multistat", "pageId": "306fef9a-c760-4559-a326-7c25d196b616", - "layout": { "x": 0, "y": 56, "width": 15, "height": 4 }, - "queryRef": { "kind": "query", "queryId": "cb34f22b-9370-460c-9658-3e73d220bbc7" }, + "layout": { "x": 0, "y": 53, "width": 15, "height": 4 }, + "queryRef": { + "kind": "query", + "queryId": "cb34f22b-9370-460c-9658-3e73d220bbc7" + }, "visualOptions": { "multiStat__textSize": "auto", "multiStat__valueColumn": "Value", @@ -2580,7 +3166,13 @@ "applyToColumn": null, "hideText": false, "applyTo": "cells", - "conditions": [{ "operator": "==", "column": "Type", "values": ["PartialSavings"] }], + "conditions": [ + { + "operator": "==", + "column": "Type", + "values": ["PartialSavings"] + } + ], "chainingOperator": "and", "colorStyle": "bold", "color": "blue", @@ -2610,7 +3202,13 @@ "applyToColumn": null, "hideText": false, "applyTo": "cells", - "conditions": [{ "operator": "==", "column": "Type", "values": ["EffectiveSavingsRate"] }], + "conditions": [ + { + "operator": "==", + "column": "Type", + "values": ["EffectiveSavingsRate"] + } + ], "chainingOperator": "and", "colorStyle": "bold", "color": "yellow", @@ -2621,15 +3219,114 @@ } ] } + }, + { + "id": "fc2e27cf-57be-486f-afa5-6a93d6e9c6a7", + "title": "Ingested months", + "visualType": "multistat", + "pageId": "9e099251-9658-48da-b416-80422a2a47c7", + "layout": { "x": 0, "y": 9, "width": 9, "height": 4 }, + "queryRef": { + "kind": "query", + "queryId": "8de47213-8327-44da-9d1b-8ba5de74c44a" + }, + "visualOptions": { + "multiStat__textSize": "auto", + "multiStat__valueColumn": "Value", + "colorRulesDisabled": false, + "colorStyle": "light", + "multiStat__displayOrientation": "horizontal", + "multiStat__labelColumn": "Label", + "multiStat__slot": { "width": 3, "height": 1 }, + "colorRules": [] + } + }, + { + "id": "2e9d6a7f-6393-41ad-83df-51faddbe3b8e", + "title": "Effective cost breakdown by month", + "visualType": "table", + "pageId": "306fef9a-c760-4559-a326-7c25d196b616", + "layout": { "x": 10, "y": 27, "width": 12, "height": 7 }, + "queryRef": { + "kind": "query", + "queryId": "0341b3e4-eccc-4924-9555-9835b128c543" + }, + "visualOptions": { + "table__enableRenderLinks": true, + "colorRulesDisabled": false, + "colorStyle": "light", + "crossFilterDisabled": false, + "drillthroughDisabled": false, + "crossFilter": [], + "drillthrough": [], + "table__renderLinks": [], + "colorRules": [] + } + }, + { + "id": "daa1b2bd-0ccd-43ff-ad2c-1337d247805a", + "title": "", + "visualType": "markdownCard", + "pageId": "9e099251-9658-48da-b416-80422a2a47c7", + "layout": { "x": 0, "y": 68, "width": 22, "height": 4 }, + "markdownText": "# Data quality\r\nData quality checks that may impact your reports.\r\n\r\n⬆️ [Top](?tile=ab300a6a-3bbd-450b-942c-7f30113cba15)     💜 [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/cvaQuestion/How%20valuable%20the%20FinOps%20hubs%20Data%20Explorer%20dashboard%3F/surveyId/FTK$$ftkver$$/bladeName/Hubs.Dashboard/featureName/Understand.DataIngestion.DataQuality)", + "visualOptions": {} + }, + { + "id": "d5ea61ef-d4f5-423e-bfa4-d1ab473867c2", + "title": "Summary of list, contracted, and effective cost alignment", + "visualType": "table", + "pageId": "9e099251-9658-48da-b416-80422a2a47c7", + "layout": { "x": 0, "y": 72, "width": 22, "height": 8 }, + "queryRef": { + "kind": "query", + "queryId": "56fd8707-bbb3-4f7e-8e37-8dd90ada3baa" + }, + "description": "This table summarizes rows where cost columns are not set or may be incorrect in the data provided by Cost Management.", + "visualOptions": { + "table__enableRenderLinks": true, + "colorRulesDisabled": true, + "colorStyle": "light", + "crossFilterDisabled": false, + "drillthroughDisabled": false, + "crossFilter": [], + "drillthrough": [], + "table__renderLinks": [], + "colorRules": [] + } } ], "baseQueries": [ - { "id": "58764bcb-2ba0-4c7f-b018-e5d7f6cff688", "queryId": "43612ae4-c475-4f22-bb50-ce9d995abb8f", "variableName": "CostsThisMonth" }, - { "id": "21512220-154c-4646-a188-72e8c437d8ed", "queryId": "cb1f5404-c0b1-42fd-99fb-3cff7b08daaa", "variableName": "CostsLastMonth" }, - { "id": "5fa73857-4e92-4a16-8179-f94563e5f605", "queryId": "4ce0f587-2d45-436c-8f79-102c6b382439", "variableName": "CostsByMonth" }, - { "id": "4880346a-0a24-48f9-bf25-b7427df29d69", "queryId": "6b598467-8c31-4693-b1eb-7ed683fcfc3a", "variableName": "CostsByDay" }, - { "id": "8ca40660-3fbc-4a08-b12e-92e7382d9449", "queryId": "4a1973bf-08e9-4e82-b8e6-6edff81cf0a5", "variableName": "CostsByDayAHB" }, - { "id": "48ebd897-d085-490f-8b4b-9b43d4fb2efc", "queryId": "eb9259cc-05b7-4441-a66d-a29026fe371b", "variableName": "CostsPlus" } + { + "id": "58764bcb-2ba0-4c7f-b018-e5d7f6cff688", + "queryId": "43612ae4-c475-4f22-bb50-ce9d995abb8f", + "variableName": "CostsThisMonth" + }, + { + "id": "21512220-154c-4646-a188-72e8c437d8ed", + "queryId": "cb1f5404-c0b1-42fd-99fb-3cff7b08daaa", + "variableName": "CostsLastMonth" + }, + { + "id": "5fa73857-4e92-4a16-8179-f94563e5f605", + "queryId": "4ce0f587-2d45-436c-8f79-102c6b382439", + "variableName": "CostsByMonth" + }, + { + "id": "4880346a-0a24-48f9-bf25-b7427df29d69", + "queryId": "6b598467-8c31-4693-b1eb-7ed683fcfc3a", + "variableName": "CostsByDay" + }, + { + "id": "8ca40660-3fbc-4a08-b12e-92e7382d9449", + "queryId": "4a1973bf-08e9-4e82-b8e6-6edff81cf0a5", + "variableName": "CostsByDayAHB" + }, + { + "id": "48ebd897-d085-490f-8b4b-9b43d4fb2efc", + "queryId": "eb9259cc-05b7-4441-a66d-a29026fe371b", + "variableName": "CostsPlus" + } ], "parameters": [ { @@ -2641,7 +3338,14 @@ "selectionType": "scalar", "includeAllOption": false, "defaultValue": { "kind": "query-result" }, - "dataSource": { "kind": "query", "columns": { "value": "Value", "label": "Label" }, "queryRef": { "kind": "query", "queryId": "c9039243-968d-4e75-9899-8d4ab51a9896" } }, + "dataSource": { + "kind": "query", + "columns": { "value": "Value", "label": "Label" }, + "queryRef": { + "kind": "query", + "queryId": "c9039243-968d-4e75-9899-8d4ab51a9896" + } + }, "showOnPages": { "kind": "all" } }, { @@ -2666,512 +3370,815 @@ } ], "dataSources": [ - { "id": "23540be2-ffc9-4b61-8c4c-05e493e682a6", "kind": "manual-kusto", "scopeId": "kusto", "name": "Hub", "clusterUri": "https://ftk-mf.westcentralus.kusto.windows.net/", "database": "Hub" } + { + "id": "23540be2-ffc9-4b61-8c4c-05e493e682a6", + "kind": "manual-kusto", + "scopeId": "kusto", + "name": "Hub", + "clusterUri": "https://ftk-mf.westcentralus.kusto.windows.net/", + "database": "Hub" + } ], "pages": [ { "name": "About", "id": "969ddf4c-8f2a-4ec4-9588-bb2f39473c9f" }, { "name": "UNDERSTAND", "id": "ea47329e-0bc9-4c11-b110-534878dbb3ad" }, { "id": "f8ee3008-df7e-442f-825e-2e3b46e4c185", "name": "- Summary" }, - { "name": "- Anomaly management", "id": "5838c918-4541-44fe-90d2-77306ef1e241" }, - { "name": "- Data ingestion", "id": "9e099251-9658-48da-b416-80422a2a47c7" }, + { + "name": "- Anomaly management", + "id": "5838c918-4541-44fe-90d2-77306ef1e241" + }, + { + "name": "- Data ingestion", + "id": "9e099251-9658-48da-b416-80422a2a47c7" + }, { "name": "OPTIMIZE", "id": "d01a8154-8a60-4d22-96ea-54b45b1417fe" }, - { "name": "- Rate optimization", "id": "306fef9a-c760-4559-a326-7c25d196b616" }, - { "id": "a4ec1d55-5b6e-49af-bb9e-4f3d136cdf05", "name": "- Licensing + SaaS" }, + { + "name": "- Rate optimization", + "id": "306fef9a-c760-4559-a326-7c25d196b616" + }, + { + "id": "a4ec1d55-5b6e-49af-bb9e-4f3d136cdf05", + "name": "- Licensing + SaaS" + }, { "name": "QUANTIFY", "id": "8beab65c-f5ec-4661-bc67-37b10baffb16" }, { "name": "- Budgeting", "id": "5c57f940-6f0f-4e39-930b-b6e89bb758ad" }, { "name": "MANAGE", "id": "11f019cd-e0cc-4aa7-a125-4dc852eb3f10" }, - { "name": "- Invoicing + chargeback", "id": "f416685d-f559-4514-8e45-5e0e09aec286" } + { + "name": "- Invoicing + chargeback", + "id": "f416685d-f559-4514-8e45-5e0e09aec286" + } ], "queries": [ { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let monthname = dynamic(['(ignore)', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']);\nlet costs = materialize(\n CostsLastMonth\n | summarize BilledCost = round(sum(BilledCost), 2), EffectiveCost = round(sum(EffectiveCost), 2) by BillingPeriodStart = startofmonth(BillingPeriodStart)\n | extend json = todynamic(strcat('[{\"type\":\"Billed cost\", \"Cost\":', BilledCost, '}, {\"type\":\"Effective cost\", \"Cost\":', EffectiveCost, '}]'))\n | mv-expand json\n | project Type = strcat(json.type, ' (', monthname[monthofyear(BillingPeriodStart)], ' ', format_datetime(BillingPeriodStart, 'yyyy'), ')'), Cost = todouble(json.Cost)\n);\ncosts", "id": "152f2041-bbc1-41e4-b155-271b2e0cf6e9", "usedVariables": ["CostsLastMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "Costs_v1_0\n| summarize BilledCost = round(sum(BilledCost), 2), EffectiveCost = round(sum(EffectiveCost), 2) by BillingPeriodStart = startofmonth(BillingPeriodStart)\n| render timechart", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "CostsByMonth\n| summarize BilledCost = round(sum(BilledCost), 2), EffectiveCost = round(sum(EffectiveCost), 2) by BillingPeriodStart = startofmonth(BillingPeriodStart)\n| render timechart", "id": "bc24e050-f2b9-4b4a-a08d-69fc4a4bb95e", - "usedVariables": [] + "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "Costs_v1_0\n// | summarize BilledCost = round(sum(BilledCost), 2), EffectiveCost = round(sum(EffectiveCost), 2) by BillingPeriodStart = startofmonth(BillingPeriodStart)\n// | render timechart\n| summarize BilledCost = sum(BilledCost), EffectiveCost = sum(EffectiveCost) by BillingPeriodStart = startofmonth(BillingPeriodStart)\n| order by BillingPeriodStart asc\n| extend PreviousBilledCost = prev(BilledCost)\n| extend PreviousEffectiveCost = prev(EffectiveCost)\n| project BillingPeriodStart\n , BilledCost = iif(isempty(PreviousBilledCost), todouble(0), todouble((BilledCost - PreviousBilledCost) * 100.0 / PreviousBilledCost))\n , EffectiveCost = iif(isempty(PreviousEffectiveCost), todouble(0), todouble((EffectiveCost - PreviousEffectiveCost) * 100.0 / PreviousEffectiveCost))\n", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "CostsByMonth\n// | summarize BilledCost = round(sum(BilledCost), 2), EffectiveCost = round(sum(EffectiveCost), 2) by BillingPeriodStart = startofmonth(BillingPeriodStart)\n// | render timechart\n| summarize BilledCost = sum(BilledCost), EffectiveCost = sum(EffectiveCost) by BillingPeriodStart = startofmonth(BillingPeriodStart)\n| order by BillingPeriodStart asc\n| extend PreviousBilledCost = prev(BilledCost)\n| extend PreviousEffectiveCost = prev(EffectiveCost)\n| project BillingPeriodStart\n , BilledCost = iif(isempty(PreviousBilledCost), todouble(0), todouble((BilledCost - PreviousBilledCost) * 100.0 / PreviousBilledCost))\n , EffectiveCost = iif(isempty(PreviousEffectiveCost), todouble(0), todouble((EffectiveCost - PreviousEffectiveCost) * 100.0 / PreviousEffectiveCost))\n", "id": "0d91ea4a-c81d-4a21-b708-b6af37be1eec", - "usedVariables": [] + "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let data = materialize(\n CostsLastMonth\n | summarize\n Subscriptions = dcount(SubAccountId),\n ResourceGroups = dcount(strcat(SubAccountId, x_ResourceGroupName)),\n Resources = dcount(ResourceId),\n Services = dcount(ServiceName)\n | project json = todynamic(strcat('[{ \"Type\":\"Subscriptions\", \"Count\":', Subscriptions, ' }, { \"Type\":\"Resource groups\", \"Count\":', ResourceGroups, ' }, { \"Type\":\"Resources\", \"Count\":', Resources, ' }, { \"Type\":\"Services\", \"Count\":', Services, ' }]'))\n | mv-expand json\n | project Label = tostring(json.Type), Count = tolong(json.Count)\n);\ndata", "id": "f2cecbb0-13f8-4642-afa4-bbcc0558f777", "usedVariables": ["CostsLastMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let data = materialize(\n CostsByDay\n | summarize\n Subscriptions = dcount(SubAccountId),\n ResourceGroups = dcount(strcat(SubAccountId, x_ResourceGroupName)),\n Resources = dcount(ResourceId),\n Services = dcount(ServiceName)\n | project json = todynamic(strcat('[{ \"Type\":\"Subscriptions\", \"Count\":', Subscriptions, ' }, { \"Type\":\"Resource groups\", \"Count\":', ResourceGroups, ' }, { \"Type\":\"Resources\", \"Count\":', Resources, ' }, { \"Type\":\"Services\", \"Count\":', Services, ' }]'))\n | mv-expand json\n | project Label = tostring(json.Type), Count = tolong(json.Count)\n);\ndata", "id": "5d63e04d-1a11-4307-96f1-ebbf68e09be0", "usedVariables": ["CostsByDay"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "CostsByMonth\n| summarize EffectiveCost = sum(EffectiveCost) by BillingPeriodStart\n| order by BillingPeriodStart asc\n| extend PreviousEffectiveCost = prev(EffectiveCost)\n| project BillingPeriodStart, EffectiveCost, Change = iif(isempty(PreviousEffectiveCost), todouble(0), todouble((EffectiveCost - PreviousEffectiveCost) / PreviousEffectiveCost)) * 100\n", "id": "290e7eab-8159-4338-8531-85e2718cedb1", "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nCosts_v1_0\n| where ChargePeriodStart >= startofmonth(ago(90d))\n| summarize EffectiveCost = sum(EffectiveCost) by ChargePeriodStart, Day = dayofmonth(ChargePeriodStart), Month = strcat(format_datetime(ChargePeriodStart, 'MM '), monthname[monthofyear(ChargePeriodStart)])\n| order by ChargePeriodStart asc\n| extend EffectiveCostRunningTotal = row_cumsum(EffectiveCost, prev(Month) != Month)\n| project Day, EffectiveCostRunningTotal, Month\n| render areachart ", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nCostsPlus\n| where ChargePeriodStart >= startofmonth(ago(90d))\n| summarize EffectiveCost = sum(EffectiveCost) by ChargePeriodStart, Day = dayofmonth(ChargePeriodStart), Month = strcat(format_datetime(ChargePeriodStart, 'MM '), monthname[monthofyear(ChargePeriodStart)])\n| order by ChargePeriodStart asc\n| extend EffectiveCostRunningTotal = row_cumsum(EffectiveCost, prev(Month) != Month)\n| project Day, EffectiveCostRunningTotal, Month\n| render areachart ", "id": "d5ed469a-45ea-49a2-b305-b841050213cf", - "usedVariables": [] + "usedVariables": ["CostsPlus"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nCosts_v1_0\n| where ChargePeriodStart >= startofmonth(startofmonth(now()) - 1d)\n| summarize EffectiveCost = sum(EffectiveCost) by ChargePeriodStart, Month = strcat(format_datetime(ChargePeriodStart, 'MM '), monthname[monthofyear(ChargePeriodStart)])\n| order by ChargePeriodStart asc\n| extend EffectiveCostRunningTotal = row_cumsum(EffectiveCost, prev(Month) != Month)\n| project ChargePeriodStart, EffectiveCostRunningTotal, Month\n| render areachart ", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nCostsPlus\n| where ChargePeriodStart >= startofmonth(startofmonth(now()) - 1d)\n| summarize EffectiveCost = sum(EffectiveCost) by ChargePeriodStart, Month = strcat(format_datetime(ChargePeriodStart, 'MM '), monthname[monthofyear(ChargePeriodStart)])\n| order by ChargePeriodStart asc\n| extend EffectiveCostRunningTotal = row_cumsum(EffectiveCost, prev(Month) != Month)\n| project ChargePeriodStart, EffectiveCostRunningTotal, Month\n| render areachart ", "id": "10300876-866a-40d7-836d-b3a8783ecece", - "usedVariables": [] + "usedVariables": ["CostsPlus"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nCosts_v1_0\n| where ChargePeriodStart >= startofmonth(ago(90d))\n| summarize EffectiveCost = sum(EffectiveCost) by ChargePeriodStart, Day = dayofmonth(ChargePeriodStart), Month = strcat(format_datetime(ChargePeriodStart, 'MM '), monthname[monthofyear(ChargePeriodStart)])\n| order by ChargePeriodStart asc\n| project Day, EffectiveCost, Month\n| render columnchart", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nCostsPlus\n| where ChargePeriodStart >= startofmonth(ago(90d))\n| summarize EffectiveCost = sum(EffectiveCost) by ChargePeriodStart, Day = dayofmonth(ChargePeriodStart), Month = strcat(format_datetime(ChargePeriodStart, 'MM '), monthname[monthofyear(ChargePeriodStart)])\n| order by ChargePeriodStart asc\n| project Day, EffectiveCost, Month\n| render columnchart", "id": "9e41a624-d5f9-40c6-b47f-fef4b50ec3dd", - "usedVariables": [] + "usedVariables": ["CostsPlus"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "let costs = Costs_v1_0 | where ChargePeriodStart >= startofmonth(ago(90d));\nlet all = costs | summarize sum(EffectiveCost) by SubAccountId;\nlet count = toscalar(all | order by sum_EffectiveCost desc | count);\nlet topX = all | order by sum_EffectiveCost desc | limit maxGroupCount;\nlet otherId = '(others)';\ncosts\n//\n// Group rows after max count\n| extend inTopX = SubAccountId in (topX)\n| extend SubAccountId = iff(inTopX, SubAccountId, otherId)\n| extend SubAccountName = iff(inTopX, SubAccountName, strcat('(', (count - maxGroupCount), ' others)'))\n//\n| summarize \n EffectiveCost = round(sum(EffectiveCost), 2),\n SubAccountName = take_any(SubAccountName)\n by\n ChargePeriodStart,\n SubAccountId\n| project ChargePeriodStart, EffectiveCost, Sub = iff(SubAccountId == otherId, SubAccountName, strcat(SubAccountName, ' (', split(SubAccountId, '/')[2], ')'))\n| order by EffectiveCost desc\n| render columnchart", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "let costs = CostsPlus | where ChargePeriodStart >= startofmonth(ago(90d));\nlet all = costs | summarize sum(EffectiveCost) by SubAccountId;\nlet count = toscalar(all | order by sum_EffectiveCost desc | count);\nlet topX = all | order by sum_EffectiveCost desc | limit maxGroupCount;\nlet otherId = '(others)';\ncosts\n//\n// Group rows after max count\n| extend inTopX = SubAccountId in (topX)\n| extend SubAccountId = iff(inTopX, SubAccountId, otherId)\n| extend SubAccountName = iff(inTopX, SubAccountName, strcat('(', (count - maxGroupCount), ' others)'))\n//\n| summarize \n EffectiveCost = round(sum(EffectiveCost), 2),\n SubAccountName = take_any(SubAccountName)\n by\n ChargePeriodStart,\n SubAccountId\n| project ChargePeriodStart, EffectiveCost, Sub = iff(SubAccountId == otherId, SubAccountName, strcat(SubAccountName, ' (', split(SubAccountId, '/')[2], ')'))\n| order by EffectiveCost desc\n| render columnchart", "id": "f26e2204-270e-4219-8f68-5acef1c9393f", - "usedVariables": ["maxGroupCount"] + "usedVariables": ["CostsPlus", "maxGroupCount"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nCosts_v1_0\n| where ChargePeriodStart >= startofmonth(startofmonth(now()) - 1d)\n| summarize \n EffectiveCost = sum(EffectiveCost),\n ContractedCost = sum(ContractedCost),\n ListCost = sum(ListCost)\n by\n ChargePeriodStart,\n Month = strcat(format_datetime(ChargePeriodStart, 'MM '), monthname[monthofyear(ChargePeriodStart)])\n| extend CommitmentDiscountSavings = ContractedCost - EffectiveCost\n| extend NegotiatedDiscountSavings = ListCost - ContractedCost\n| order by ChargePeriodStart asc\n| extend EffectiveCostRunningTotal = row_cumsum(EffectiveCost, prev(Month) != Month)\n| extend CommitmentDiscountSavingsRunningTotal = row_cumsum(CommitmentDiscountSavings, prev(Month) != Month)\n| extend NegotiatedDiscountSavingsRunningTotal = row_cumsum(NegotiatedDiscountSavings, prev(Month) != Month)\n| project ChargePeriodStart, CommitmentDiscountSavingsRunningTotal, NegotiatedDiscountSavingsRunningTotal, EffectiveCostRunningTotal, Month\n| render areachart ", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nCostsPlus\n| where startofmonth(ChargePeriodStart) >= startofmonth(now(), -1)\n| summarize \n EffectiveCost = sum(EffectiveCost),\n ContractedCost = sum(ContractedCost),\n ListCost = sum(ListCost)\n by\n ChargePeriodStart,\n Month = strcat(format_datetime(ChargePeriodStart, 'MM '), monthname[monthofyear(ChargePeriodStart)])\n| extend CommitmentDiscountSavings = ContractedCost - EffectiveCost\n| extend NegotiatedDiscountSavings = ListCost - ContractedCost\n| order by ChargePeriodStart asc\n| extend EffectiveCostRunningTotal = row_cumsum(EffectiveCost, prev(Month) != Month)\n| extend CommitmentDiscountSavingsRunningTotal = row_cumsum(CommitmentDiscountSavings, prev(Month) != Month)\n| extend NegotiatedDiscountSavingsRunningTotal = row_cumsum(NegotiatedDiscountSavings, prev(Month) != Month)\n| project ChargePeriodStart, CommitmentDiscountSavingsRunningTotal, NegotiatedDiscountSavingsRunningTotal, EffectiveCostRunningTotal, Month\n| render areachart ", "id": "dcc1f533-e5f9-4855-9e4c-21e21fcdf943", - "usedVariables": [] + "usedVariables": ["CostsPlus"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nlet data = materialize(\n CostsByMonth\n | summarize \n BilledCost = sum(BilledCost),\n EffectiveCost = sum(EffectiveCost),\n ContractedCost = sum(ContractedCost),\n ListCost = sum(ListCost)\n by\n ChargePeriodStart\n | order by ChargePeriodStart asc\n | extend CommitmentDiscountSavings = ContractedCost - EffectiveCost\n | extend NegotiatedDiscountSavings = ListCost - ContractedCost\n | extend Month = monthname[monthofyear(ChargePeriodStart)]\n | project json = todynamic(strcat('[{ \"Type\":\"Billed cost\", \"Count\":', BilledCost, ' }, { \"Type\":\"Effective cost\", \"Count\":', EffectiveCost, ' }, { \"Type\":\"Commitment savings\", \"Count\":', CommitmentDiscountSavings, ' }, { \"Type\":\"Negotiated savings\", \"Count\":', NegotiatedDiscountSavings, ' }]')), Month, IsThisMonth = ChargePeriodStart >= startofmonth(now())\n | mv-expand json\n | project Label = strcat(json.Type, ' (', Month, ')'), Count = tolong(json.Count), IsThisMonth\n);\ndata", "id": "e8b343dc-7430-4487-8d44-ef48ac454f2d", "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nlet data = (\n CostsByMonth\n | summarize \n BilledCost = todouble(round(sum(BilledCost), 2)),\n EffectiveCost = todouble(round(sum(EffectiveCost), 2)),\n ContractedCost = todouble(round(sum(ContractedCost), 2)),\n ListCost = todouble(round(sum(ListCost), 2))\n by\n ChargePeriodStart\n | order by ChargePeriodStart asc\n | extend CommitmentDiscountSavings = todouble(round(ContractedCost - EffectiveCost, 2))\n | extend NegotiatedDiscountSavings = todouble(round(ListCost - ContractedCost, 2))\n | extend ChargePeriod = strcat(format_datetime(ChargePeriodStart, 'yyyy-MM - '), monthname[monthofyear(ChargePeriodStart)])\n);\ndata | extend Data = 'Billed cost' | evaluate pivot(ChargePeriod, sum(BilledCost), Data)\n| union (data | extend Data = 'Effective cost' | evaluate pivot(ChargePeriod, sum(EffectiveCost), Data))\n| union (data | extend Data = 'Negotiated savings' | evaluate pivot(ChargePeriod, sum(NegotiatedDiscountSavings), Data))\n| union (data | extend Data = 'Commitment savings' | evaluate pivot(ChargePeriod, sum(CommitmentDiscountSavings), Data))\n", "id": "c077a6d4-719f-42fe-b39b-36f77dc68976", "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nlet data = (\n Costs_v1_0\n | summarize \n BilledCost = todouble(round(sum(BilledCost), 2)),\n EffectiveCost = todouble(round(sum(EffectiveCost), 2)),\n ContractedCost = todouble(round(sum(ContractedCost), 2)),\n ListCost = todouble(round(sum(ListCost), 2))\n by\n ChargePeriodStart = startofmonth(ChargePeriodStart)\n | order by ChargePeriodStart asc\n | extend CommitmentDiscountSavings = todouble(round(ContractedCost - EffectiveCost, 2))\n | extend NegotiatedDiscountSavings = todouble(round(ListCost - ContractedCost, 2))\n | extend ChargePeriod = strcat(format_datetime(ChargePeriodStart, 'yyyy-MM - '), monthname[monthofyear(ChargePeriodStart)])\n);\ndata | extend Data = 'Billed cost' | evaluate pivot(ChargePeriod, sum(BilledCost), Data)\n| union (data | extend Data = 'Effective cost' | evaluate pivot(ChargePeriod, sum(EffectiveCost), Data))\n| union (data | extend Data = 'Negotiated savings' | evaluate pivot(ChargePeriod, sum(NegotiatedDiscountSavings), Data))\n| union (data | extend Data = 'Commitment savings' | evaluate pivot(ChargePeriod, sum(CommitmentDiscountSavings), Data))\n//, BilledCost, NegotiatedDiscountSavings, CommitmentDiscountSavings)\n//| project ChargePeriod, BilledCost = round(BilledCost, 2), EffectiveCost = round(EffectiveCost, 2), NegotiatedDiscountSavings, CommitmentDiscountSavings\n", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nlet data = (\n CostsByMonth\n | summarize \n BilledCost = todouble(round(sum(BilledCost), 2)),\n EffectiveCost = todouble(round(sum(EffectiveCost), 2)),\n ContractedCost = todouble(round(sum(ContractedCost), 2)),\n ListCost = todouble(round(sum(ListCost), 2))\n by\n ChargePeriodStart = startofmonth(ChargePeriodStart)\n | order by ChargePeriodStart asc\n | extend CommitmentDiscountSavings = todouble(round(ContractedCost - EffectiveCost, 2))\n | extend NegotiatedDiscountSavings = todouble(round(ListCost - ContractedCost, 2))\n | extend ChargePeriod = strcat(format_datetime(ChargePeriodStart, 'yyyy-MM - '), monthname[monthofyear(ChargePeriodStart)])\n);\ndata | extend Data = 'Billed cost' | evaluate pivot(ChargePeriod, sum(BilledCost), Data)\n| union (data | extend Data = 'Effective cost' | evaluate pivot(ChargePeriod, sum(EffectiveCost), Data))\n| union (data | extend Data = 'Negotiated savings' | evaluate pivot(ChargePeriod, sum(NegotiatedDiscountSavings), Data))\n| union (data | extend Data = 'Commitment savings' | evaluate pivot(ChargePeriod, sum(CommitmentDiscountSavings), Data))\n//, BilledCost, NegotiatedDiscountSavings, CommitmentDiscountSavings)\n//| project ChargePeriod, BilledCost = round(BilledCost, 2), EffectiveCost = round(EffectiveCost, 2), NegotiatedDiscountSavings, CommitmentDiscountSavings\n", "id": "3d947a7c-edca-46b5-a862-de77a725c85f", - "usedVariables": [] + "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nlet data = (\n Costs_v1_0\n | summarize \n BilledCost = sum(BilledCost),\n EffectiveCost = sum(EffectiveCost),\n ContractedCost = sum(ContractedCost),\n ListCost = sum(ListCost),\n SubAccountName = take_any(SubAccountName)\n by\n ChargePeriodStart = startofmonth(ChargePeriodStart),\n SubAccountId\n | as per\n | union (\n per\n | summarize \n BilledCost = sum(BilledCost),\n EffectiveCost = sum(EffectiveCost),\n ContractedCost = sum(ContractedCost),\n ListCost = sum(ListCost),\n SubAccountName = take_any(SubAccountName)\n by\n SubAccountId\n )\n | order by ChargePeriodStart asc\n | extend BilledCost = todouble(round(BilledCost, 2))\n | extend EffectiveCost = todouble(round(EffectiveCost, 2))\n | extend ContractedCost = todouble(round(ContractedCost, 2))\n | extend ListCost = todouble(round(ListCost, 2))\n | extend CommitmentDiscountSavings = todouble(round(ContractedCost - EffectiveCost, 2))\n | extend NegotiatedDiscountSavings = todouble(round(ListCost - ContractedCost, 2))\n | extend ChargePeriod = iff(isempty(ChargePeriodStart), strcat('Total'), strcat(format_datetime(ChargePeriodStart, 'yyyy-MM - '), monthname[monthofyear(ChargePeriodStart)]))\n);\ndata | evaluate pivot(ChargePeriod, sum(EffectiveCost), SubAccountName)\n| order by Total desc", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nlet data = (\n CostsByMonth\n | summarize \n BilledCost = sum(BilledCost),\n EffectiveCost = sum(EffectiveCost),\n ContractedCost = sum(ContractedCost),\n ListCost = sum(ListCost),\n SubAccountName = take_any(SubAccountName)\n by\n ChargePeriodStart = startofmonth(ChargePeriodStart),\n SubAccountId\n | as per\n | union (\n per\n | summarize \n BilledCost = sum(BilledCost),\n EffectiveCost = sum(EffectiveCost),\n ContractedCost = sum(ContractedCost),\n ListCost = sum(ListCost),\n SubAccountName = take_any(SubAccountName)\n by\n SubAccountId\n )\n | order by ChargePeriodStart asc\n | extend BilledCost = todouble(round(BilledCost, 2))\n | extend EffectiveCost = todouble(round(EffectiveCost, 2))\n | extend ContractedCost = todouble(round(ContractedCost, 2))\n | extend ListCost = todouble(round(ListCost, 2))\n | extend CommitmentDiscountSavings = todouble(round(ContractedCost - EffectiveCost, 2))\n | extend NegotiatedDiscountSavings = todouble(round(ListCost - ContractedCost, 2))\n | extend ChargePeriod = iff(isempty(ChargePeriodStart), strcat('Total'), strcat(format_datetime(ChargePeriodStart, 'yyyy-MM - '), monthname[monthofyear(ChargePeriodStart)]))\n);\ndata | evaluate pivot(ChargePeriod, sum(EffectiveCost), SubAccountName)\n| order by Total desc", "id": "3886b5cd-34a8-42d7-9e16-33ea4d236953", - "usedVariables": [] + "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let costs = CostsByMonth;\nlet all = costs | where isnotempty(RegionName) | summarize sum(EffectiveCost) by RegionName;\nlet count = toscalar(all | order by sum_EffectiveCost desc | count);\nlet topX = all | order by sum_EffectiveCost desc | limit iff(count - maxGroupCount > 1, maxGroupCount, count);\nlet otherId = '(others)';\ncosts\n//\n// Group rows after max count\n| extend inTopX = RegionName in (topX)\n| extend RegionName = iff(inTopX, RegionName, strcat('(', count - maxGroupCount, ' others)'))\n//\n| summarize \n EffectiveCost = round(sum(EffectiveCost), 2)\n by\n ChargePeriodStart = startofmonth(ChargePeriodStart),\n RegionName\n| project ChargePeriodStart, EffectiveCost, Region = RegionName\n| order by EffectiveCost desc", "id": "d5224d06-c8e7-4dd9-afec-595b39712f5a", "usedVariables": ["CostsByMonth", "maxGroupCount"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nlet data = (\n CostsByMonth\n | summarize \n EffectiveCost = sum(EffectiveCost)\n by\n ChargePeriodStart = startofmonth(ChargePeriodStart),\n RegionName\n | as per\n | union (\n per\n | summarize \n EffectiveCost = sum(EffectiveCost)\n by\n RegionName\n )\n | order by ChargePeriodStart asc\n | extend EffectiveCost = todouble(round(EffectiveCost, 2))\n | extend ChargePeriod = iff(isempty(ChargePeriodStart), strcat('Total'), strcat(format_datetime(ChargePeriodStart, 'yyyy-MM - '), monthname[monthofyear(ChargePeriodStart)]))\n);\ndata | evaluate pivot(ChargePeriod, sum(EffectiveCost), RegionName)\n| order by Total desc", "id": "0dcf2c54-7f1d-45e9-a53b-d598a24493a4", "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let costs = CostsByMonth;\nlet all = costs | where isnotempty(ServiceName) | summarize sum(EffectiveCost) by ServiceName;\nlet count = toscalar(all | order by sum_EffectiveCost desc | count);\nlet topX = all | order by sum_EffectiveCost desc | limit maxGroupCount;\nlet otherId = '(others)';\ncosts\n//\n// Group rows after max count\n| extend inTopX = ServiceName in (topX)\n| extend ServiceName = iff(inTopX, ServiceName, otherId)\n//\n| summarize \n EffectiveCost = round(sum(EffectiveCost), 2)\n by\n ChargePeriodStart,\n ServiceName\n| project ChargePeriodStart, EffectiveCost, Category = ServiceName\n| order by EffectiveCost desc\n| render columnchart", "id": "30644718-defd-4c6c-9ffa-a9c2cd1f871f", "usedVariables": ["CostsByMonth", "maxGroupCount"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nlet data = (\n CostsByMonth\n | summarize \n EffectiveCost = sum(EffectiveCost)\n by\n ChargePeriodStart,\n ServiceCategory,\n ServiceName\n | as per\n | union (\n per\n | summarize \n EffectiveCost = sum(EffectiveCost)\n by\n ServiceCategory,\n ServiceName\n )\n | order by ChargePeriodStart asc\n | extend EffectiveCost = todouble(round(EffectiveCost, 2))\n | extend ChargePeriod = iff(isempty(ChargePeriodStart), strcat('Total'), strcat(format_datetime(ChargePeriodStart, 'yyyy-MM - '), monthname[monthofyear(ChargePeriodStart)]))\n);\ndata | evaluate pivot(ChargePeriod, sum(EffectiveCost), ServiceName, ServiceCategory)\n| order by Total desc", "id": "6259f773-593c-4953-898c-15aa5ff6e53a", "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let costs = CostsByMonth;\nlet all = costs | where isnotempty(SubAccountId) | summarize sum(EffectiveCost) by SubAccountId;\nlet count = toscalar(all | order by sum_EffectiveCost desc | count);\nlet topX = all | order by sum_EffectiveCost desc | limit maxGroupCount;\nlet otherId = '(others)';\ncosts\n//\n// Group rows after max count\n| extend inTopX = SubAccountId in (topX)\n| extend SubAccountId = iff(inTopX, SubAccountId, otherId)\n| extend SubAccountName = iff(inTopX, SubAccountName, strcat('(', (count - maxGroupCount), ' others)'))\n//\n| summarize \n EffectiveCost = round(sum(EffectiveCost), 2),\n SubAccountName = take_any(SubAccountName)\n by\n ChargePeriodStart = startofmonth(ChargePeriodStart),\n SubAccountId\n| project ChargePeriodStart, EffectiveCost, Sub = iff(SubAccountId == otherId, SubAccountName, strcat(SubAccountName, ' (', split(SubAccountId, '/')[2], ')'))\n| order by EffectiveCost desc\n| render columnchart", "id": "21a87abe-19e2-44ec-8298-ba872e66c162", "usedVariables": ["CostsByMonth", "maxGroupCount"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nlet data = (\n CostsByMonth\n | summarize \n BilledCost = sum(BilledCost),\n EffectiveCost = sum(EffectiveCost),\n ContractedCost = sum(ContractedCost),\n ListCost = sum(ListCost),\n SubAccountName = take_any(SubAccountName)\n by\n ChargePeriodStart,\n SubAccountId\n | as per\n | union (\n per\n | summarize \n BilledCost = sum(BilledCost),\n EffectiveCost = sum(EffectiveCost),\n ContractedCost = sum(ContractedCost),\n ListCost = sum(ListCost),\n SubAccountName = take_any(SubAccountName)\n by\n SubAccountId\n )\n | order by ChargePeriodStart asc\n | extend BilledCost = todouble(round(BilledCost, 2))\n | extend EffectiveCost = todouble(round(EffectiveCost, 2))\n | extend ContractedCost = todouble(round(ContractedCost, 2))\n | extend ListCost = todouble(round(ListCost, 2))\n | extend CommitmentDiscountSavings = todouble(round(ContractedCost - EffectiveCost, 2))\n | extend NegotiatedDiscountSavings = todouble(round(ListCost - ContractedCost, 2))\n | extend ChargePeriod = iff(isempty(ChargePeriodStart), strcat('Total'), strcat(format_datetime(ChargePeriodStart, 'yyyy-MM - '), monthname[monthofyear(ChargePeriodStart)]))\n);\ndata | evaluate pivot(ChargePeriod, sum(EffectiveCost), SubAccountName)\n| order by Total desc", "id": "90502e9a-2d0d-4ae4-8d9d-cc21f9b72d5d", "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nlet data = (\n CostsByMonth\n | extend x_ResourceGroupId = strcat(SubAccountId, '/resourcegroups/', x_ResourceGroupName)\n | summarize \n EffectiveCost = sum(EffectiveCost),\n SubAccountName = take_any(SubAccountName),\n x_ResourceGroupName = take_any(x_ResourceGroupName)\n by\n ChargePeriodStart,\n x_ResourceGroupId\n | as per\n | union (\n per\n | summarize \n EffectiveCost = sum(EffectiveCost),\n SubAccountName = take_any(SubAccountName),\n x_ResourceGroupName = take_any(x_ResourceGroupName)\n by\n x_ResourceGroupId\n )\n | order by ChargePeriodStart asc\n | extend EffectiveCost = todouble(round(EffectiveCost, 2))\n | extend ChargePeriod = iff(isempty(ChargePeriodStart), strcat('Total'), strcat(format_datetime(ChargePeriodStart, 'yyyy-MM - '), monthname[monthofyear(ChargePeriodStart)]))\n);\ndata | evaluate pivot(ChargePeriod, sum(EffectiveCost), x_ResourceGroupName, SubAccountName)\n| order by Total desc", "id": "c2c65ec0-e57d-4834-8a6b-b5975afeb9a0", "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let costs = CostsByMonth | extend x_ResourceGroupId = strcat(SubAccountId, '/resourcegroups/', x_ResourceGroupName);\nlet all = costs | where isnotempty(x_ResourceGroupId) | summarize sum(EffectiveCost) by x_ResourceGroupId;\nlet count = toscalar(all | order by sum_EffectiveCost desc | count);\nlet topX = all | order by sum_EffectiveCost desc | limit maxGroupCount;\nlet otherId = '(others)';\ncosts\n//\n// Group rows after max count\n| extend inTopX = x_ResourceGroupId in (topX)\n| extend x_ResourceGroupId = iff(inTopX, x_ResourceGroupId, otherId)\n| extend x_ResourceGroupName = iff(inTopX, x_ResourceGroupName, strcat('(', (count - maxGroupCount), ' others)'))\n//\n| summarize \n EffectiveCost = round(sum(EffectiveCost), 2),\n SubAccountName = take_any(SubAccountName),\n x_ResourceGroupName = take_any(x_ResourceGroupName)\n by\n ChargePeriodStart,\n x_ResourceGroupId\n| project ChargePeriodStart, EffectiveCost, RG = iff(x_ResourceGroupId == otherId, x_ResourceGroupName, strcat(x_ResourceGroupName, ' (', SubAccountName, ')'))\n| order by EffectiveCost desc\n| render columnchart", "id": "61b26784-6a73-4e80-85b2-9c5cfbd2dd06", "usedVariables": ["CostsByMonth", "maxGroupCount"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let costs = CostsByMonth;\nlet all = costs | where isnotempty(ResourceId) | summarize sum(EffectiveCost) by ResourceId;\nlet count = toscalar(all | order by sum_EffectiveCost desc | count);\nlet topX = all | order by sum_EffectiveCost desc | limit maxGroupCount;\nlet otherId = '(others)';\ncosts\n//\n// Group rows after max count\n| extend inTopX = ResourceId in (topX)\n| extend ResourceId = iff(inTopX, ResourceId, otherId)\n| extend ResourceName = iff(inTopX, ResourceName, strcat('(', (count - maxGroupCount), ' others)'))\n//\n| summarize \n EffectiveCost = round(sum(EffectiveCost), 2),\n ResourceType = take_any(ResourceType),\n ResourceName = take_any(ResourceName)\n by\n ChargePeriodStart,\n ResourceId\n| project ChargePeriodStart, EffectiveCost, RG = iff(ResourceId == otherId, ResourceName, strcat(ResourceName, ' (', ResourceType, ')'))\n| order by EffectiveCost desc\n| render columnchart", "id": "3924981c-23e4-464d-a872-045df1752750", "usedVariables": ["CostsByMonth", "maxGroupCount"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nlet data = (\n CostsByMonth\n | summarize \n EffectiveCost = sum(EffectiveCost),\n ResourceName = take_any(ResourceName),\n ResourceType = take_any(ResourceType),\n RegionName = take_any(RegionName),\n x_ResourceGroupName = take_any(x_ResourceGroupName),\n SubAccountName = take_any(SubAccountName)\n by\n ChargePeriodStart,\n ResourceId\n | as per\n | union (\n per\n | summarize \n EffectiveCost = sum(EffectiveCost)\n by\n ResourceId,\n ResourceName,\n ResourceType,\n RegionName,\n x_ResourceGroupName,\n SubAccountName\n )\n | order by ChargePeriodStart asc\n | extend EffectiveCost = todouble(round(EffectiveCost, 2))\n | extend ChargePeriod = iff(isempty(ChargePeriodStart), strcat('Total'), strcat(format_datetime(ChargePeriodStart, 'yyyy-MM - '), monthname[monthofyear(ChargePeriodStart)]))\n);\ndata | evaluate pivot(ChargePeriod, sum(EffectiveCost), ResourceName, ResourceType, RegionName, x_ResourceGroupName, SubAccountName)\n| order by Total desc", "id": "c7be613e-deb4-4779-ad75-4445e8d5e01f", "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let costs = CostsByDay;\nlet all = costs | summarize sum(EffectiveCost) by ResourceId;\nlet count = toscalar(all | order by sum_EffectiveCost desc | count);\nlet topX = all | order by sum_EffectiveCost desc | limit maxGroupCount;\nlet otherId = '(others)';\ncosts\n//\n// Group rows after max count\n| extend inTopX = ResourceId in (topX)\n| extend ResourceId = iff(inTopX, ResourceId, otherId)\n| extend ResourceName = iff(inTopX, ResourceName, strcat('(', (count - maxGroupCount), ' others)'))\n//\n| summarize \n EffectiveCost = round(sum(EffectiveCost), 2),\n ResourceType = take_any(ResourceType),\n ResourceName = take_any(ResourceName)\n by\n ChargePeriodStart,\n ResourceId\n| project ChargePeriodStart, EffectiveCost, RG = iff(ResourceId == otherId, ResourceName, strcat(ResourceName, ' (', ResourceType, ')'))\n| order by EffectiveCost desc\n| render columnchart", "id": "49e24ee0-91de-4b1c-973f-036a3c060aca", "usedVariables": ["CostsByDay", "maxGroupCount"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let costs = CostsByMonth;\nlet all = costs | where isnotempty(ServiceCategory) | summarize sum(EffectiveCost) by ServiceCategory;\nlet count = toscalar(all | order by sum_EffectiveCost desc | count);\nlet topX = all | order by sum_EffectiveCost desc | limit maxGroupCount;\nlet otherId = '(others)';\ncosts\n//\n// Group rows after max count\n| extend inTopX = ServiceCategory in (topX)\n| extend ServiceCategory = iff(inTopX, ServiceCategory, otherId)\n//\n| summarize \n EffectiveCost = round(sum(EffectiveCost), 2)\n by\n ChargePeriodStart,\n ServiceCategory\n| project ChargePeriodStart, EffectiveCost, Category = ServiceCategory\n| order by EffectiveCost desc\n| render columnchart", "id": "4c7a7614-9b8c-415b-a4e1-d2d53c023d31", "usedVariables": ["CostsByMonth", "maxGroupCount"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nlet data = (\n CostsByMonth\n | summarize \n EffectiveCost = sum(EffectiveCost)\n by\n ChargePeriodStart,\n ServiceCategory,\n ServiceName\n | as per\n | union (\n per\n | summarize \n EffectiveCost = sum(EffectiveCost)\n by\n ServiceCategory,\n ServiceName\n )\n | order by ChargePeriodStart asc\n | extend EffectiveCost = todouble(round(EffectiveCost, 2))\n | extend ChargePeriod = iff(isempty(ChargePeriodStart), strcat('Total'), strcat(format_datetime(ChargePeriodStart, 'yyyy-MM - '), monthname[monthofyear(ChargePeriodStart)]))\n);\ndata | evaluate pivot(ChargePeriod, sum(EffectiveCost), ServiceCategory)\n| order by Total desc", "id": "1d273b55-d2ea-427c-8a5f-01f6c240e98a", "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let costs = CostsByMonth;\nlet all = costs | where isnotempty(ResourceType) | summarize sum(EffectiveCost) by ResourceType;\nlet count = toscalar(all | order by sum_EffectiveCost desc | count);\nlet topX = all | order by sum_EffectiveCost desc | limit maxGroupCount;\nlet otherId = '(others)';\ncosts\n//\n// Group rows after max count\n| extend inTopX = ResourceType in (topX)\n| extend ResourceType = iff(inTopX, ResourceType, strcat('(', (count - maxGroupCount), ' others)'))\n//\n| summarize \n EffectiveCost = round(sum(EffectiveCost), 2)\n by\n ChargePeriodStart,\n ResourceType\n| project ChargePeriodStart, EffectiveCost, Type = ResourceType\n| order by EffectiveCost desc\n| render columnchart", "id": "90e30901-a931-4a1d-b81e-0a1821032c3c", "usedVariables": ["CostsByMonth", "maxGroupCount"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let costs = CostsByDay;\nlet all = costs | where isnotempty(ResourceType) | summarize sum(EffectiveCost) by ResourceType;\nlet count = toscalar(all | order by sum_EffectiveCost desc | count);\nlet topX = all | order by sum_EffectiveCost desc | limit maxGroupCount;\nlet otherId = '(others)';\ncosts\n| where isnotempty(ResourceType)\n//\n// Group rows after max count\n| extend inTopX = ResourceType in (topX)\n| extend ResourceType = iff(inTopX, ResourceType, strcat('(', (count - maxGroupCount), ' others)'))\n//\n| summarize \n EffectiveCost = round(sum(EffectiveCost), 2)\n by\n ChargePeriodStart = startofday(ChargePeriodStart),\n ResourceType\n| project ChargePeriodStart, EffectiveCost, Type = ResourceType\n| order by EffectiveCost desc\n| render columnchart", "id": "ebe41e27-e9f9-478e-ab90-fd1f87906766", "usedVariables": ["CostsByDay", "maxGroupCount"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nlet data = (\n CostsByMonth\n | summarize \n EffectiveCost = sum(EffectiveCost),\n ResourceName = take_any(ResourceName),\n ResourceType = take_any(ResourceType),\n RegionName = take_any(RegionName),\n x_ResourceGroupName = take_any(x_ResourceGroupName),\n SubAccountName = take_any(SubAccountName)\n by\n ChargePeriodStart,\n ResourceId\n | as per\n | union (\n per\n | summarize \n EffectiveCost = sum(EffectiveCost)\n by\n ResourceId,\n ResourceName,\n ResourceType,\n RegionName,\n x_ResourceGroupName,\n SubAccountName\n )\n | order by ChargePeriodStart asc\n | extend EffectiveCost = todouble(round(EffectiveCost, 2))\n | extend ChargePeriod = iff(isempty(ChargePeriodStart), strcat('Total'), strcat(format_datetime(ChargePeriodStart, 'yyyy-MM - '), monthname[monthofyear(ChargePeriodStart)]))\n);\ndata | evaluate pivot(ChargePeriod, sum(EffectiveCost), ResourceName, ResourceType, RegionName, x_ResourceGroupName, SubAccountName)\n| order by Total desc", "id": "7f7b08a9-ae15-46f8-8b0f-767280375add", "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let costs = CostsByDay | where isnotempty(ResourceType);\nlet all = costs | summarize sum(EffectiveCost) by ResourceType;\nlet count = toscalar(all | order by sum_EffectiveCost desc | count);\nlet topX = all | order by sum_EffectiveCost desc | limit maxGroupCount;\nlet otherId = '(others)';\ncosts\n| where isnotempty(ResourceType)\n//\n// Group rows after max count\n| extend inTopX = ResourceType in (topX)\n| extend ResourceType = iff(inTopX, ResourceType, strcat('(', (count - maxGroupCount), ' others)'))\n//\n| summarize \n EffectiveCost = round(sum(EffectiveCost), 2)\n by\n ResourceType\n| order by EffectiveCost desc\n| render columnchart", "id": "a35b4c05-8ecb-4c51-9aaf-980af3d7923e", "usedVariables": ["CostsByDay", "maxGroupCount"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let costs = CostsByDay | where isnotempty(ResourceType);\nlet all = costs | summarize ResourceCount = dcount(ResourceId) by ResourceType;\nlet count = toscalar(all | order by ResourceCount desc | count);\nlet topX = all | order by ResourceCount desc | limit maxGroupCount;\nlet otherId = '(others)';\ncosts\n| where isnotempty(ResourceType)\n//\n// Group rows after max count\n| extend inTopX = ResourceType in (topX)\n| extend ResourceType = iff(inTopX, ResourceType, strcat('(', (count - maxGroupCount), ' others)'))\n//\n| summarize \n ResourceCount = dcount(ResourceId)\n by\n ResourceType\n| order by ResourceCount desc\n| render columnchart", "id": "9c5d3cf0-b6cb-45a2-acfd-b19df425bddf", "usedVariables": ["CostsByDay", "maxGroupCount"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nCostsByDay\n| where isnotempty(ResourceType)\n| summarize \n Count = dcount(ResourceId),\n EffectiveCost = sum(EffectiveCost),\n ListCost = sum(ListCost),\n ContractedCost = sum(ContractedCost)\n by\n ResourceType\n| order by Count desc\n| project \n Type = ResourceType,\n Count,\n Cost = round(EffectiveCost, 2),\n // NegotiatedSavings = round(ListCost - ContractedCost, 2),\n // CommitmentSavings = round(ContractedCost - EffectiveCost, 2),\n Savings = round(ListCost - EffectiveCost, 2),\n [\"Cost / Resource\"] = round(EffectiveCost / Count, 2)\n", "id": "2d7b6447-2769-40b8-958a-f252dab68b1e", "usedVariables": ["CostsByDay"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "let costs = CostsByDay\n| where isnotempty(ResourceType);\ncosts | summarize Value = tostring(dcount(ResourceId)) by Label = \"Resources\", Order = 10\n| union (costs | summarize Value = tostring(dcount(ResourceType)) by Label = \"Resource types\", Order = 11)\n| union (costs | summarize Count = dcount(ResourceId) by Value = ResourceType | order by Count desc | limit 1 | extend Label = \"Most used\", Order = 21)\n| union (costs | summarize sum(EffectiveCost) by Value = ResourceType | order by sum_EffectiveCost desc | limit 1 | extend Label = \"Most cost\", Order = 22)\n| union (costs | summarize AllTypes = dcount(ResourceType), CommittedTypes = dcountif(ResourceType, isnotempty(CommitmentDiscountType)) by Label = \"Covered by commitment discounts\", Order = 31 | extend Value = strcat(round(1.0 * CommittedTypes / AllTypes * 100, 1), '%'))\n| union (costs | summarize Savings = sum(ListCost - EffectiveCost) by Value = ResourceType | order by Savings desc | limit 1 | extend Label = \"Most savings\", Order = 32)\n| union (costs | summarize CostPerResource = sum(EffectiveCost) / dcount(ResourceId) by Value = ResourceType | order by CostPerResource desc | limit 1 | extend Label = \"Most expensive (cost / resource)\", Order = 41)\n| union (costs | where ResourceType !in (Costs_v1_0 | where ChargePeriodStart < ago(numberOfDays * 1d) - 1d | distinct ResourceType) | summarize Count = dcount(ResourceId) by ResourceType | order by Count desc | as d | count | extend Label = \"New in last n days\", Value = case(Count == 0, '(none)', Count == 1, toscalar(d | project ResourceType), strcat(toscalar(d | limit 1 | project ResourceType), ' and ', (Count - 1), ' more')), Order = 42)\n| order by Order asc\n", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "let costs = CostsByDay\n| where isnotempty(ResourceType);\ncosts | summarize Value = tostring(dcount(ResourceId)) by Label = \"Resources\", Order = 10\n| union (costs | summarize Value = tostring(dcount(ResourceType)) by Label = \"Resource types\", Order = 11)\n| union (costs | summarize Count = dcount(ResourceId) by Value = ResourceType | order by Count desc | limit 1 | extend Label = \"Most used\", Order = 21)\n| union (costs | summarize sum(EffectiveCost) by Value = ResourceType | order by sum_EffectiveCost desc | limit 1 | extend Label = \"Most cost\", Order = 22)\n| union (costs | summarize AllTypes = dcount(ResourceType), CommittedTypes = dcountif(ResourceType, isnotempty(CommitmentDiscountType)) by Label = \"Covered by commitment discounts\", Order = 31 | extend Value = strcat(round(1.0 * CommittedTypes / AllTypes * 100, 1), '%'))\n| union (costs | summarize Savings = sum(ListCost - EffectiveCost) by Value = ResourceType | order by Savings desc | limit 1 | extend Label = \"Most savings\", Order = 32)\n| union (costs | summarize CostPerResource = sum(EffectiveCost) / dcount(ResourceId) by Value = ResourceType | order by CostPerResource desc | limit 1 | extend Label = \"Most expensive (cost / resource)\", Order = 41)\n| union (costs | where ResourceType !in (CostsPlus | where ChargePeriodStart < ago(numberOfDays * 1d) - 1d | distinct ResourceType) | summarize Count = dcount(ResourceId) by ResourceType | order by Count desc | as d | count | extend Label = \"New in last n days\", Value = case(Count == 0, '(none)', Count == 1, toscalar(d | project ResourceType), strcat(toscalar(d | limit 1 | project ResourceType), ' and ', (Count - 1), ' more')), Order = 42)\n| order by Order asc\n", "id": "f062533b-8c94-412f-bf83-0eb5cd06063d", - "usedVariables": ["CostsByDay", "numberOfDays"] + "usedVariables": ["CostsByDay", "CostsPlus", "numberOfDays"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "Costs_v1_0\n| where ChargePeriodStart >= ago(numberOfDays * 1d) - 1d and ChargePeriodStart < ago(1d)\n| summarize EffectiveCost = sum(EffectiveCost) by ChargePeriodStart = startofday(ChargePeriodStart)\n| order by ChargePeriodStart asc\n| extend PreviousEffectiveCost = prev(EffectiveCost)\n| project ChargePeriodStart, EffectiveCost, Change = iif(isempty(PreviousEffectiveCost), todouble(0), todouble((EffectiveCost - PreviousEffectiveCost) / PreviousEffectiveCost)) * 100\n", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "CostsByDay\n| summarize EffectiveCost = sum(EffectiveCost) by ChargePeriodStart = startofday(ChargePeriodStart)\n| order by ChargePeriodStart asc\n| extend PreviousEffectiveCost = prev(EffectiveCost)\n| project ChargePeriodStart, EffectiveCost, Change = iif(isempty(PreviousEffectiveCost), todouble(0), todouble((EffectiveCost - PreviousEffectiveCost) / PreviousEffectiveCost)) * 100\n", "id": "1d9c166d-22b6-48fd-9a90-9f983083ecc7", - "usedVariables": ["numberOfDays"] + "usedVariables": ["CostsByDay"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "Costs_v1_0\n| where ChargePeriodStart >= ago(numberOfDays * 1d) - 1d and ChargePeriodStart < ago(1d)\n| where isnotempty(x_SkuDescription)\n//\n// Only include SKUs with effective prices\n| where x_EffectiveUnitPrice != 0 and isnotempty(x_EffectiveUnitPrice)\n//\n// Only include SKUs with negotiated discounts and not commitment discounts\n| where ListUnitPrice > x_EffectiveUnitPrice\n| where isempty(CommitmentDiscountStatus)\n//\n| summarize \n x_ResourceCount = dcount(ResourceId),\n EffectiveCost = round(sum(EffectiveCost), 2),\n BilledCost = round(sum(BilledCost), 2),\n ListUnitPrice = round(take_any(ListUnitPrice), 4),\n ContractedUnitPrice = round(take_any(ContractedUnitPrice), 4),\n x_EffectiveUnitPrice = round(take_any(x_EffectiveUnitPrice), 4),\n PricingQuantity = sum(PricingQuantity)\n by\n x_SkuDescription,\n PricingUnit,\n CommitmentDiscountType,\n x_SkuTerm\n| order by EffectiveCost desc\n| project \n x_SkuDescription,\n // CommitmentDiscountType,\n // x_SkuTerm,\n Quantity = round(PricingQuantity, 4),\n Unit = PricingUnit,\n // Resources = x_ResourceCount,\n List = ListUnitPrice,\n // ContractedUnitPrice,\n // x_EffectiveUnitPrice,\n Discount = round(ListUnitPrice - x_EffectiveUnitPrice, 4),\n // BilledCost,\n Cost = EffectiveCost\n| where Discount > 0\n", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "CostsByDay\n| where isnotempty(x_SkuDescription)\n//\n// Only include SKUs with effective prices\n| where x_EffectiveUnitPrice != 0 and isnotempty(x_EffectiveUnitPrice)\n//\n// Only include SKUs with negotiated discounts and not commitment discounts\n| where ListUnitPrice > x_EffectiveUnitPrice\n| where isempty(CommitmentDiscountStatus)\n//\n| summarize \n x_ResourceCount = dcount(ResourceId),\n EffectiveCost = round(sum(EffectiveCost), 2),\n BilledCost = round(sum(BilledCost), 2),\n ListUnitPrice = round(take_any(ListUnitPrice), 4),\n ContractedUnitPrice = round(take_any(ContractedUnitPrice), 4),\n x_EffectiveUnitPrice = round(take_any(x_EffectiveUnitPrice), 4),\n PricingQuantity = sum(PricingQuantity)\n by\n x_SkuDescription,\n PricingUnit,\n CommitmentDiscountType,\n x_SkuTerm\n| order by EffectiveCost desc\n| project \n x_SkuDescription,\n // CommitmentDiscountType,\n // x_SkuTerm,\n Quantity = round(PricingQuantity, 4),\n Unit = PricingUnit,\n // Resources = x_ResourceCount,\n List = ListUnitPrice,\n // ContractedUnitPrice,\n // x_EffectiveUnitPrice,\n Discount = round(ListUnitPrice - x_EffectiveUnitPrice, 4),\n // BilledCost,\n Cost = EffectiveCost\n| where Discount > 0\n", "id": "af6424d4-8f73-4b81-bfdd-f0287ebcaaca", - "usedVariables": ["numberOfDays"] + "usedVariables": ["CostsByDay"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "Costs_v1_0\n| where ChargePeriodStart >= ago(numberOfDays * 1d) - 1d and ChargePeriodStart < ago(1d)\n| where isnotempty(x_SkuDescription)\n//\n// Only include SKUs with effective prices\n| where x_EffectiveUnitPrice != 0 and isnotempty(x_EffectiveUnitPrice)\n//\n// Only include SKUs with commitment discounts\n| where isnotempty(CommitmentDiscountStatus)\n//\n| summarize \n x_ResourceCount = dcount(ResourceId),\n EffectiveCost = round(sum(EffectiveCost), 2),\n BilledCost = round(sum(BilledCost), 2),\n ListUnitPrice = round(take_any(ListUnitPrice), 4),\n ContractedUnitPrice = round(take_any(ContractedUnitPrice), 4),\n x_EffectiveUnitPrice = round(take_any(x_EffectiveUnitPrice), 4),\n PricingQuantity = sum(PricingQuantity)\n by\n x_SkuDescription,\n PricingUnit,\n CommitmentDiscountType,\n x_SkuTerm\n| order by EffectiveCost desc\n| project \n x_SkuDescription,\n CommitmentDiscountType,\n Term = case(\n isempty(x_SkuTerm) or x_SkuTerm <= 0, '',\n x_SkuTerm < 12, strcat(x_SkuTerm, ' month', iff(x_SkuTerm != 1, 's', '')),\n strcat(x_SkuTerm / 12, ' year', iff(x_SkuTerm != 12, 's', ''))\n ),\n Quantity = round(PricingQuantity, 4),\n Unit = PricingUnit,\n // Resources = x_ResourceCount,\n List = ListUnitPrice,\n // ContractedUnitPrice,\n // x_EffectiveUnitPrice,\n Discount = round(ListUnitPrice - x_EffectiveUnitPrice, 4),\n // BilledCost,\n Cost = EffectiveCost\n//| where Discount > 0\n", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "CostsByDay\n| where isnotempty(x_SkuDescription)\n//\n// Only include SKUs with effective prices\n| where x_EffectiveUnitPrice != 0 and isnotempty(x_EffectiveUnitPrice)\n//\n// Only include SKUs with commitment discounts\n| where isnotempty(CommitmentDiscountStatus)\n//\n| summarize \n x_ResourceCount = dcount(ResourceId),\n EffectiveCost = round(sum(EffectiveCost), 2),\n BilledCost = round(sum(BilledCost), 2),\n ListUnitPrice = round(take_any(ListUnitPrice), 4),\n ContractedUnitPrice = round(take_any(ContractedUnitPrice), 4),\n x_EffectiveUnitPrice = round(take_any(x_EffectiveUnitPrice), 4),\n PricingQuantity = sum(PricingQuantity)\n by\n x_SkuDescription,\n PricingUnit,\n CommitmentDiscountType,\n x_SkuTerm\n| order by EffectiveCost desc\n| project \n x_SkuDescription,\n CommitmentDiscountType,\n Term = case(\n isempty(x_SkuTerm) or x_SkuTerm <= 0, '',\n x_SkuTerm < 12, strcat(x_SkuTerm, ' month', iff(x_SkuTerm != 1, 's', '')),\n strcat(x_SkuTerm / 12, ' year', iff(x_SkuTerm != 12, 's', ''))\n ),\n Quantity = round(PricingQuantity, 4),\n Unit = PricingUnit,\n // Resources = x_ResourceCount,\n List = ListUnitPrice,\n // ContractedUnitPrice,\n // x_EffectiveUnitPrice,\n Discount = round(ListUnitPrice - x_EffectiveUnitPrice, 4),\n // BilledCost,\n Cost = EffectiveCost\n//| where Discount > 0\n", "id": "c4f6542d-a9cb-4284-bd4e-b9f94ad02192", - "usedVariables": ["numberOfDays"] + "usedVariables": ["CostsByDay"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "Costs_v1_0\n| where ChargePeriodStart >= ago(numberOfDays * 1d) - 1d and ChargePeriodStart < ago(1d)\n| where isnotempty(x_SkuDescription)\n//\n// Only include SKUs with effective prices\n| where x_EffectiveUnitPrice != 0 and isnotempty(x_EffectiveUnitPrice)\n//\n// Only include SKUs without any discounts\n| where ListUnitPrice == x_EffectiveUnitPrice\n| where isempty(CommitmentDiscountStatus)\n//\n| summarize \n x_ResourceCount = dcount(ResourceId),\n EffectiveCost = round(sum(EffectiveCost), 2),\n BilledCost = round(sum(BilledCost), 2),\n ListUnitPrice = round(take_any(ListUnitPrice), 4),\n ContractedUnitPrice = round(take_any(ContractedUnitPrice), 4),\n x_EffectiveUnitPrice = round(take_any(x_EffectiveUnitPrice), 4),\n PricingQuantity = sum(PricingQuantity)\n by\n x_SkuDescription,\n PricingUnit,\n CommitmentDiscountType,\n x_SkuTerm\n| order by EffectiveCost desc\n| project \n x_SkuDescription,\n // CommitmentDiscountType,\n // x_SkuTerm,\n Quantity = round(PricingQuantity, 4),\n Unit = PricingUnit,\n // Resources = x_ResourceCount,\n List = ListUnitPrice,\n // ContractedUnitPrice,\n // x_EffectiveUnitPrice,\n Discount = round(ListUnitPrice - x_EffectiveUnitPrice, 4),\n // BilledCost,\n Cost = EffectiveCost\n| where Discount == 0\n", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "CostsByDay\n| where isnotempty(x_SkuDescription)\n//\n// Only include SKUs with effective prices\n| where x_EffectiveUnitPrice != 0 and isnotempty(x_EffectiveUnitPrice)\n//\n// Only include SKUs without any discounts\n| where ListUnitPrice == x_EffectiveUnitPrice\n| where isempty(CommitmentDiscountStatus)\n//\n| summarize \n x_ResourceCount = dcount(ResourceId),\n EffectiveCost = round(sum(EffectiveCost), 2),\n BilledCost = round(sum(BilledCost), 2),\n ListUnitPrice = round(take_any(ListUnitPrice), 4),\n ContractedUnitPrice = round(take_any(ContractedUnitPrice), 4),\n x_EffectiveUnitPrice = round(take_any(x_EffectiveUnitPrice), 4),\n PricingQuantity = sum(PricingQuantity)\n by\n x_SkuDescription,\n PricingUnit,\n CommitmentDiscountType,\n x_SkuTerm\n| order by EffectiveCost desc\n| project \n x_SkuDescription,\n // CommitmentDiscountType,\n // x_SkuTerm,\n Quantity = round(PricingQuantity, 4),\n Unit = PricingUnit,\n // Resources = x_ResourceCount,\n List = ListUnitPrice,\n // ContractedUnitPrice,\n // x_EffectiveUnitPrice,\n Discount = round(ListUnitPrice - x_EffectiveUnitPrice, 4),\n // BilledCost,\n Cost = EffectiveCost\n| where Discount == 0\n", "id": "00ae3917-c783-45f6-a04e-9113e4c5d445", - "usedVariables": ["numberOfDays"] + "usedVariables": ["CostsByDay"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "let doubleGroupCount = maxGroupCount * 2;\nlet costs = Costs_v1_0\n| where ChargePeriodStart >= ago(numberOfDays * 1d) - 1d and ChargePeriodStart < ago(1d)\n| where isnotempty(x_SkuDescription)\n;\nlet all = costs | summarize EffectiveCost = round(sum(EffectiveCost), 2) by x_SkuDescription;\nlet count = toscalar(all | count);\nlet topX = all | order by EffectiveCost desc | limit doubleGroupCount;\ncosts\n//\n// Group rows after max count\n| extend inTopX = x_SkuDescription in (topX)\n| extend x_SkuDescription = iff(inTopX, x_SkuDescription, strcat('(', (count - doubleGroupCount), ' others)'))\n//\n| summarize EffectiveCost = round(sum(EffectiveCost), 2) by SKU = x_SkuDescription\n| order by EffectiveCost desc\n", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "let doubleGroupCount = maxGroupCount * 2;\nlet costs = CostsByDay\n| where isnotempty(x_SkuDescription)\n;\nlet all = costs | summarize EffectiveCost = round(sum(EffectiveCost), 2) by x_SkuDescription;\nlet count = toscalar(all | count);\nlet topX = all | order by EffectiveCost desc | limit doubleGroupCount;\ncosts\n//\n// Group rows after max count\n| extend inTopX = x_SkuDescription in (topX)\n| extend x_SkuDescription = iff(inTopX, x_SkuDescription, strcat('(', (count - doubleGroupCount), ' others)'))\n//\n| summarize EffectiveCost = round(sum(EffectiveCost), 2) by SKU = x_SkuDescription\n| order by EffectiveCost desc\n", "id": "d8a4634e-7ebe-47ce-83b5-ff7f50f6bee6", - "usedVariables": ["maxGroupCount", "numberOfDays"] + "usedVariables": ["CostsByDay", "maxGroupCount"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nCostsByMonth\n| where ChargeCategory == 'Purchase'\n| project\n ChargePeriodStart = substring(ChargePeriodStart, 0, 10),\n x_SkuDescription,\n CommitmentDiscountType,\n Term = case(isempty(x_SkuTerm) or x_SkuTerm <= 0, '', x_SkuTerm < 12, strcat(x_SkuTerm, ' month', iff(x_SkuTerm != 1, 's', '')), strcat(x_SkuTerm / 12, ' year', iff(x_SkuTerm != 12, 's', ''))),\n PricingQuantity,\n BilledCost,\n BillingCurrency\n| order by ChargePeriodStart desc\n", "id": "98c9b9b5-bebf-41f8-8319-5fa2523f9dd0", "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nCostsByMonth\n| as costs\n| where ChargeCategory == 'Purchase'\n| where isnotempty(CommitmentDiscountType)\n| project\n ChargePeriodStart = substring(ChargePeriodStart, 0, 10),\n x_SkuDescription,\n CommitmentDiscountType,\n Term = case(isempty(x_SkuTerm) or x_SkuTerm <= 0, '', x_SkuTerm < 12, strcat(x_SkuTerm, ' month', iff(x_SkuTerm != 1, 's', '')), strcat(x_SkuTerm / 12, ' year', iff(x_SkuTerm != 12, 's', ''))),\n ChargeFrequency,\n ChargeClass,\n PricingQuantity,\n Utilization = double(0),\n BilledCost,\n x_SkuOrderId\n| join kind=leftouter (\n costs\n | where ChargeCategory == 'Usage'\n | where isnotempty(CommitmentDiscountId)\n //\n | extend x_CommitmentDiscountUtilizationPotential = case(\n ProviderName == 'Microsoft', EffectiveCost,\n CommitmentDiscountCategory == 'Usage', ConsumedQuantity,\n CommitmentDiscountCategory == 'Spend', EffectiveCost,\n decimal(0)\n )\n | extend x_CommitmentDiscountUtilizationAmount = iff(CommitmentDiscountStatus == 'Used', x_CommitmentDiscountUtilizationPotential, decimal(0))\n //\n | summarize\n x_CommitmentDiscountUtilizationAmount = sum(x_CommitmentDiscountUtilizationAmount),\n x_CommitmentDiscountUtilizationPotential = sum(x_CommitmentDiscountUtilizationPotential)\n by\n x_SkuOrderId\n | project\n x_SkuOrderId,\n Utilization = round(x_CommitmentDiscountUtilizationAmount / x_CommitmentDiscountUtilizationPotential * 100, 1)\n) on x_SkuOrderId\n| extend Utilization = coalesce(Utilization1, double(0))\n| project-away x_SkuOrderId, x_SkuOrderId1, Utilization1\n| order by ChargePeriodStart desc\n\n\n", "id": "35a3a2b3-4ab0-4449-96f7-c78db789089e", "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let data = materialize(\n CostsByMonth | extend Period = 'Last n months'\n | union (CostsByDay | extend Period = 'Last n days')\n | summarize \n ListCost = round(sum(ListCost), 2),\n ContractedCost = round(sum(ContractedCost), 2),\n EffectiveCost = round(sum(EffectiveCost), 2)\n by\n Period\n | project Period, json = todynamic(strcat('[{ \"Label\":\"List\", \"Value\":', ListCost, ' }, { \"Label\":\"Contracted\", \"Value\":', ContractedCost, ' }, { \"Label\":\"Effective\", \"Value\":', EffectiveCost, ' }]'))\n | mv-expand json\n | project Label = tostring(json.Label), Value = tolong(json.Value), Period\n);\ndata", "id": "5ff29428-de83-4a2c-8f86-d8beebe68750", "usedVariables": ["CostsByDay", "CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let data = materialize(\n CostsByMonth | extend Period = 'Last n months'\n | union (CostsByDay | extend Period = 'Last n days')\n | summarize\n ListCost = round(sum(ListCost), 2),\n ContractedCost = round(sum(ContractedCost), 2),\n EffectiveCost = round(sum(EffectiveCost), 2)\n by\n Period\n | project Period, json = todynamic(strcat('[{ \"Label\":\"Total\", \"Value\":', ListCost - EffectiveCost, ' }, { \"Label\":\"Negotiated\", \"Value\":', ListCost - ContractedCost, ' }, { \"Label\":\"Commitment\", \"Value\":', ContractedCost - EffectiveCost, ' }]'))\n | mv-expand json\n | project Label = tostring(json.Label), Value = tolong(json.Value), Period\n);\ndata\n", "id": "f5f240a8-a818-4f27-bdfb-e96fcfe433bd", "usedVariables": ["CostsByDay", "CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nCosts_v1_0\n| where ChargePeriodStart >= ago(numberOfDays * 1d) - 1d and ChargePeriodStart < ago(1d)\n| where ChargeCategory == 'Usage'\n| where isnotempty(CommitmentDiscountId)\n//\n| extend x_CommitmentDiscountUtilizationPotential = case(\n ProviderName == 'Microsoft', EffectiveCost,\n CommitmentDiscountCategory == 'Usage', ConsumedQuantity,\n CommitmentDiscountCategory == 'Spend', EffectiveCost,\n decimal(0)\n)\n| extend x_CommitmentDiscountUtilizationAmount = iff(CommitmentDiscountStatus == 'Used', x_CommitmentDiscountUtilizationPotential, decimal(0))\n//\n| summarize\n CommitmentDiscountName = take_any(CommitmentDiscountName),\n CommitmentDiscountType = take_any(CommitmentDiscountType),\n x_SkuTerm = take_any(x_SkuTerm),\n ListCost = sum(ListCost),\n ContractedCost = sum(ContractedCost),\n EffectiveCost = sum(EffectiveCost),\n x_CommitmentDiscountUtilizationAmount = sum(x_CommitmentDiscountUtilizationAmount),\n x_CommitmentDiscountUtilizationPotential = sum(x_CommitmentDiscountUtilizationPotential)\n by\n CommitmentDiscountId\n| order by EffectiveCost desc\n| project\n CommitmentDiscountName,\n CommitmentDiscountType,\n Term = case(isempty(x_SkuTerm) or x_SkuTerm <= 0, '', x_SkuTerm < 12, strcat(x_SkuTerm, ' month', iff(x_SkuTerm != 1, 's', '')), strcat(x_SkuTerm / 12, ' year', iff(x_SkuTerm != 12, 's', ''))),\n Utilization = round(x_CommitmentDiscountUtilizationAmount / x_CommitmentDiscountUtilizationPotential * 100, 1),\n Cost = round(EffectiveCost, 2),\n Savings = round(ListCost - EffectiveCost, 2)\n", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nCostsByDay\n| where ChargeCategory == 'Usage'\n| where isnotempty(CommitmentDiscountId)\n//\n| extend x_CommitmentDiscountUtilizationPotential = case(\n ProviderName == 'Microsoft', EffectiveCost,\n CommitmentDiscountCategory == 'Usage', ConsumedQuantity,\n CommitmentDiscountCategory == 'Spend', EffectiveCost,\n decimal(0)\n)\n| extend x_CommitmentDiscountUtilizationAmount = iff(CommitmentDiscountStatus == 'Used', x_CommitmentDiscountUtilizationPotential, decimal(0))\n//\n| summarize\n CommitmentDiscountName = take_any(CommitmentDiscountName),\n CommitmentDiscountType = take_any(CommitmentDiscountType),\n x_SkuTerm = take_any(x_SkuTerm),\n ListCost = sum(ListCost),\n ContractedCost = sum(ContractedCost),\n EffectiveCost = sum(EffectiveCost),\n x_CommitmentDiscountUtilizationAmount = sum(x_CommitmentDiscountUtilizationAmount),\n x_CommitmentDiscountUtilizationPotential = sum(x_CommitmentDiscountUtilizationPotential)\n by\n CommitmentDiscountId\n| order by EffectiveCost desc\n| project\n CommitmentDiscountName,\n CommitmentDiscountType,\n Term = case(isempty(x_SkuTerm) or x_SkuTerm <= 0, '', x_SkuTerm < 12, strcat(x_SkuTerm, ' month', iff(x_SkuTerm != 1, 's', '')), strcat(x_SkuTerm / 12, ' year', iff(x_SkuTerm != 12, 's', ''))),\n Utilization = round(x_CommitmentDiscountUtilizationAmount / x_CommitmentDiscountUtilizationPotential * 100, 1),\n Cost = round(EffectiveCost, 2),\n Savings = round(ListCost - EffectiveCost, 2)\n", "id": "d7f31381-ba44-46a1-ad3e-dc6b8826706d", - "usedVariables": ["numberOfDays"] + "usedVariables": ["CostsByDay"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "let data = materialize(\n Costs_v1_0\n | where ChargePeriodStart >= startofmonth(startofmonth(now()) - 1d)\n // | where ChargePeriodStart >= ago(numberOfDays * 1d) - 1d and ChargePeriodStart < ago(1d)\n //\n // Don't double-count commitment discount purchases\n | where ChargeCategory == 'Usage' or isempty(CommitmentDiscountId)\n //\n | summarize \n ListCost = sum(ListCost),\n ContractedCost = sum(ContractedCost),\n EffectiveCost = sum(EffectiveCost)\n | extend CommitmentDiscountSavings = ContractedCost - EffectiveCost\n | extend NegotiatedDiscountSavings = ListCost - ContractedCost\n | extend TotalSavings = ListCost - EffectiveCost\n | project json = todynamic(strcat('[',\n '{ \"order\":11, \"type\":\"List\", \"label\":\"Cost without discounts\", \"value\":\"', numberstring(round(ListCost, 2)), '\" },',\n '{ \"order\":12, \"type\":\"\", \"label\":\"\", \"value\":\"➖\" },',\n '{ \"order\":13, \"type\":\"Contracted\", \"label\":\"After negotiated discounts\", \"value\":\"', numberstring(round(ContractedCost, 2)), '\" },',\n '{ \"order\":14, \"type\":\"\", \"label\":\"\", \"value\":\"🟰\" },',\n '{ \"order\":15, \"type\":\"PartialSavings\", \"label\":\"Negotiated savings\", \"value\":\"', numberstring(round(NegotiatedDiscountSavings, 2)), '\" },',\n //\n '{ \"order\":21, \"type\":\"Contracted\", \"label\":\"After negotiated discounts\", \"value\":\"', numberstring(round(ContractedCost, 2)), '\" },',\n '{ \"order\":22, \"type\":\"\", \"label\":\"\", \"value\":\"➖\" },',\n '{ \"order\":23, \"type\":\"Effective\", \"label\":\"After commitment discounts\", \"value\":\"', numberstring(round(EffectiveCost, 2)), '\" },',\n '{ \"order\":24, \"type\":\"\", \"label\":\"\", \"value\":\"🟰\" },',\n '{ \"order\":25, \"type\":\"PartialSavings\", \"label\":\"Commitment savings\", \"value\":\"', numberstring(round(CommitmentDiscountSavings, 2)), '\" },',\n //\n '{ \"order\":31, \"type\":\"List\", \"label\":\"Cost without discounts\", \"value\":\"', numberstring(round(ListCost, 2)), '\" },',\n '{ \"order\":32, \"type\":\"\", \"label\":\"\", \"value\":\"➖\" },',\n '{ \"order\":33, \"type\":\"Effective\", \"label\":\"After commitment discounts\", \"value\":\"', numberstring(round(EffectiveCost, 2)), '\" },',\n '{ \"order\":34, \"type\":\"\", \"label\":\"\", \"value\":\"🟰\" },',\n '{ \"order\":35, \"type\":\"TotalSavings\", \"label\":\"Total savings\", \"value\":\"', numberstring(round(TotalSavings, 2)), '\" }',\n ']'))\n | mv-expand json\n | order by toint(json.order) asc\n | project Label = tostring(json.label), Value = tostring(json.value), Type = tostring(json.type)\n);\ndata", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "let data = materialize(\n CostsByMonth\n //\n // Don't double-count commitment discount purchases\n | where x_AmortizationCategory != 'Principal'\n //\n | summarize \n ListCost = sum(ListCost),\n ContractedCost = sum(ContractedCost),\n EffectiveCost = sum(EffectiveCost)\n | extend CommitmentDiscountSavings = ContractedCost - EffectiveCost\n | extend NegotiatedDiscountSavings = ListCost - ContractedCost\n | extend TotalSavings = ListCost - EffectiveCost\n | project json = todynamic(strcat('[',\n '{ \"order\":11, \"type\":\"List\", \"label\":\"Cost without discounts\", \"value\":\"', numberstring(round(ListCost, 2)), '\" },',\n '{ \"order\":12, \"type\":\"\", \"label\":\"\", \"value\":\"➖\" },',\n '{ \"order\":13, \"type\":\"Contracted\", \"label\":\"After negotiated discounts\", \"value\":\"', numberstring(round(ContractedCost, 2)), '\" },',\n '{ \"order\":14, \"type\":\"\", \"label\":\"\", \"value\":\"🟰\" },',\n '{ \"order\":15, \"type\":\"PartialSavings\", \"label\":\"Negotiated savings\", \"value\":\"', numberstring(round(NegotiatedDiscountSavings, 2)), '\" },',\n //\n '{ \"order\":21, \"type\":\"Contracted\", \"label\":\"After negotiated discounts\", \"value\":\"', numberstring(round(ContractedCost, 2)), '\" },',\n '{ \"order\":22, \"type\":\"\", \"label\":\"\", \"value\":\"➖\" },',\n '{ \"order\":23, \"type\":\"Effective\", \"label\":\"After commitment discounts\", \"value\":\"', numberstring(round(EffectiveCost, 2)), '\" },',\n '{ \"order\":24, \"type\":\"\", \"label\":\"\", \"value\":\"🟰\" },',\n '{ \"order\":25, \"type\":\"PartialSavings\", \"label\":\"Commitment savings\", \"value\":\"', numberstring(round(CommitmentDiscountSavings, 2)), '\" },',\n //\n '{ \"order\":31, \"type\":\"List\", \"label\":\"Cost without discounts\", \"value\":\"', numberstring(round(ListCost, 2)), '\" },',\n '{ \"order\":32, \"type\":\"\", \"label\":\"\", \"value\":\"➖\" },',\n '{ \"order\":33, \"type\":\"Effective\", \"label\":\"After commitment discounts\", \"value\":\"', numberstring(round(EffectiveCost, 2)), '\" },',\n '{ \"order\":34, \"type\":\"\", \"label\":\"\", \"value\":\"🟰\" },',\n '{ \"order\":35, \"type\":\"TotalSavings\", \"label\":\"Total savings\", \"value\":\"', numberstring(round(TotalSavings, 2)), '\" }',\n ']'))\n | mv-expand json\n | order by toint(json.order) asc\n | project Label = tostring(json.label), Value = tostring(json.value), Type = tostring(json.type)\n);\ndata", "id": "e17346d1-0227-4aa4-8765-f9b4bf43bed5", - "usedVariables": [] + "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "let data = materialize(\n Costs_v1_0\n | where ChargePeriodStart >= ago(numberOfDays * 1d) - 1d and ChargePeriodStart < ago(1d)\n //\n // Don't double-count commitment discount purchases\n | where ChargeCategory == 'Usage' or isempty(CommitmentDiscountId)\n //\n | summarize \n ListCost = sum(ListCost),\n ContractedCost = sum(ContractedCost),\n EffectiveCost = sum(EffectiveCost)\n | extend CommitmentDiscountSavings = ContractedCost - EffectiveCost\n | extend NegotiatedDiscountSavings = ListCost - ContractedCost\n | extend TotalSavings = ListCost - EffectiveCost\n | project json = todynamic(strcat('[',\n '{ \"order\":11, \"type\":\"List\", \"label\":\"Cost without discounts\", \"value\":\"', numberstring(round(ListCost, 2)), '\" },',\n '{ \"order\":12, \"type\":\"\", \"label\":\"\", \"value\":\"➖\" },',\n '{ \"order\":13, \"type\":\"Contracted\", \"label\":\"After negotiated discounts\", \"value\":\"', numberstring(round(ContractedCost, 2)), '\" },',\n '{ \"order\":14, \"type\":\"\", \"label\":\"\", \"value\":\"🟰\" },',\n '{ \"order\":15, \"type\":\"PartialSavings\", \"label\":\"Negotiated savings\", \"value\":\"', numberstring(round(NegotiatedDiscountSavings, 2)), '\" },',\n //\n '{ \"order\":21, \"type\":\"Contracted\", \"label\":\"After negotiated discounts\", \"value\":\"', numberstring(round(ContractedCost, 2)), '\" },',\n '{ \"order\":22, \"type\":\"\", \"label\":\"\", \"value\":\"➖\" },',\n '{ \"order\":23, \"type\":\"Effective\", \"label\":\"After commitment discounts\", \"value\":\"', numberstring(round(EffectiveCost, 2)), '\" },',\n '{ \"order\":24, \"type\":\"\", \"label\":\"\", \"value\":\"🟰\" },',\n '{ \"order\":25, \"type\":\"PartialSavings\", \"label\":\"Commitment savings\", \"value\":\"', numberstring(round(CommitmentDiscountSavings, 2)), '\" },',\n //\n '{ \"order\":31, \"type\":\"List\", \"label\":\"Cost without discounts\", \"value\":\"', numberstring(round(ListCost, 2)), '\" },',\n '{ \"order\":32, \"type\":\"\", \"label\":\"\", \"value\":\"➖\" },',\n '{ \"order\":33, \"type\":\"Effective\", \"label\":\"After commitment discounts\", \"value\":\"', numberstring(round(EffectiveCost, 2)), '\" },',\n '{ \"order\":34, \"type\":\"\", \"label\":\"\", \"value\":\"🟰\" },',\n '{ \"order\":35, \"type\":\"TotalSavings\", \"label\":\"Total savings\", \"value\":\"', numberstring(round(TotalSavings, 2)), '\" }',\n ']'))\n | mv-expand json\n | order by toint(json.order) asc\n | project Label = tostring(json.label), Value = tostring(json.value), Type = tostring(json.type)\n);\ndata", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "let data = materialize(\n CostsByDay\n //\n // Don't double-count commitment discount purchases\n | where ChargeCategory == 'Usage' or isempty(CommitmentDiscountId)\n //\n | summarize \n ListCost = sum(ListCost),\n ContractedCost = sum(ContractedCost),\n EffectiveCost = sum(EffectiveCost)\n | extend CommitmentDiscountSavings = ContractedCost - EffectiveCost\n | extend NegotiatedDiscountSavings = ListCost - ContractedCost\n | extend TotalSavings = ListCost - EffectiveCost\n | project json = todynamic(strcat('[',\n '{ \"order\":11, \"type\":\"List\", \"label\":\"Cost without discounts\", \"value\":\"', numberstring(round(ListCost, 2)), '\" },',\n '{ \"order\":12, \"type\":\"\", \"label\":\"\", \"value\":\"➖\" },',\n '{ \"order\":13, \"type\":\"Contracted\", \"label\":\"After negotiated discounts\", \"value\":\"', numberstring(round(ContractedCost, 2)), '\" },',\n '{ \"order\":14, \"type\":\"\", \"label\":\"\", \"value\":\"🟰\" },',\n '{ \"order\":15, \"type\":\"PartialSavings\", \"label\":\"Negotiated savings\", \"value\":\"', numberstring(round(NegotiatedDiscountSavings, 2)), '\" },',\n //\n '{ \"order\":21, \"type\":\"Contracted\", \"label\":\"After negotiated discounts\", \"value\":\"', numberstring(round(ContractedCost, 2)), '\" },',\n '{ \"order\":22, \"type\":\"\", \"label\":\"\", \"value\":\"➖\" },',\n '{ \"order\":23, \"type\":\"Effective\", \"label\":\"After commitment discounts\", \"value\":\"', numberstring(round(EffectiveCost, 2)), '\" },',\n '{ \"order\":24, \"type\":\"\", \"label\":\"\", \"value\":\"🟰\" },',\n '{ \"order\":25, \"type\":\"PartialSavings\", \"label\":\"Commitment savings\", \"value\":\"', numberstring(round(CommitmentDiscountSavings, 2)), '\" },',\n //\n '{ \"order\":31, \"type\":\"List\", \"label\":\"Cost without discounts\", \"value\":\"', numberstring(round(ListCost, 2)), '\" },',\n '{ \"order\":32, \"type\":\"\", \"label\":\"\", \"value\":\"➖\" },',\n '{ \"order\":33, \"type\":\"Effective\", \"label\":\"After commitment discounts\", \"value\":\"', numberstring(round(EffectiveCost, 2)), '\" },',\n '{ \"order\":34, \"type\":\"\", \"label\":\"\", \"value\":\"🟰\" },',\n '{ \"order\":35, \"type\":\"TotalSavings\", \"label\":\"Total savings\", \"value\":\"', numberstring(round(TotalSavings, 2)), '\" }',\n ']'))\n | mv-expand json\n | order by toint(json.order) asc\n | project Label = tostring(json.label), Value = tostring(json.value), Type = tostring(json.type)\n);\ndata", "id": "f1ef29df-7a1d-4dd0-8619-0c0164707b31", - "usedVariables": ["numberOfDays"] + "usedVariables": ["CostsByDay"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "let data = materialize(\n Costs_v1_0\n | where ChargePeriodStart >= startofmonth(startofmonth(now()) - 1d)\n // | where ChargePeriodStart >= ago(numberOfDays * 1d) - 1d and ChargePeriodStart < ago(1d)\n //\n // Don't double-count commitment discount purchases\n | where isnotempty(CommitmentDiscountStatus)\n //\n // Guarantee there's a row for every combination\n | union (\n print json = dynamic([\n {\"order\": 11, \"CommitmentDiscountType\": \"Reservation\", \"CommitmentDiscountStatus\": \"Used\"},\n {\"order\": 12, \"CommitmentDiscountType\": \"Reservation\", \"CommitmentDiscountStatus\": \"Unused\"},\n {\"order\": 21, \"CommitmentDiscountType\": \"Savings Plan\", \"CommitmentDiscountStatus\": \"Used\"},\n {\"order\": 22, \"CommitmentDiscountType\": \"Savings Plan\", \"CommitmentDiscountStatus\": \"Unused\"}\n ])\n | mv-expand json\n | evaluate bag_unpack(json)\n | extend EffectiveCost = todecimal(0)\n )\n //\n | summarize Value = sum(EffectiveCost), order = sum(order) by CommitmentDiscountStatus, CommitmentDiscountType\n | order by order asc\n | project Label = strcat(CommitmentDiscountStatus, ' ', tolower(CommitmentDiscountType), 's'), Value\n);\ndata", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "let data = materialize(\n CostsByMonth\n //\n | where isnotempty(CommitmentDiscountStatus)\n //\n // Guarantee there's a row for every combination\n | union (\n print json = dynamic([\n {\"order\": 11, \"CommitmentDiscountType\": \"Reservation\", \"CommitmentDiscountStatus\": \"Used\"},\n {\"order\": 12, \"CommitmentDiscountType\": \"Reservation\", \"CommitmentDiscountStatus\": \"Unused\"},\n {\"order\": 21, \"CommitmentDiscountType\": \"Savings Plan\", \"CommitmentDiscountStatus\": \"Used\"},\n {\"order\": 22, \"CommitmentDiscountType\": \"Savings Plan\", \"CommitmentDiscountStatus\": \"Unused\"}\n ])\n | mv-expand json\n | evaluate bag_unpack(json)\n | extend EffectiveCost = todecimal(0)\n )\n //\n | summarize Value = sum(EffectiveCost), order = sum(order) by CommitmentDiscountStatus, CommitmentDiscountType\n | order by order asc\n | project Label = strcat(CommitmentDiscountStatus, ' ', tolower(CommitmentDiscountType), 's'), Value\n);\ndata", "id": "7d0c2c1f-338b-4534-b173-36b284779131", - "usedVariables": [] + "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "let data = materialize(\n Costs_v1_0\n | where ChargePeriodStart >= ago(numberOfDays * 1d) - 1d and ChargePeriodStart < ago(1d)\n //\n // Don't double-count commitment discount purchases\n | where isnotempty(CommitmentDiscountStatus)\n //\n // Guarantee there's a row for every combination\n | union (\n print json = dynamic([\n {\"order\": 11, \"CommitmentDiscountType\": \"Reservation\", \"CommitmentDiscountStatus\": \"Used\"},\n {\"order\": 12, \"CommitmentDiscountType\": \"Reservation\", \"CommitmentDiscountStatus\": \"Unused\"},\n {\"order\": 21, \"CommitmentDiscountType\": \"Savings Plan\", \"CommitmentDiscountStatus\": \"Used\"},\n {\"order\": 22, \"CommitmentDiscountType\": \"Savings Plan\", \"CommitmentDiscountStatus\": \"Unused\"}\n ])\n | mv-expand json\n | evaluate bag_unpack(json)\n | extend EffectiveCost = todecimal(0)\n )\n //\n | summarize Value = sum(EffectiveCost), order = sum(order) by CommitmentDiscountStatus, CommitmentDiscountType\n | order by order asc\n | project Label = strcat(CommitmentDiscountStatus, ' ', tolower(CommitmentDiscountType), 's'), Value\n);\ndata", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "let data = materialize(\n CostsByDay\n //\n // Don't double-count commitment discount purchases\n | where isnotempty(CommitmentDiscountStatus)\n //\n // Guarantee there's a row for every combination\n | union (\n print json = dynamic([\n {\"order\": 11, \"CommitmentDiscountType\": \"Reservation\", \"CommitmentDiscountStatus\": \"Used\"},\n {\"order\": 12, \"CommitmentDiscountType\": \"Reservation\", \"CommitmentDiscountStatus\": \"Unused\"},\n {\"order\": 21, \"CommitmentDiscountType\": \"Savings Plan\", \"CommitmentDiscountStatus\": \"Used\"},\n {\"order\": 22, \"CommitmentDiscountType\": \"Savings Plan\", \"CommitmentDiscountStatus\": \"Unused\"}\n ])\n | mv-expand json\n | evaluate bag_unpack(json)\n | extend EffectiveCost = todecimal(0)\n )\n //\n | summarize Value = sum(EffectiveCost), order = sum(order) by CommitmentDiscountStatus, CommitmentDiscountType\n | order by order asc\n | project Label = strcat(CommitmentDiscountStatus, ' ', tolower(CommitmentDiscountType), 's'), Value\n);\ndata", "id": "84ecad69-79ac-45b9-a8af-60be28dcc748", - "usedVariables": ["numberOfDays"] + "usedVariables": ["CostsByDay"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nlet data = (\n Costs_v1_0\n | where ChargePeriodStart >= monthsago(numberOfMonths)\n | summarize \n EffectiveCost = sum(EffectiveCost)\n by\n ChargePeriodStart = startofmonth(ChargePeriodStart),\n ServiceCategory,\n ServiceName\n | as per\n | union (\n per\n | summarize \n EffectiveCost = sum(EffectiveCost)\n by\n ServiceCategory,\n ServiceName\n )\n | order by ChargePeriodStart asc\n | extend EffectiveCost = todouble(round(EffectiveCost, 2))\n | extend ChargePeriod = iff(isempty(ChargePeriodStart), strcat('Total'), strcat(format_datetime(ChargePeriodStart, 'yyyy-MM - '), monthname[monthofyear(ChargePeriodStart)]))\n);\ndata | evaluate pivot(ChargePeriod, sum(EffectiveCost), ServiceCategory)\n| order by Total desc", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nlet data = (\n CostsByMonth\n | summarize \n EffectiveCost = sum(EffectiveCost)\n by\n ChargePeriodStart = startofmonth(ChargePeriodStart),\n ServiceCategory,\n ServiceName\n | as per\n | union (\n per\n | summarize \n EffectiveCost = sum(EffectiveCost)\n by\n ServiceCategory,\n ServiceName\n )\n | order by ChargePeriodStart asc\n | extend EffectiveCost = todouble(round(EffectiveCost, 2))\n | extend ChargePeriod = iff(isempty(ChargePeriodStart), strcat('Total'), strcat(format_datetime(ChargePeriodStart, 'yyyy-MM - '), monthname[monthofyear(ChargePeriodStart)]))\n);\ndata | evaluate pivot(ChargePeriod, sum(EffectiveCost), ServiceCategory)\n| order by Total desc", "id": "85320475-730b-411f-98d5-fbc345bf5e68", - "usedVariables": ["numberOfMonths"] + "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "CostsByMonth\n//\n// Filter out commitment discount purchases\n| where ChargeCategory == 'Usage' or isempty(CommitmentDiscountId)\n//\n| summarize \n ListCost = sum(ListCost),\n ContractedCost = sum(ContractedCost),\n EffectiveCost = sum(EffectiveCost)\n by\n ChargePeriodStart = startofmonth(ChargePeriodStart),\n CommitmentDiscountType\n| project\n ChargePeriodStart,\n Savings = round(ListCost - EffectiveCost, 2),\n Type = case(\n isnotempty(CommitmentDiscountType), CommitmentDiscountType,\n 'Negotiated'\n )", "id": "5bbb5369-ac95-45fc-853c-a6a2ce6a9e7b", "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "CostsByMonth\n//\n// Filter out commitment discount purchases\n| where ChargeCategory == 'Usage' or isempty(CommitmentDiscountId)\n//\n| summarize \n Savings = round(sum(ListCost - EffectiveCost), 2)\n by\n Type = case(\n isnotempty(CommitmentDiscountType), CommitmentDiscountType,\n 'Negotiated'\n )", "id": "93f0eb9f-fa4d-4c54-96c2-8c1d3387d13a", "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "CostsByDay\n//\n// Filter out commitment discount purchases\n| where ChargeCategory == 'Usage' or isempty(CommitmentDiscountId)\n//\n| summarize \n ListCost = sum(ListCost),\n ContractedCost = sum(ContractedCost),\n EffectiveCost = sum(EffectiveCost)\n by\n ChargePeriodStart = startofday(ChargePeriodStart),\n CommitmentDiscountType\n| project\n ChargePeriodStart,\n Savings = round(ListCost - EffectiveCost, 2),\n Type = case(\n isnotempty(CommitmentDiscountType), CommitmentDiscountType,\n 'Negotiated'\n )", "id": "5c442903-65b0-4b53-9e7c-3ea9c1af7be5", "usedVariables": ["CostsByDay"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "CostsByDay\n//\n// Filter out commitment discount purchases\n| where ChargeCategory == 'Usage' or isempty(CommitmentDiscountId)\n//\n| summarize \n Savings = round(sum(ListCost - EffectiveCost), 2)\n by\n Type = case(\n isnotempty(CommitmentDiscountType), CommitmentDiscountType,\n 'Negotiated'\n )", "id": "9a9ee4b0-a37d-475f-bf1d-f51573243491", "usedVariables": ["CostsByDay"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nlet data = (\n CostsByMonth\n | where ChargeCategory == 'Usage'\n | where isnotempty(CommitmentDiscountId)\n | where EffectiveCost != 0\n | extend x_ResourceGroupId = strcat(SubAccountId, '/resourcegroups/', x_ResourceGroupName)\n | summarize \n EffectiveCost = sum(EffectiveCost),\n SubAccountName = take_any(SubAccountName),\n x_ResourceGroupName = take_any(x_ResourceGroupName),\n CommitmentDiscountName = take_any(CommitmentDiscountName),\n CommitmentDiscountType = take_any(CommitmentDiscountType)\n by\n ChargePeriodStart,\n SubAccountId,\n x_ResourceGroupId,\n CommitmentDiscountId\n | as per\n | union (\n per\n | summarize \n EffectiveCost = sum(EffectiveCost),\n SubAccountName = take_any(SubAccountName),\n x_ResourceGroupName = take_any(x_ResourceGroupName),\n CommitmentDiscountName = take_any(CommitmentDiscountName),\n CommitmentDiscountType = take_any(CommitmentDiscountType)\n by\n x_ResourceGroupId,\n CommitmentDiscountId\n )\n | order by ChargePeriodStart asc\n | extend EffectiveCost = todouble(round(EffectiveCost, 2))\n | extend ChargePeriod = iff(isempty(ChargePeriodStart), strcat('Total'), strcat(format_datetime(ChargePeriodStart, 'yyyy-MM - '), monthname[monthofyear(ChargePeriodStart)]))\n);\ndata | evaluate pivot(ChargePeriod, sum(EffectiveCost), x_ResourceGroupName, SubAccountName, CommitmentDiscountName, CommitmentDiscountType)\n| order by x_ResourceGroupName asc, SubAccountName asc, Total desc", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nlet data = (\n CostsByMonth\n | where ChargeCategory == 'Usage'\n | where isnotempty(CommitmentDiscountId)\n | where EffectiveCost != 0\n | extend x_ResourceGroupId = strcat(SubAccountId, '/resourcegroups/', x_ResourceGroupName)\n | summarize \n EffectiveCost = sum(EffectiveCost),\n SubAccountName = take_anyif(SubAccountName, isnotempty(SubAccountId)),\n x_ResourceGroupName = take_any(x_ResourceGroupName),\n CommitmentDiscountName = take_any(CommitmentDiscountName),\n CommitmentDiscountType = take_any(CommitmentDiscountType)\n by\n ChargePeriodStart,\n SubAccountId,\n x_ResourceGroupId,\n CommitmentDiscountId,\n CommitmentDiscountStatus\n | as per\n | union (\n per\n | summarize \n EffectiveCost = sum(EffectiveCost),\n SubAccountName = take_anyif(SubAccountName, isnotempty(SubAccountId)),\n x_ResourceGroupName = take_any(x_ResourceGroupName),\n CommitmentDiscountName = take_any(CommitmentDiscountName),\n CommitmentDiscountType = take_any(CommitmentDiscountType)\n by\n x_ResourceGroupId,\n CommitmentDiscountId,\n CommitmentDiscountStatus\n )\n | order by ChargePeriodStart asc\n | extend EffectiveCost = todouble(round(EffectiveCost, 2))\n | extend ChargePeriod = iff(isempty(ChargePeriodStart), strcat('Total'), strcat(format_datetime(ChargePeriodStart, 'yyyy-MM - '), monthname[monthofyear(ChargePeriodStart)]))\n | extend x_ResourceGroupName = iff(isempty(x_ResourceGroupName) and CommitmentDiscountStatus == 'Unused', '(Unused)', x_ResourceGroupName)\n | extend SubAccountName = iff(isempty(SubAccountName) and CommitmentDiscountStatus == 'Unused', '(Unused)', SubAccountName)\n);\npercent((\n data | evaluate pivot(ChargePeriod, sum(EffectiveCost), x_ResourceGroupName, SubAccountName, CommitmentDiscountName, CommitmentDiscountType)\n | extend Count = tolong(Total * 1000)\n))\n| project-away Count\n| order by x_ResourceGroupName asc, SubAccountName asc, Total desc", "id": "377e3693-0738-45d7-97d9-4b6e71ec5b36", "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nlet data = (\n CostsByMonth\n | where ChargeCategory == 'Usage'\n | where isnotempty(CommitmentDiscountId)\n | where EffectiveCost != 0\n | summarize \n BilledCost = sum(BilledCost),\n EffectiveCost = sum(EffectiveCost),\n ContractedCost = sum(ContractedCost),\n ListCost = sum(ListCost),\n SubAccountName = take_any(SubAccountName),\n CommitmentDiscountName = take_any(CommitmentDiscountName),\n CommitmentDiscountType = take_any(CommitmentDiscountType)\n by\n ChargePeriodStart,\n SubAccountId,\n CommitmentDiscountId\n | as per\n | union (\n per\n | summarize \n BilledCost = sum(BilledCost),\n EffectiveCost = sum(EffectiveCost),\n ContractedCost = sum(ContractedCost),\n ListCost = sum(ListCost),\n SubAccountName = take_any(SubAccountName),\n CommitmentDiscountName = take_any(CommitmentDiscountName),\n CommitmentDiscountType = take_any(CommitmentDiscountType)\n by\n SubAccountId,\n CommitmentDiscountId\n )\n | order by ChargePeriodStart asc\n | extend BilledCost = todouble(round(BilledCost, 2))\n | extend EffectiveCost = todouble(round(EffectiveCost, 2))\n | extend ContractedCost = todouble(round(ContractedCost, 2))\n | extend ListCost = todouble(round(ListCost, 2))\n | extend CommitmentDiscountSavings = todouble(round(ContractedCost - EffectiveCost, 2))\n | extend NegotiatedDiscountSavings = todouble(round(ListCost - ContractedCost, 2))\n | extend ChargePeriod = iff(isempty(ChargePeriodStart), strcat('Total'), strcat(format_datetime(ChargePeriodStart, 'yyyy-MM - '), monthname[monthofyear(ChargePeriodStart)]))\n);\ndata | evaluate pivot(ChargePeriod, sum(EffectiveCost), SubAccountName, CommitmentDiscountName, CommitmentDiscountType)\n| order by SubAccountName asc, Total desc", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nlet data = (\n CostsByMonth\n | where ChargeCategory == 'Usage'\n | where isnotempty(CommitmentDiscountId)\n | where EffectiveCost != 0\n | summarize \n BilledCost = sum(BilledCost),\n EffectiveCost = sum(EffectiveCost),\n ContractedCost = sum(ContractedCost),\n ListCost = sum(ListCost),\n SubAccountName = take_anyif(SubAccountName, isnotempty(SubAccountId)),\n CommitmentDiscountName = take_any(CommitmentDiscountName),\n CommitmentDiscountType = take_any(CommitmentDiscountType)\n by\n ChargePeriodStart,\n SubAccountId,\n CommitmentDiscountId,\n CommitmentDiscountStatus\n | as per\n | union (\n per\n | summarize \n BilledCost = sum(BilledCost),\n EffectiveCost = sum(EffectiveCost),\n ContractedCost = sum(ContractedCost),\n ListCost = sum(ListCost),\n SubAccountName = take_anyif(SubAccountName, isnotempty(SubAccountId)),\n CommitmentDiscountName = take_any(CommitmentDiscountName),\n CommitmentDiscountType = take_any(CommitmentDiscountType)\n by\n SubAccountId,\n CommitmentDiscountId,\n CommitmentDiscountStatus\n )\n | order by ChargePeriodStart asc\n | extend BilledCost = todouble(round(BilledCost, 2))\n | extend EffectiveCost = todouble(round(EffectiveCost, 2))\n | extend ContractedCost = todouble(round(ContractedCost, 2))\n | extend ListCost = todouble(round(ListCost, 2))\n | extend CommitmentDiscountSavings = todouble(round(ContractedCost - EffectiveCost, 2))\n | extend NegotiatedDiscountSavings = todouble(round(ListCost - ContractedCost, 2))\n | extend ChargePeriod = iff(isempty(ChargePeriodStart), strcat('Total'), strcat(format_datetime(ChargePeriodStart, 'yyyy-MM - '), monthname[monthofyear(ChargePeriodStart)]))\n | extend SubAccountName = iff(isempty(SubAccountName) and CommitmentDiscountStatus == 'Unused', '(Unused)', SubAccountName)\n);\npercent((\n data | evaluate pivot(ChargePeriod, sum(EffectiveCost), SubAccountName, CommitmentDiscountName, CommitmentDiscountType)\n | extend Count = tolong(Total * 1000)\n))\n| project-away Count\n| order by SubAccountName asc, Total desc", "id": "13cad52d-91e7-4ab4-aad5-4aae21c1019a", "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "CostsByDay\n| where ChargeCategory == 'Usage'\n| where isnotempty(CommitmentDiscountId)\n| where EffectiveCost != 0\n| summarize \n EffectiveCost = sum(EffectiveCost),\n ResourceName = take_any(ResourceName),\n ResourceType = take_any(ResourceType),\n RegionName = take_any(RegionName),\n x_ResourceGroupName = take_any(x_ResourceGroupName),\n SubAccountName = take_any(SubAccountName),\n CommitmentDiscountName = take_any(CommitmentDiscountName),\n CommitmentDiscountType = take_any(CommitmentDiscountType)\n by\n ResourceId,\n CommitmentDiscountId\n| project \n CommitmentDiscountType,\n CommitmentDiscountName,\n ResourceName,\n ResourceType,\n RegionName,\n x_ResourceGroupName,\n SubAccountName,\n EffectiveCost = round(EffectiveCost, 2)\n| order by CommitmentDiscountType asc, CommitmentDiscountName asc, ResourceName asc, ResourceType asc, x_ResourceGroupName asc, SubAccountName asc, EffectiveCost desc", "id": "dcf69b47-233e-4bc4-b914-3f6f09f4cb82", "usedVariables": ["CostsByDay"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let costs = CostsByMonth\n| extend x_ToolkitTool = tostring(Tags['ftk-tool'])\n| where x_ToolkitTool == 'FinOps hubs'\n| extend x_ToolkitVersion = tostring(Tags['ftk-version'])\n| extend x_ResourceParentId = tostring(Tags['cm-resource-parent'])\n| extend x_ResourceParentName = database('Ingestion').parse_resourceid(x_ResourceParentId).ResourceName\n;\nlet all = costs | summarize sum(EffectiveCost) by x_ResourceParentId;\nlet count = toscalar(all | order by sum_EffectiveCost desc | count);\nlet topX = all | order by sum_EffectiveCost desc | limit maxGroupCount;\nlet otherId = '(others)';\ncosts\n//\n// Group rows after max count\n| extend inTopX = x_ResourceParentId in (topX)\n| extend x_ResourceParentId = iff(inTopX, x_ResourceParentId, otherId)\n| extend x_ResourceParentName = iff(inTopX, x_ResourceParentName, strcat('(', (count - maxGroupCount), ' others)'))\n//\n| summarize \n EffectiveCost = round(sum(EffectiveCost), 2),\n ResourceType = take_any(ResourceType),\n x_ResourceParentName = take_any(x_ResourceParentName),\n x_ResourceGroupName = take_any(x_ResourceGroupName),\n SubAccountName = take_any(SubAccountName)\n by\n ChargePeriodStart,\n x_ResourceParentId\n| project ChargePeriodStart, EffectiveCost, Hub = iff(x_ResourceParentId == otherId, x_ResourceParentName, strcat(x_ResourceParentName, ' (', x_ResourceGroupName, ' / ', SubAccountName, ')'))\n| order by EffectiveCost desc\n", "id": "d7a9ff96-da17-4826-9fb5-b23f4c7b938d", "usedVariables": ["CostsByMonth", "maxGroupCount"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let costs = CostsByDay\n| extend x_ToolkitTool = tostring(Tags['ftk-tool'])\n| where x_ToolkitTool == 'FinOps hubs'\n| extend x_ToolkitVersion = tostring(Tags['ftk-version'])\n| extend x_ResourceParentId = tostring(Tags['cm-resource-parent'])\n| extend x_ResourceParentName = database('Ingestion').parse_resourceid(x_ResourceParentId).ResourceName\n;\nlet all = costs | summarize sum(EffectiveCost) by x_ResourceParentId;\nlet count = toscalar(all | order by sum_EffectiveCost desc | count);\nlet topX = all | order by sum_EffectiveCost desc | limit maxGroupCount;\nlet otherId = '(others)';\ncosts\n//\n// Group rows after max count\n| extend inTopX = x_ResourceParentId in (topX)\n| extend x_ResourceParentId = iff(inTopX, x_ResourceParentId, otherId)\n| extend x_ResourceParentName = iff(inTopX, x_ResourceParentName, strcat('(', (count - maxGroupCount), ' others)'))\n//\n| summarize \n EffectiveCost = round(sum(EffectiveCost), 2),\n ResourceType = take_any(ResourceType),\n x_ResourceParentName = take_any(x_ResourceParentName),\n x_ResourceGroupName = take_any(x_ResourceGroupName),\n SubAccountName = take_any(SubAccountName)\n by\n ChargePeriodStart,\n x_ResourceParentId\n| project ChargePeriodStart, EffectiveCost, Hub = iff(x_ResourceParentId == otherId, x_ResourceParentName, strcat(x_ResourceParentName, ' (', x_ResourceGroupName, ' / ', SubAccountName, ')'))\n| order by EffectiveCost desc\n", "id": "13813a00-e634-4428-9eac-ea255fd1eaca", "usedVariables": ["CostsByDay", "maxGroupCount"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let monthname = dynamic(['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nlet costs = CostsByMonth\n| extend x_ToolkitTool = tostring(Tags['ftk-tool'])\n| where x_ToolkitTool == 'FinOps hubs'\n| extend x_ToolkitVersion = tostring(Tags['ftk-version'])\n| extend x_ResourceParentId = tostring(Tags['cm-resource-parent'])\n| extend x_ResourceParentName = tostring(database('Ingestion').parse_resourceid(x_ResourceParentId).ResourceName)\n;\nlet data = (\n costs\n | summarize \n EffectiveCost = sum(EffectiveCost),\n x_ResourceParentName = take_any(x_ResourceParentName),\n RegionName = take_any(RegionName),\n x_ResourceGroupName = take_any(x_ResourceGroupName),\n SubAccountName = take_any(SubAccountName),\n x_ToolkitVersion = take_any(x_ToolkitVersion)\n by\n ChargePeriodStart,\n x_ResourceParentId\n | as per\n //\n // Append total\n | union (\n per\n | summarize \n EffectiveCost = sum(EffectiveCost)\n by\n x_ResourceParentId,\n x_ResourceParentName,\n x_ToolkitVersion,\n RegionName,\n x_ResourceGroupName,\n SubAccountName\n )\n | order by ChargePeriodStart asc\n | extend EffectiveCost = todouble(round(EffectiveCost, 2))\n | extend ChargePeriod = iff(isempty(ChargePeriodStart), strcat('Total'), strcat(format_datetime(ChargePeriodStart, 'yyyy-MM - '), monthname[monthofyear(ChargePeriodStart)]))\n);\ndata | evaluate pivot(ChargePeriod, sum(EffectiveCost), x_ResourceParentName, x_ToolkitVersion, RegionName, x_ResourceGroupName, SubAccountName)\n| project-rename Name = x_ResourceParentName, Version = x_ToolkitVersion\n| order by Total desc\n", "id": "62bbceee-c089-45db-822c-0b4745358aa4", "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": ".show cluster extents\n| where TableName contains '_final_v'\n| extend Dataset = tostring(split(TableName, '_final_v')[0])\n| extend FocusVersion = replace_string(tostring(split(TableName, '_final_v')[1]), '_', '.')\n| extend ToolkitVersion = tostring(extract(@'drop-by:ftk-version-([^\\s]+)', 1, Tags))\n// | extend Table = tostring(extract(@'drop-by:([^/\\s]+)(/[0-9]{4}(/[0-9]{2}(/[0-9]{2})?)?)?(/[^\\s]+)', 1, Tags))\n| extend Date = tostring(extract(@'drop-by:([^/\\s]+)(/[0-9]{4}(/[0-9]{2}(/[0-9]{2})?)?)?(/[^\\s]+)', 2, Tags))\n| extend Scope = tostring(extract(@'drop-by:([^/\\s]+)(/[0-9]{4}(/[0-9]{2}(/[0-9]{2})?)?)?(/[^\\s]+)', 5, Tags))\n| extend Date = todatetime(strcat(replace_string(trim(@'/', Date), '/', '-'), '-01'))\n| extend Scope = replace_regex(Scope, @'/[^/]+$', '')\n| project Dataset, FocusVersion, ToolkitVersion, Date, Scope, LastUpdate = MaxCreatedOn, OriginalSize, RowCount\n| extend ScopeId = database('Ingestion').parse_resourceid(Scope).ResourceName\n// TODO: Look up the name from cost data\n| extend ScopeResourceType = database('Ingestion').parse_resourceid(Scope).x_ResourceType\n// TODO: Clean up scope resource type display names -- | extend ScopeType = resource_type(ScopeResourceType).SingularDisplayName\n| summarize Rows = sum(RowCount) by Date, Dataset", "id": "b98c9ed7-47b3-41c1-a596-fd9d32725b33", "usedVariables": [] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": ".show cluster extents\n| where TableName contains '_final_v'\n| extend Dataset = tostring(split(TableName, '_final_v')[0])\n| where Dataset == 'Costs'\n| extend FocusVersion = replace_string(tostring(split(TableName, '_final_v')[1]), '_', '.')\n| extend ToolkitVersion = tostring(extract(@'drop-by:ftk-version-([^\\s]+)', 1, Tags))\n// | extend Table = tostring(extract(@'drop-by:([^/\\s]+)(/[0-9]{4}(/[0-9]{2}(/[0-9]{2})?)?)?(/[^\\s]+)', 1, Tags))\n| extend Date = tostring(extract(@'drop-by:([^/\\s]+)(/[0-9]{4}(/[0-9]{2}(/[0-9]{2})?)?)?(/[^\\s]+)', 2, Tags))\n| extend Scope = tostring(extract(@'drop-by:([^/\\s]+)(/[0-9]{4}(/[0-9]{2}(/[0-9]{2})?)?)?(/[^\\s]+)', 5, Tags))\n| extend Date = todatetime(strcat(replace_string(trim(@'/', Date), '/', '-'), '-01'))\n| extend Scope = replace_regex(Scope, @'/[^/]+$', '')\n| project Dataset, FocusVersion, ToolkitVersion, Date, Scope, LastUpdate = MaxCreatedOn, OriginalSize, RowCount\n| extend ScopeId = tostring(database('Ingestion').parse_resourceid(Scope).ResourceName)\n| extend ScopeResourceType = database('Ingestion').parse_resourceid(Scope).x_ResourceType\n// TODO: Clean up scope resource type display names -- | extend ScopeType = resource_type(ScopeResourceType).SingularDisplayName\n| summarize Rows = sum(RowCount) by Date, ScopeId", "id": "187e22fe-3d78-45a2-a2bf-090ece144fd1", "usedVariables": [] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": ".show cluster extents\n| where TableName contains '_final_v'\n| extend Dataset = tostring(split(TableName, '_final_v')[0])\n| where Dataset == 'Costs'\n| extend FocusVersion = replace_string(tostring(split(TableName, '_final_v')[1]), '_', '.')\n| extend ToolkitVersion = tostring(extract(@'drop-by:ftk-version-([^\\s]+)', 1, Tags))\n// | extend Table = tostring(extract(@'drop-by:([^/\\s]+)(/[0-9]{4}(/[0-9]{2}(/[0-9]{2})?)?)?(/[^\\s]+)', 1, Tags))\n| extend Date = tostring(extract(@'drop-by:([^/\\s]+)(/[0-9]{4}(/[0-9]{2}(/[0-9]{2})?)?)?(/[^\\s]+)', 2, Tags))\n| extend Scope = tostring(extract(@'drop-by:([^/\\s]+)(/[0-9]{4}(/[0-9]{2}(/[0-9]{2})?)?)?(/[^\\s]+)', 5, Tags))\n| extend Date = todatetime(strcat(replace_string(trim(@'/', Date), '/', '-'), '-01'))\n| extend Scope = replace_regex(Scope, @'/[^/]+$', '')\n| project Dataset, FocusVersion, ToolkitVersion, Date, Scope, LastUpdate = MaxCreatedOn, OriginalSize, RowCount\n| extend ScopeId = tostring(database('Ingestion').parse_resourceid(Scope).ResourceName)\n// TODO: Look up the name from cost data\n| extend ScopeResourceType = database('Ingestion').parse_resourceid(Scope).x_ResourceType\n// TODO: Clean up scope resource type display names -- | extend ScopeType = resource_type(ScopeResourceType).SingularDisplayName\n| summarize dcount(Scope)", "id": "d2c522dc-ef4b-4714-a473-09350e275557", "usedVariables": [] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": ".show cluster extents\n| where TableName contains '_final_v'\n| extend Dataset = tostring(split(TableName, '_final_v')[0])\n| where Dataset == 'Costs'\n| extend FocusVersion = replace_string(tostring(split(TableName, '_final_v')[1]), '_', '.')\n| extend ToolkitVersion = tostring(extract(@'drop-by:ftk-version-([^\\s]+)', 1, Tags))\n// | extend Table = tostring(extract(@'drop-by:([^/\\s]+)(/[0-9]{4}(/[0-9]{2}(/[0-9]{2})?)?)?(/[^\\s]+)', 1, Tags))\n| extend Date = tostring(extract(@'drop-by:([^/\\s]+)(/[0-9]{4}(/[0-9]{2}(/[0-9]{2})?)?)?(/[^\\s]+)', 2, Tags))\n| extend Scope = tostring(extract(@'drop-by:([^/\\s]+)(/[0-9]{4}(/[0-9]{2}(/[0-9]{2})?)?)?(/[^\\s]+)', 5, Tags))\n| extend Date = todatetime(strcat(replace_string(trim(@'/', Date), '/', '-'), '-01'))\n| extend Scope = replace_regex(Scope, @'/[^/]+$', '')\n| project Dataset, FocusVersion, ToolkitVersion, Date, Scope, LastUpdate = MaxCreatedOn, OriginalSize, RowCount\n| extend ScopeId = tostring(database('Ingestion').parse_resourceid(Scope).ResourceName)\n// TODO: Look up the name from cost data\n| extend ScopeResourceType = database('Ingestion').parse_resourceid(Scope).x_ResourceType\n// TODO: Clean up scope resource type display names -- | extend ScopeType = resource_type(ScopeResourceType).SingularDisplayName\n| summarize dcount(startofmonth(Date))", "id": "6fe11b78-82ef-4e9a-8411-a65e5b0d8bba", "usedVariables": [] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": ".show cluster extents\n| where TableName contains '_final_v'\n| extend Dataset = tostring(split(TableName, '_final_v')[0])\n| where Dataset == 'Prices'\n| extend FocusVersion = replace_string(tostring(split(TableName, '_final_v')[1]), '_', '.')\n| extend ToolkitVersion = tostring(extract(@'drop-by:ftk-version-([^\\s]+)', 1, Tags))\n// | extend Table = tostring(extract(@'drop-by:([^/\\s]+)(/[0-9]{4}(/[0-9]{2}(/[0-9]{2})?)?)?(/[^\\s]+)', 1, Tags))\n| extend Date = tostring(extract(@'drop-by:([^/\\s]+)(/[0-9]{4}(/[0-9]{2}(/[0-9]{2})?)?)?(/[^\\s]+)', 2, Tags))\n| extend Scope = tostring(extract(@'drop-by:([^/\\s]+)(/[0-9]{4}(/[0-9]{2}(/[0-9]{2})?)?)?(/[^\\s]+)', 5, Tags))\n| extend Date = todatetime(strcat(replace_string(trim(@'/', Date), '/', '-'), '-01'))\n| extend Scope = replace_regex(Scope, @'/[^/]+$', '')\n| project Dataset, FocusVersion, ToolkitVersion, Date, Scope, LastUpdate = MaxCreatedOn, OriginalSize, RowCount\n| extend ScopeId = tostring(database('Ingestion').parse_resourceid(Scope).ResourceName)\n// TODO: Look up the name from cost data\n| extend ScopeResourceType = database('Ingestion').parse_resourceid(Scope).x_ResourceType\n// TODO: Clean up scope resource type display names -- | extend ScopeType = resource_type(ScopeResourceType).SingularDisplayName\n| summarize Rows = sum(RowCount) by Date, ScopeId", "id": "b3621977-59be-4f98-a034-a94479612115", "usedVariables": [] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": ".show cluster extents\n| where TableName contains '_final_v'\n| extend Dataset = tostring(split(TableName, '_final_v')[0])\n| where Dataset == 'Recommendations'\n| extend FocusVersion = replace_string(tostring(split(TableName, '_final_v')[1]), '_', '.')\n| extend ToolkitVersion = tostring(extract(@'drop-by:ftk-version-([^\\s]+)', 1, Tags))\n// | extend Table = tostring(extract(@'drop-by:([^/\\s]+)(/[0-9]{4}(/[0-9]{2}(/[0-9]{2})?)?)?(/[^\\s]+)', 1, Tags))\n| extend Date = tostring(extract(@'drop-by:([^/\\s]+)(/[0-9]{4}(/[0-9]{2}(/[0-9]{2})?)?)?(/[^\\s]+)', 2, Tags))\n| extend Scope = tostring(extract(@'drop-by:([^/\\s]+)(/[0-9]{4}(/[0-9]{2}(/[0-9]{2})?)?)?(/[^\\s]+)', 5, Tags))\n| extend Date = todatetime(strcat(replace_string(trim(@'/', Date), '/', '-'), '-01'))\n| extend Scope = replace_regex(Scope, @'/[^/]+$', '')\n| project Dataset, FocusVersion, ToolkitVersion, Date, Scope, LastUpdate = MaxCreatedOn, OriginalSize, RowCount\n| extend ScopeId = tostring(database('Ingestion').parse_resourceid(Scope).ResourceName)\n// TODO: Look up the name from cost data\n| extend ScopeResourceType = database('Ingestion').parse_resourceid(Scope).x_ResourceType\n// TODO: Clean up scope resource type display names -- | extend ScopeType = resource_type(ScopeResourceType).SingularDisplayName\n| summarize Rows = sum(RowCount) by Date, ScopeId", "id": "4a2a77fe-e819-4059-b027-dab0a1770a0a", "usedVariables": [] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": ".show cluster extents\n| where TableName contains '_final_v'\n| extend Dataset = tostring(split(TableName, '_final_v')[0])\n| where Dataset == 'Transactions'\n| extend FocusVersion = replace_string(tostring(split(TableName, '_final_v')[1]), '_', '.')\n| extend ToolkitVersion = tostring(extract(@'drop-by:ftk-version-([^\\s]+)', 1, Tags))\n// | extend Table = tostring(extract(@'drop-by:([^/\\s]+)(/[0-9]{4}(/[0-9]{2}(/[0-9]{2})?)?)?(/[^\\s]+)', 1, Tags))\n| extend Date = tostring(extract(@'drop-by:([^/\\s]+)(/[0-9]{4}(/[0-9]{2}(/[0-9]{2})?)?)?(/[^\\s]+)', 2, Tags))\n| extend Scope = tostring(extract(@'drop-by:([^/\\s]+)(/[0-9]{4}(/[0-9]{2}(/[0-9]{2})?)?)?(/[^\\s]+)', 5, Tags))\n| extend Date = todatetime(strcat(replace_string(trim(@'/', Date), '/', '-'), '-01'))\n| extend Scope = replace_regex(Scope, @'/[^/]+$', '')\n| project Dataset, FocusVersion, ToolkitVersion, Date, Scope, LastUpdate = MaxCreatedOn, OriginalSize, RowCount\n| extend ScopeId = tostring(database('Ingestion').parse_resourceid(Scope).ResourceName)\n// TODO: Look up the name from cost data\n| extend ScopeResourceType = database('Ingestion').parse_resourceid(Scope).x_ResourceType\n// TODO: Clean up scope resource type display names -- | extend ScopeType = resource_type(ScopeResourceType).SingularDisplayName\n| summarize Rows = sum(RowCount) by Date, ScopeId", "id": "8f1ad1ef-6f5e-4f20-a1c4-3941e871d0cd", "usedVariables": [] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": ".show cluster extents\n| where TableName contains '_final_v'\n| extend Dataset = tostring(split(TableName, '_final_v')[0])\n| where Dataset == 'CommitmentDiscountUsage'\n| extend FocusVersion = replace_string(tostring(split(TableName, '_final_v')[1]), '_', '.')\n| extend ToolkitVersion = tostring(extract(@'drop-by:ftk-version-([^\\s]+)', 1, Tags))\n// | extend Table = tostring(extract(@'drop-by:([^/\\s]+)(/[0-9]{4}(/[0-9]{2}(/[0-9]{2})?)?)?(/[^\\s]+)', 1, Tags))\n| extend Date = tostring(extract(@'drop-by:([^/\\s]+)(/[0-9]{4}(/[0-9]{2}(/[0-9]{2})?)?)?(/[^\\s]+)', 2, Tags))\n| extend Scope = tostring(extract(@'drop-by:([^/\\s]+)(/[0-9]{4}(/[0-9]{2}(/[0-9]{2})?)?)?(/[^\\s]+)', 5, Tags))\n| extend Date = todatetime(strcat(replace_string(trim(@'/', Date), '/', '-'), '-01'))\n| extend Scope = replace_regex(Scope, @'/[^/]+$', '')\n| project Dataset, FocusVersion, ToolkitVersion, Date, Scope, LastUpdate = MaxCreatedOn, OriginalSize, RowCount\n| extend ScopeId = tostring(database('Ingestion').parse_resourceid(Scope).ResourceName)\n// TODO: Look up the name from cost data\n| extend ScopeResourceType = database('Ingestion').parse_resourceid(Scope).x_ResourceType\n// TODO: Clean up scope resource type display names -- | extend ScopeType = resource_type(ScopeResourceType).SingularDisplayName\n| summarize Rows = sum(RowCount) by Date, ScopeId", "id": "e9a9a135-6a74-4463-b69f-eac6930ff1f2", "usedVariables": [] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let costs = CostsByDayAHB\n| where isnotempty(x_SkuLicenseStatus)\n//\n// Get the latest resource record first to guarrantee we have the latest status\n| summarize arg_max(ChargePeriodStart, *) by ResourceId\n| summarize\n x_ResourceCount = dcount(ResourceId),\n x_SkuLicenseUnusedQuantity = sum(x_SkuLicenseUnusedQuantity)\n by\n x_SkuLicenseStatus,\n x_SkuLicenseQuantity,\n x_SkuCoreCount\n| union (\n print json = dynamic([\n { \"x_SkuLicenseStatus\": \"Enabled\" },\n { \"x_SkuLicenseStatus\": \"Not Enabled\" }\n ])\n | mv-expand json\n | evaluate bag_unpack(json)\n);\n//\n// Coverage first\ncosts\n| summarize covered = sumif(x_ResourceCount, x_SkuLicenseStatus == 'Enabled'), all = sum(x_ResourceCount)\n| project Order = 1, Label = 'Coverage %', Value = percentstring(covered, all, 1)\n//\n// First column\n| union (costs | where x_SkuLicenseStatus == 'Enabled' | summarize Value = numberstring(sum(x_ResourceCount)) by Order = 3, Label = 'Covered resources')\n| union (costs | where x_SkuLicenseStatus == 'Not Enabled' | summarize Value = numberstring(sum(x_ResourceCount)) by Order = 5, Label = 'Eligible resources')\n//\n// Second column\n| union (costs | where x_SkuLicenseStatus == 'Enabled' | summarize Value = numberstring(sum(x_SkuLicenseUnusedQuantity)) by Order = 2, Label = 'Underutilized vCPU capacity')\n| union (costs | where x_SkuLicenseStatus == 'Enabled' | summarize Value = numberstring(sum(x_SkuLicenseQuantity)) by Order = 4, Label = 'Covered vCPU capacity')\n| union (costs | where x_SkuLicenseStatus == 'Not Enabled' | summarize Value = numberstring(sum(x_SkuLicenseQuantity)) by Order = 6, Label = 'Eligible vCPU capacity')\n| order by Order asc\n", "id": "1a400b6c-9204-434d-88ff-2dc5260a95bf", "usedVariables": ["CostsByDayAHB"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "// Underutilized capacity\n// Fully utilized capacity\n// Eligible resources\nCostsByDayAHB\n| where x_SkuLicenseStatus == 'Enabled'\n//\n// Get the latest resource record first to guarrantee we have the latest status\n| summarize\n arg_max(ChargePeriodStart, *),\n TotalConsumedQuantity = sum(ConsumedQuantity),\n TotalEffectiveCost = sum(EffectiveCost)\n by\n ResourceId\n| project \n [\"License type\"] = x_SkuLicenseType,\n ResourceName,\n ResourceType,\n SKU = x_SkuType,\n [\"SKU cores\"] = x_SkuCoreCount,\n [\"Required capacity\"] = x_SkuLicenseQuantity,\n [\"Unused capacity\"] = x_SkuLicenseUnusedQuantity,\n [\"Unused vCore hours\"] = x_SkuLicenseUnusedQuantity * ConsumedQuantity,\n EffectiveCost = TotalEffectiveCost,\n x_ResourceGroupName,\n SubAccountName\n| order by [\"Unused vCore hours\"] desc\n", "id": "c2ad5370-f4df-4a13-ac31-2c095f88754d", "usedVariables": ["CostsByDayAHB"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "CostsByDayAHB\n| where x_SkuLicenseStatus == 'Enabled'\n| where x_SkuLicenseUnusedQuantity == 0\n//\n// Get the latest resource record first to guarrantee we have the latest status\n| summarize\n arg_max(ChargePeriodStart, *),\n TotalConsumedQuantity = sum(ConsumedQuantity),\n TotalEffectiveCost = sum(EffectiveCost)\n by\n ResourceId\n| project \n [\"License type\"] = x_SkuLicenseType,\n ResourceName,\n ResourceType,\n SKU = x_SkuType,\n [\"SKU cores\"] = x_SkuCoreCount,\n [\"vCore hours\"] = x_SkuLicenseQuantity * ConsumedQuantity,\n EffectiveCost = TotalEffectiveCost,\n x_ResourceGroupName,\n SubAccountName\n| order by [\"vCore hours\"] desc\n", "id": "4614acfb-2288-4a71-97f7-32845a9ddcb2", "usedVariables": ["CostsByDayAHB"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "CostsByDayAHB\n| where x_SkuLicenseStatus == 'Not Enabled'\n//\n// Get the latest resource record first to guarrantee we have the latest status\n| summarize\n arg_max(ChargePeriodStart, *),\n TotalConsumedQuantity = sum(ConsumedQuantity),\n TotalEffectiveCost = sum(EffectiveCost)\n by\n ResourceId\n| project \n [\"License type\"] = x_SkuLicenseType,\n ResourceName,\n ResourceType,\n SKU = x_SkuType,\n [\"SKU cores\"] = x_SkuCoreCount,\n [\"Required capacity\"] = x_SkuLicenseQuantity,\n [\"Eligible vCore hours\"] = x_SkuLicenseQuantity * ConsumedQuantity,\n EffectiveCost = TotalEffectiveCost,\n x_ResourceGroupName,\n SubAccountName\n| order by [\"Eligible vCore hours\"] desc\n", "id": "99d44f1f-c53a-40ee-b749-8e5557ec58c7", "usedVariables": ["CostsByDayAHB"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "let costs = Costs_v1_0 | where ChargePeriodStart >= startofmonth(now(), -3) and ChargePeriodStart < startofday(ago(-1d));\nlet startOfPeriod = toscalar(costs | summarize min(startofday(ChargePeriodStart)));\nlet endOfPeriod = toscalar(costs | summarize max(startofday(ChargePeriodStart)));\nlet forecastHorizon = numberOfDays * 1d;\ncosts\n| make-series\n EffectiveCost = sum(EffectiveCost)\n on ChargePeriodStart\n from startOfPeriod to endOfPeriod + forecastHorizon step 1d\n // by SubAccountId\n| extend Forecast = series_decompose_forecast(EffectiveCost, numberOfDays)\n", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "let costs = CostsPlus | where ChargePeriodStart >= startofmonth(now(), -3) and ChargePeriodStart < startofday(ago(-1d));\nlet startOfPeriod = toscalar(costs | summarize min(startofday(ChargePeriodStart)));\nlet endOfPeriod = toscalar(costs | summarize max(startofday(ChargePeriodStart)));\nlet forecastHorizon = numberOfDays * 1d;\ncosts\n| make-series\n EffectiveCost = sum(EffectiveCost)\n on ChargePeriodStart\n from startOfPeriod to endOfPeriod + forecastHorizon step 1d\n // by SubAccountId\n| extend Forecast = series_decompose_forecast(EffectiveCost, numberOfDays)\n", "id": "5fd3ea2a-8882-4438-9103-fa3945240604", - "usedVariables": ["numberOfDays"] + "usedVariables": ["CostsPlus", "numberOfDays"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "let data = materialize(\n CostsPlus\n //\n // Don't double-count commitment discount purchases\n | where x_AmortizationCategory != 'Principal'\n //\n | summarize \n ListCost = sum(ListCost),\n ContractedCost = sum(ContractedCost),\n EffectiveCost = sum(EffectiveCost)\n | extend TotalSavings = ListCost - EffectiveCost\n | extend EffectiveSavingsRate = TotalSavings / ListCost\n | project json = todynamic(strcat('[',\n '{ \"order\":11, \"type\":\"TotalSavings\", \"label\":\"Total savings\", \"value\":\"', numberstring(round(TotalSavings, 2)), '\" },',\n '{ \"order\":12, \"type\":\"\", \"label\":\"\", \"value\":\"➗\" },',\n '{ \"order\":13, \"type\":\"List\", \"label\":\"Cost without discounts\", \"value\":\"', numberstring(round(ListCost, 2)), '\" },',\n '{ \"order\":14, \"type\":\"\", \"label\":\"\", \"value\":\"🟰\" },',\n '{ \"order\":15, \"type\":\"EffectiveSavingsRate\", \"label\":\"Effective savings rate\", \"value\":\"', percentstring(EffectiveSavingsRate), '\" }',\n ']'))\n | mv-expand json\n | order by toint(json.order) asc\n | project Label = tostring(json.label), Value = tostring(json.value), Type = tostring(json.type)\n);\ndata", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "let data = materialize(\n CostsByMonth\n //\n // Don't double-count commitment discount purchases\n | where x_AmortizationCategory != 'Principal'\n //\n | summarize \n ListCost = sum(ListCost),\n ContractedCost = sum(ContractedCost),\n EffectiveCost = sum(EffectiveCost)\n | extend TotalSavings = ListCost - EffectiveCost\n | extend EffectiveSavingsRate = TotalSavings / ListCost\n | project json = todynamic(strcat('[',\n '{ \"order\":11, \"type\":\"TotalSavings\", \"label\":\"Total savings\", \"value\":\"', numberstring(round(TotalSavings, 2)), '\" },',\n '{ \"order\":12, \"type\":\"\", \"label\":\"\", \"value\":\"➗\" },',\n '{ \"order\":13, \"type\":\"List\", \"label\":\"Cost without discounts\", \"value\":\"', numberstring(round(ListCost, 2)), '\" },',\n '{ \"order\":14, \"type\":\"\", \"label\":\"\", \"value\":\"🟰\" },',\n '{ \"order\":15, \"type\":\"EffectiveSavingsRate\", \"label\":\"Effective savings rate\", \"value\":\"', percentstring(EffectiveSavingsRate), '\" }',\n ']'))\n | mv-expand json\n | order by toint(json.order) asc\n | project Label = tostring(json.label), Value = tostring(json.value), Type = tostring(json.type)\n);\ndata", "id": "e1bc2d51-44af-4dd9-8b0d-a71088b551f5", - "usedVariables": ["CostsPlus"] + "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "CostsByMonth\n| extend x_AmortizationCategory = case(\n ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountCategory), 'Principal',\n isnotempty(CommitmentDiscountCategory), 'Amortized Charge',\n ''\n)\n| extend x_CommitmentDiscountSavings = iff(ContractedCost == 0, decimal(0), ContractedCost - EffectiveCost)\n| extend x_NegotiatedDiscountSavings = iff(ListCost == 0, decimal(0), ListCost - ContractedCost)\n| extend x_TotalSavings = iff(ListCost == 0, decimal(0), ListCost - EffectiveCost)\n| summarize\n ['On-demand'] = round(sumif(EffectiveCost, x_PricingSubcategory == 'Standard'), 2),\n Spot = round(sumif(EffectiveCost, x_PricingSubcategory == 'Spot'), 2),\n Reservation = round(sumif(EffectiveCost, CommitmentDiscountType == 'Reservation'), 2),\n ['Savings plan'] = round(sumif(EffectiveCost, CommitmentDiscountType == 'Savings Plan'), 2),\n ['Total cost'] = round(sum(EffectiveCost), 2),\n ['List cost'] = round(sumif(ListCost, x_AmortizationCategory != 'Principal'), 2),\n Savings = round(sum(x_TotalSavings), 2)\n by\n Account = x_BillingProfileId,\n Month = substring(startofmonth(ChargePeriodStart), 0, 7)\n| extend ESR = percentstring(Savings/ ['List cost'])\n| order by Month desc", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "CostsByMonth\n| extend x_AmortizationCategory = case(\n ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountCategory), 'Principal',\n isnotempty(CommitmentDiscountCategory), 'Amortized Charge',\n ''\n)\n| extend x_CommitmentDiscountSavings = iff(ContractedCost == 0, decimal(0), ContractedCost - EffectiveCost)\n| extend x_NegotiatedDiscountSavings = iff(ListCost == 0, decimal(0), ListCost - ContractedCost)\n| extend x_TotalSavings = iff(ListCost == 0, decimal(0), ListCost - EffectiveCost)\n| summarize\n ['List cost'] = round(sumif(ListCost, x_AmortizationCategory != 'Principal'), 2),\n ['Effective cost'] = round(sum(EffectiveCost), 2),\n Savings = round(sum(x_TotalSavings), 2)\n by\n Account = x_BillingProfileId,\n Month = substring(startofmonth(ChargePeriodStart), 0, 7)\n| extend ESR = percentstring(Savings/ ['List cost'])\n| order by Month desc", "id": "3b3f0a58-2d84-4e3e-bebc-3e747a7d5ede", "usedVariables": ["CostsByMonth"] }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let data = materialize(\n CostsByDay\n //\n // Don't double-count commitment discount purchases\n | where x_AmortizationCategory != 'Principal'\n //\n | summarize \n ListCost = sum(ListCost),\n ContractedCost = sum(ContractedCost),\n EffectiveCost = sum(EffectiveCost)\n | extend TotalSavings = ListCost - EffectiveCost\n | extend EffectiveSavingsRate = TotalSavings / ListCost\n | project json = todynamic(strcat('[',\n '{ \"order\":11, \"type\":\"TotalSavings\", \"label\":\"Total savings\", \"value\":\"', numberstring(round(TotalSavings, 2)), '\" },',\n '{ \"order\":12, \"type\":\"\", \"label\":\"\", \"value\":\"➗\" },',\n '{ \"order\":13, \"type\":\"List\", \"label\":\"Cost without discounts\", \"value\":\"', numberstring(round(ListCost, 2)), '\" },',\n '{ \"order\":14, \"type\":\"\", \"label\":\"\", \"value\":\"🟰\" },',\n '{ \"order\":15, \"type\":\"EffectiveSavingsRate\", \"label\":\"Effective savings rate\", \"value\":\"', percentstring(EffectiveSavingsRate), '\" }',\n ']'))\n | mv-expand json\n | order by toint(json.order) asc\n | project Label = tostring(json.label), Value = tostring(json.value), Type = tostring(json.type)\n);\ndata", "id": "cb34f22b-9370-460c-9658-3e73d220bbc7", "usedVariables": ["CostsByDay"] }, + { + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "database('Ingestion').HubSettings\n| extend temp = todynamic(strcat('[',\n '{\"Label\":\"Version\",\"Value\":', version, '},',\n '{\"Label\":\"Managed scopes\",\"Value\":', array_length(scopes), '},',\n '{\"Label\":\"Data retention\",\"Value\":\"', toint(retention.final.months), 'mo\"}',\n']'))\n| mvexpand temp\n| project Label = tostring(temp.Label), Value = tostring(temp.Value)\n", + "id": "8de47213-8327-44da-9d1b-8ba5de74c44a", + "usedVariables": [] + }, + { + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "CostsByMonth\n| extend x_AmortizationCategory = case(\n ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountCategory), 'Principal',\n isnotempty(CommitmentDiscountCategory), 'Amortized Charge',\n ''\n)\n| extend x_CommitmentDiscountSavings = iff(ContractedCost == 0, decimal(0), ContractedCost - EffectiveCost)\n| extend x_NegotiatedDiscountSavings = iff(ListCost == 0, decimal(0), ListCost - ContractedCost)\n| extend x_TotalSavings = iff(ListCost == 0, decimal(0), ListCost - EffectiveCost)\n| summarize\n ['On-demand'] = round(sumif(EffectiveCost, PricingCategory == 'Standard'), 2),\n Spot = round(sumif(EffectiveCost, PricingCategory == 'Dynamic'), 2),\n Reservation = round(sumif(EffectiveCost, CommitmentDiscountType == 'Reservation'), 2),\n ['Savings plan'] = round(sumif(EffectiveCost, CommitmentDiscountType == 'Savings Plan'), 2),\n ['Other'] = round(sumif(EffectiveCost, PricingCategory !in ('Standard', 'Dynamic') and isempty(CommitmentDiscountType)), 2)\n by\n Account = x_BillingProfileId,\n Month = substring(startofmonth(ChargePeriodStart), 0, 7)\n| order by Month desc", + "id": "0341b3e4-eccc-4924-9555-9835b128c543", + "usedVariables": ["CostsByMonth"] + }, + { + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "Costs\n| extend EffectiveOverContracted = iff(ContractedCost < EffectiveCost, ContractedCost - EffectiveCost, decimal(0))\n| extend ContractedOverList = iff(ListCost < ContractedCost, ListCost - ContractedCost, decimal(0))\n| extend EffectiveOverList = iff(ListCost < EffectiveCost, ListCost - EffectiveCost, decimal(0))\n| extend Scenario = case(\n ListCost == 0 and CommitmentDiscountCategory == 'Usage' and ChargeCategory == 'Usage', 'Reservation usage missing list',\n ListCost == 0 and CommitmentDiscountCategory == 'Usage' and ChargeCategory == 'Purchase', 'Reservation purchase missing list',\n ListCost == 0 and CommitmentDiscountCategory == 'Spend' and ChargeCategory == 'Usage', 'Savings plan usage missing list',\n ListCost == 0 and CommitmentDiscountCategory == 'Spend' and ChargeCategory == 'Purchase', 'Savings plan purchase missing list',\n ListCost == 0 and ChargeCategory == 'Purchase', 'Other purchase missing list',\n isnotempty(CommitmentDiscountStatus) and ContractedOverList == 0 and EffectiveOverContracted < 0, 'Commitment cost over contracted',\n ListCost == 0 and BilledCost == 0 and EffectiveCost == 0 and ContractedCost > 0 and x_SourceChanges !contains 'MissingContractedCost', 'ContractedCost should be 0',\n ListCost == 0 and ContractedCost == 0 and BilledCost > 0 and EffectiveCost > 0 and x_PublisherCategory == 'Vendor' and ChargeCategory == 'Usage', 'Marketplace usage missing list/contracted',\n ContractedOverList < 0 and EffectiveOverContracted == 0 and x_SourceChanges !contains 'MissingListCost', 'ListCost too low',\n ContractedUnitPrice == x_EffectiveUnitPrice and EffectiveOverContracted < 0 and x_SourceChanges !contains 'MissingContractedCost', 'ContractedCost doesn\\'t match price',\n EffectiveOverContracted != 0 and abs(EffectiveOverContracted) < 0.00000001, 'Rounding error',\n ContractedOverList != 0 and abs(ContractedOverList) < 0.00000001, 'Rounding error',\n EffectiveOverList != 0 and abs(EffectiveOverList) < 0.00000001, 'Rounding error',\n ContractedCost < EffectiveCost or ListCost < ContractedCost or ListCost < EffectiveCost, '',\n EffectiveCost <= ContractedCost and ContractedCost <= ListCost, 'Good',\n '')\n| project-reorder ListCost, ContractedCost, BilledCost, EffectiveCost, EffectiveOverList, EffectiveOverContracted, ContractedOverList, x_SourceChanges, ListUnitPrice, ContractedUnitPrice, x_BilledUnitPrice, x_EffectiveUnitPrice, CommitmentDiscountStatus, PricingQuantity, PricingUnit, x_PricingBlockSize, x_PricingUnitDescription\n// DEBUG -- | where isempty(scenario) | limit 1000\n// Summarize -- \n| summarize Rows = count(), EffectiveCost = round(sum(EffectiveCost), 2), EffectiveOverContracted = abs(sum(EffectiveOverContracted)), ContractedOverList = abs(sum(ContractedOverList)), EffectiveOverList = abs(sum(EffectiveOverList)), Agreement = arraystring(make_set(x_BillingAccountAgreement)) by Scenario | order by Rows desc\n", + "id": "56fd8707-bbb3-4f7e-8e37-8dd90ada3baa", + "usedVariables": [] + }, + { + "id": "eb9259cc-05b7-4441-a66d-a29026fe371b", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "Costs_v1_0\n//\n// Apply summarization settings\n| where ChargePeriodStart >= monthsago(numberOfMonths)\n| as filteredCosts\n| extend x_ChargeMonth = startofmonth(ChargePeriodStart)\n//\n//| extend x_SkuVMProperties = tostring(x_SkuDetails.VMProperties)\n| extend x_CapacityReservationId = tostring(x_SkuDetails.VMCapacityReservationId)\n//\n// Hybrid Benefit\n| extend tmp_SQLAHB = tolower(x_SkuDetails.AHB)\n| extend tmp_IsVMUsage = x_SkuMeterCategory in ('Virtual Machines', 'Virtual Machine Licenses') and ChargeCategory == 'Usage'\n| extend x_SkuCoreCount = toint(coalesce(x_SkuDetails.VCPUs, x_SkuDetails.vCores, ''))\n| extend x_SkuUsageType = tostring(x_SkuDetails.UsageType)\n| extend x_SkuImageType = tostring(x_SkuDetails.ImageType)\n| extend x_SkuType = tostring(x_SkuDetails.ServiceType)\n| extend x_ConsumedCoreHours = iff(isnotempty(x_SkuCoreCount), x_SkuCoreCount * ConsumedQuantity, todecimal(''))\n| extend x_SkuLicenseStatus = case(\n ChargeCategory != 'Usage', '',\n (x_SkuMeterCategory in ('Virtual Machines', 'Virtual Machine Licenses') and x_SkuMeterSubcategory contains 'Windows') or tmp_SQLAHB == 'false', 'Not Enabled',\n x_SkuDetails.ImageType contains 'Windows Server BYOL' or tmp_SQLAHB == 'true' or x_SkuMeterSubcategory == 'SQL Server Azure Hybrid Benefit', 'Enabled',\n ''\n)\n| extend x_SkuLicenseType = case(\n ChargeCategory != 'Usage', '',\n x_SkuMeterCategory in ('Virtual Machines', 'Virtual Machine Licenses') and (x_SkuMeterSubcategory contains 'Windows' or x_SkuDetails.ImageType contains 'Windows Server BYOL'), 'Windows Server',\n isnotempty(tmp_SQLAHB) or x_SkuMeterSubcategory == 'SQL Server Azure Hybrid Benefit', 'SQL Server',\n ''\n)\n| extend x_SkuLicenseQuantity = case(\n isempty(x_SkuCoreCount), toint(''),\n x_SkuCoreCount <= 8, 8,\n x_SkuCoreCount <= 16, 16,\n x_SkuCoreCount == 20, 24,\n x_SkuCoreCount > 20, x_SkuCoreCount,\n toint('')\n)\n| extend x_SkuLicenseUnit = iff(isnotempty(x_SkuLicenseQuantity), 'Cores', '')\n| extend x_SkuLicenseUnusedQuantity = x_SkuLicenseQuantity - x_SkuCoreCount\n//\n| extend x_CommitmentDiscountKey = iff(tmp_IsVMUsage and isnotempty(x_SkuDetails.ServiceType), strcat(x_SkuDetails.ServiceType, x_SkuMeterId), '')\n| extend x_CommitmentDiscountUtilizationPotential = case(\n ChargeCategory == 'Purchase', decimal(0),\n ProviderName == 'Microsoft' and isnotempty(CommitmentDiscountCategory), EffectiveCost,\n CommitmentDiscountCategory == 'Usage', ConsumedQuantity,\n CommitmentDiscountCategory == 'Spend', EffectiveCost,\n decimal(0)\n)\n| extend x_CommitmentDiscountUtilizationAmount = iff(CommitmentDiscountStatus == 'Used', x_CommitmentDiscountUtilizationPotential, decimal(0))\n| extend x_SkuTermLabel = case(isempty(x_SkuTerm) or x_SkuTerm <= 0, '', x_SkuTerm < 12, strcat(x_SkuTerm, ' month', iff(x_SkuTerm != 1, 's', '')), strcat(x_SkuTerm / 12, ' year', iff(x_SkuTerm != 12, 's', '')))\n//\n// CSP partners\n// x_PartnerBilledCredit = iff(x_PartnerCreditApplied, BilledCost * x_PartnerCreditRate, todouble(0))\n// x_PartnerEffectiveCredit = iff(x_PartnerCreditApplied, EffectiveCost * x_PartnerCreditRate, todouble(0))\n//\n// Savings\n| extend x_AmortizationCategory = case(\n ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountCategory), 'Principal',\n isnotempty(CommitmentDiscountCategory), 'Amortized Charge',\n ''\n)\n| extend x_CommitmentDiscountSavings = iff(ContractedCost == 0, decimal(0), ContractedCost - EffectiveCost)\n| extend x_NegotiatedDiscountSavings = iff(ListCost == 0, decimal(0), ListCost - ContractedCost)\n| extend x_TotalSavings = iff(ListCost == 0, decimal(0), ListCost - EffectiveCost)\n| extend x_CommitmentDiscountPercent = iff(ContractedUnitPrice == 0, decimal(0), (ContractedUnitPrice - x_EffectiveUnitPrice) / ContractedUnitPrice)\n| extend x_NegotiatedDiscountPercent = iff(ListUnitPrice == 0, decimal(0), (ListUnitPrice - ContractedUnitPrice) / ListUnitPrice)\n| extend x_TotalDiscountPercent = iff(ListUnitPrice == 0, decimal(0), (ListUnitPrice - x_EffectiveUnitPrice) / ListUnitPrice)\n//\n// Toolkit\n| extend x_ToolkitTool = tostring(Tags['ftk-tool'])\n| extend x_ToolkitVersion = tostring(Tags['ftk-version'])\n| extend tmp_ResourceParent = database('Ingestion').parse_resourceid(Tags['cm-resource-parent'])\n| extend x_ResourceParentId = tostring(tmp_ResourceParent.ResourceId)\n| extend x_ResourceParentName = tostring(tmp_ResourceParent.ResourceName)\n| extend x_ResourceParentType = tostring(tmp_ResourceParent.ResourceType)\n//\n// TODO: Only add differentiators when the name is not unique\n| extend CommitmentDiscountNameUnique = iff(isempty(CommitmentDiscountId), '', strcat(CommitmentDiscountName, ' (', CommitmentDiscountType, ')'))\n| extend ResourceNameUnique = iff(isempty(ResourceId), '', strcat(ResourceName, ' (', ResourceType, ')'))\n| extend x_ResourceGroupNameUnique = iff(isempty(x_ResourceGroupName), '', strcat(x_ResourceGroupName, ' (', SubAccountName, ')'))\n| extend SubAccountNameUnique = iff(isempty(SubAccountId), '', strcat(SubAccountName, ' (', split(SubAccountId, '/')[3], ')'))\n//\n// Explain why cost is 0\n| extend x_FreeReason = case(\n BilledCost != 0.0 or EffectiveCost != 0.0, '',\n PricingCategory == 'Committed', strcat('Unknown ', CommitmentDiscountStatus, ' Commitment'),\n x_BilledUnitPrice == 0.0 and x_EffectiveUnitPrice == 0.0 and ContractedUnitPrice == 0.0 and ListUnitPrice == 0.0 and isempty(CommitmentDiscountType), case(\n x_SkuDescription contains 'Trial', 'Trial',\n x_SkuDescription contains 'Preview', 'Preview',\n 'Other'\n ),\n x_BilledUnitPrice > 0.0 or x_EffectiveUnitPrice > 0.0, case(\n PricingQuantity > 0.0, 'Low Usage',\n PricingQuantity == 0.0, 'No Usage',\n 'Unknown Negative Quantity'\n ),\n 'Unknown'\n)\n//\n| project-away tmp_SQLAHB, tmp_IsVMUsage, tmp_ResourceParent", + "usedVariables": ["numberOfMonths"] + }, { "id": "43612ae4-c475-4f22-bb50-ce9d995abb8f", - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "CostsPlus\n| where startofmonth(BillingPeriodStart) == startofmonth(now())", "usedVariables": ["CostsPlus"] }, { "id": "cb1f5404-c0b1-42fd-99fb-3cff7b08daaa", - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "CostsPlus\n| where startofmonth(BillingPeriodStart) == startofmonth(startofmonth(now()) - 1d)", "usedVariables": ["CostsPlus"] }, { "id": "4ce0f587-2d45-436c-8f79-102c6b382439", - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "CostsPlus\r\n| extend ChargePeriodStart = startofmonth(ChargePeriodStart)\r\n| extend BillingPeriodStart = startofmonth(BillingPeriodStart)", - "usedVariables": ["CostsPlus"] + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "CostsPlus\r\n| where startofmonth(ChargePeriodStart) >= startofmonth(now(), -numberOfMonths)\r\n| extend ChargePeriodStart = startofmonth(ChargePeriodStart)\r\n| extend BillingPeriodStart = startofmonth(BillingPeriodStart)", + "usedVariables": ["CostsPlus", "numberOfMonths"] }, { "id": "6b598467-8c31-4693-b1eb-7ed683fcfc3a", - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "CostsPlus\r\n| extend ChargePeriodStart = startofday(ChargePeriodStart)", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "CostsPlus\r\n| where ChargePeriodStart >= ago(numberOfDays * 1d) - 1d and ChargePeriodStart < ago(1d)\r\n| extend ChargePeriodStart = startofday(ChargePeriodStart)", + "usedVariables": ["CostsPlus", "numberOfDays"] + }, + { + "id": "4a1973bf-08e9-4e82-b8e6-6edff81cf0a5", + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, + "text": "CostsPlus", "usedVariables": ["CostsPlus"] }, - { "id": "4a1973bf-08e9-4e82-b8e6-6edff81cf0a5", "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, "text": "CostsPlus", "usedVariables": ["CostsPlus"] }, - { - "id": "eb9259cc-05b7-4441-a66d-a29026fe371b", - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, - "text": "Costs_v1_0\n//\n// Apply summarization settings\n| where ChargePeriodStart >= monthsago(numberOfMonths)\n| as filteredCosts\n| extend x_ChargeMonth = startofmonth(ChargePeriodStart)\n//\n//| extend x_SkuVMProperties = tostring(x_SkuDetails.VMProperties)\n| extend x_CapacityReservationId = tostring(x_SkuDetails.VMCapacityReservationId)\n//\n// Hybrid Benefit\n| extend tmp_SQLAHB = tolower(x_SkuDetails.AHB)\n| extend tmp_IsVMUsage = x_SkuMeterCategory in ('Virtual Machines', 'Virtual Machine Licenses') and ChargeCategory == 'Usage'\n| extend x_SkuCoreCount = toint(coalesce(x_SkuDetails.VCPUs, x_SkuDetails.vCores, ''))\n| extend x_SkuUsageType = tostring(x_SkuDetails.UsageType)\n| extend x_SkuImageType = tostring(x_SkuDetails.ImageType)\n| extend x_SkuType = tostring(x_SkuDetails.ServiceType)\n| extend x_ConsumedCoreHours = iff(isnotempty(x_SkuCoreCount), x_SkuCoreCount * ConsumedQuantity, todecimal(''))\n| extend x_SkuLicenseStatus = case(\n ChargeCategory != 'Usage', '',\n (x_SkuMeterCategory in ('Virtual Machines', 'Virtual Machine Licenses') and x_SkuMeterSubcategory contains 'Windows') or tmp_SQLAHB == 'false', 'Not Enabled',\n x_SkuDetails.ImageType contains 'Windows Server BYOL' or tmp_SQLAHB == 'true' or x_SkuMeterSubcategory == 'SQL Server Azure Hybrid Benefit', 'Enabled',\n ''\n)\n| extend x_SkuLicenseType = case(\n ChargeCategory != 'Usage', '',\n x_SkuMeterCategory in ('Virtual Machines', 'Virtual Machine Licenses') and (x_SkuMeterSubcategory contains 'Windows' or x_SkuDetails.ImageType contains 'Windows Server BYOL'), 'Windows Server',\n isnotempty(tmp_SQLAHB) or x_SkuMeterSubcategory == 'SQL Server Azure Hybrid Benefit', 'SQL Server',\n ''\n)\n| extend x_SkuLicenseQuantity = case(\n isempty(x_SkuCoreCount), toint(''),\n x_SkuCoreCount <= 8, 8,\n x_SkuCoreCount <= 16, 16,\n x_SkuCoreCount == 20, 24,\n x_SkuCoreCount > 20, x_SkuCoreCount,\n toint('')\n)\n| extend x_SkuLicenseUnit = iff(isnotempty(x_SkuLicenseQuantity), 'Cores', '')\n| extend x_SkuLicenseUnusedQuantity = x_SkuLicenseQuantity - x_SkuCoreCount\n//\n| extend x_CommitmentDiscountKey = iff(tmp_IsVMUsage and isnotempty(x_SkuDetails.ServiceType), strcat(x_SkuDetails.ServiceType, x_SkuMeterId), '')\n| extend x_CommitmentDiscountUtilizationPotential = case(\n ChargeCategory == 'Purchase', decimal(0),\n ProviderName == 'Microsoft' and isnotempty(CommitmentDiscountCategory), EffectiveCost,\n CommitmentDiscountCategory == 'Usage', ConsumedQuantity,\n CommitmentDiscountCategory == 'Spend', EffectiveCost,\n decimal(0)\n)\n| extend x_CommitmentDiscountUtilizationAmount = iff(CommitmentDiscountStatus == 'Used', x_CommitmentDiscountUtilizationPotential, decimal(0))\n| extend x_SkuTermLabel = case(isempty(x_SkuTerm) or x_SkuTerm <= 0, '', x_SkuTerm < 12, strcat(x_SkuTerm, ' month', iff(x_SkuTerm != 1, 's', '')), strcat(x_SkuTerm / 12, ' year', iff(x_SkuTerm != 12, 's', '')))\n//\n// CSP partners\n// x_PartnerBilledCredit = iff(x_PartnerCreditApplied, BilledCost * x_PartnerCreditRate, todouble(0))\n// x_PartnerEffectiveCredit = iff(x_PartnerCreditApplied, EffectiveCost * x_PartnerCreditRate, todouble(0))\n//\n// Savings\n| extend x_AmortizationCategory = case(\n ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountCategory), 'Principal',\n isnotempty(CommitmentDiscountCategory), 'Amortized Charge',\n ''\n)\n| extend x_CommitmentDiscountSavings = iff(ContractedCost == 0, decimal(0), ContractedCost - EffectiveCost)\n| extend x_NegotiatedDiscountSavings = iff(ListCost == 0, decimal(0), ListCost - ContractedCost)\n| extend x_TotalSavings = iff(ListCost == 0, decimal(0), ListCost - EffectiveCost)\n| extend x_CommitmentDiscountPercent = iff(ContractedUnitPrice == 0, decimal(0), (ContractedUnitPrice - x_EffectiveUnitPrice) / ContractedUnitPrice)\n| extend x_NegotiatedDiscountPercent = iff(ListUnitPrice == 0, decimal(0), (ListUnitPrice - ContractedUnitPrice) / ListUnitPrice)\n| extend x_TotalDiscountPercent = iff(ListUnitPrice == 0, decimal(0), (ListUnitPrice - x_EffectiveUnitPrice) / ListUnitPrice)\n//\n// Toolkit\n| extend x_ToolkitTool = tostring(Tags['ftk-tool'])\n| extend x_ToolkitVersion = tostring(Tags['ftk-version'])\n| extend tmp_ResourceParent = database('Ingestion').parse_resourceid(Tags['cm-resource-parent'])\n| extend x_ResourceParentId = tostring(tmp_ResourceParent.ResourceId)\n| extend x_ResourceParentName = tostring(tmp_ResourceParent.ResourceName)\n| extend x_ResourceParentType = tostring(tmp_ResourceParent.ResourceType)\n//\n// TODO: Only add differentiators when the name is not unique\n| extend CommitmentDiscountNameUnique = iff(isempty(CommitmentDiscountId), '', strcat(CommitmentDiscountName, ' (', CommitmentDiscountType, ')'))\n| extend ResourceNameUnique = iff(isempty(ResourceId), '', strcat(ResourceName, ' (', ResourceType, ')'))\n| extend x_ResourceGroupNameUnique = iff(isempty(x_ResourceGroupName), '', strcat(x_ResourceGroupName, ' (', SubAccountName, ')'))\n| extend SubAccountNameUnique = iff(isempty(SubAccountId), '', strcat(SubAccountName, ' (', split(SubAccountId, '/')[3], ')'))\n//\n// Explain why cost is 0\n| extend x_FreeReason = case(\n BilledCost != 0.0 or EffectiveCost != 0.0, '',\n PricingCategory == 'Committed', strcat('Unknown ', CommitmentDiscountStatus, ' Commitment'),\n x_BilledUnitPrice == 0.0 and x_EffectiveUnitPrice == 0.0 and ContractedUnitPrice == 0.0 and ListUnitPrice == 0.0 and isempty(CommitmentDiscountType), case(\n x_SkuDescription contains 'Trial', 'Trial',\n x_SkuDescription contains 'Preview', 'Preview',\n 'Other'\n ),\n x_BilledUnitPrice > 0.0 or x_EffectiveUnitPrice > 0.0, case(\n PricingQuantity > 0.0, 'Low Usage',\n PricingQuantity == 0.0, 'No Usage',\n 'Unknown Negative Quantity'\n ),\n 'Unknown'\n)\n//\n| project-away tmp_SQLAHB, tmp_IsVMUsage, tmp_ResourceParent", - "usedVariables": ["numberOfMonths"] - }, { - "dataSource": { "kind": "inline", "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" }, + "dataSource": { + "kind": "inline", + "dataSourceId": "23540be2-ffc9-4b61-8c4c-05e493e682a6" + }, "text": "let months = toscalar(database('Ingestion').HubSettings | project toint(retention.final.months));\nlet monthname = dynamic(['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']);\nrange Value from toint(1) to iff(isempty(months), 24, months) step 1\n| order by Value desc\n| extend MonthsAgo = monthsago(Value)\n| extend Label = strcat(Value, ' mo (', monthname[monthofyear(MonthsAgo)], format_datetime(MonthsAgo, ' yyyy'), ')')\n| project-away MonthsAgo\n", "id": "c9039243-968d-4e75-9899-8d4ab51a9896", "usedVariables": [] diff --git a/src/templates/finops-hub/docs/FTK Networking.vsdx b/src/templates/finops-hub/docs/FTK Networking.vsdx new file mode 100644 index 000000000..a545f7ba7 Binary files /dev/null and b/src/templates/finops-hub/docs/FTK Networking.vsdx differ diff --git a/src/templates/finops-hub/modules/dataExplorer.bicep b/src/templates/finops-hub/modules/dataExplorer.bicep index 67befd072..67cdcf9c3 100644 --- a/src/templates/finops-hub/modules/dataExplorer.bicep +++ b/src/templates/finops-hub/modules/dataExplorer.bicep @@ -87,8 +87,9 @@ param clusterSku string = 'Dev(No SLA)_Standard_E2a_v4' @maxValue(1000) param clusterCapacity int = 1 -@description('Optional. Array of external tenant IDs that should have access to the cluster. Default: empty (no external access).') -param clusterTrustedExternalTenants string[] = [] +// TODO: Figure out why this is breaking upgrades +// @description('Optional. Array of external tenant IDs that should have access to the cluster. Default: empty (no external access).') +// param clusterTrustedExternalTenants string[] = [] @description('Optional. Forces the table to be updated if different from the last time it was deployed.') param forceUpdateTag string = utcNow() @@ -251,9 +252,10 @@ resource cluster 'Microsoft.Kusto/clusters@2023-08-15' = { enableStreamingIngest: true enableAutoStop: false publicNetworkAccess: enablePublicAccess ? 'Enabled' : 'Disabled' - trustedExternalTenants: [for tenantId in clusterTrustedExternalTenants: { - value:tenantId - }] + // TODO: Figure out why this is breaking upgrades + // trustedExternalTenants: [for tenantId in clusterTrustedExternalTenants: { + // value: tenantId + // }] } resource adfClusterAdmin 'principalAssignments' = { @@ -354,7 +356,7 @@ resource cluster 'Microsoft.Kusto/clusters@2023-08-15' = { } } -// Authorize Kusto Cluster to read storage +// Authorize Kusto Cluster to read storage resource clusterStorageAccess 'Microsoft.Authorization/roleAssignments@2022-04-01' = { name: guid(cluster.name, subscription().id, 'Storage Blob Data Contributor') scope: storage diff --git a/src/templates/finops-hub/modules/dataFactory.bicep b/src/templates/finops-hub/modules/dataFactory.bicep index 3eded5c23..f391fff76 100644 --- a/src/templates/finops-hub/modules/dataFactory.bicep +++ b/src/templates/finops-hub/modules/dataFactory.bicep @@ -64,6 +64,8 @@ param enablePublicAccess bool //------------------------------------------------------------------------------ var focusSchemaVersion = '1.0' +var exportSchemaVersion = '2023-05-01' +var reservationDetailsSchemaVersion = '2023-03-01' // cSpell:ignore ftkver var ftkVersion = loadTextContent('ftkver.txt') var exportApiVersion = '2023-07-01-preview' @@ -73,6 +75,17 @@ var hubDataExplorerName = 'hubDataExplorer' // 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" }' +func getExportBodyV2(exportContainerName string, datasetType string, schemaVersion string, isMonthly bool, exportFormat string, compressionMode string, partitionData string, dataOverwriteBehavior string, recommendationScope string, recommendationLookbackPeriod string, resourceType string) string => /* + */ toLower(datasetType) == 'focuscost' ? /* + */ '{ "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/@{toLower(concat(variables(\'finOpsHub\'), \'-${ isMonthly ? 'monthly' : 'daily'}-costdetails\'))}", "name": "@{toLower(concat(variables(\'finOpsHub\'), \'-${ isMonthly ? 'monthly' : 'daily'}-costdetails\'))}", "type": "Microsoft.CostManagement/reports", "identity": { "type": "systemAssigned" }, "location": "global" }' /* + */ : toLower(datasetType) == 'reservationdetails' ? /* + */ '{ "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/@{toLower(concat(variables(\'finOpsHub\'), \'-${ isMonthly ? 'monthly' : 'daily'}-${toLower(datasetType)}\'))}", "name": "@{toLower(concat(variables(\'finOpsHub\'), \'-${ isMonthly ? 'monthly' : 'daily'}-${toLower(datasetType)}\'))}", "type": "Microsoft.CostManagement/reports", "identity": { "type": "systemAssigned" }, "location": "global" }' /* + */ : (toLower(datasetType) == 'pricesheet') || (toLower(datasetType) == 'reservationtransactions') ? /* + */ '{ "properties": { "definition": { "dataSet": { "configuration": { "dataVersion": "${schemaVersion}", "filters": [] }}, "timeframe": "${isMonthly ? 'TheCurrentMonth': '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/@{toLower(concat(variables(\'finOpsHub\'), \'-${ isMonthly ? 'monthly' : 'daily'}-${toLower(datasetType)}\'))}", "name": "@{toLower(concat(variables(\'finOpsHub\'), \'-${ isMonthly ? 'monthly' : 'daily'}-${toLower(datasetType)}\'))}", "type": "Microsoft.CostManagement/reports", "identity": { "type": "systemAssigned" }, "location": "global" }' /* + */ : toLower(datasetType) == 'reservationrecommendations' ? /* + */ '{ "properties": { "definition": { "dataSet": { "configuration": { "dataVersion": "${schemaVersion}", "filters": [ { "name": "reservationScope", "value": "${recommendationScope}" }, { "name": "resourceType", "value": "${resourceType}" }, { "name": "lookBackPeriod", "value": "${recommendationLookbackPeriod}" }] }}, "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/@{toLower(concat(variables(\'finOpsHub\'), \'-${ isMonthly ? 'monthly' : 'daily'}-costdetails\'))}", "name": "@{toLower(concat(variables(\'finOpsHub\'), \'-${ isMonthly ? 'monthly' : 'daily'}-costdetails\'))}", "type": "Microsoft.CostManagement/reports", "identity": { "type": "systemAssigned" }, "location": "global" }' /* + */ : 'undefined' + var deployDataExplorer = !empty(dataExplorerId) var datasetPropsDefault = { @@ -115,7 +128,6 @@ var allHubTriggers = [ // Roles needed to auto-start triggers var autoStartRbacRoles = [ '673868aa-7521-48a0-acc6-0f60742d39f5' // Data Factory contributor - https://learn.microsoft.com/azure/role-based-access-control/built-in-roles#data-factory-contributor - 'e40ec5ca-96e0-45a2-b4ff-59039f2c2b59' // Managed Identity Contributor - https://learn.microsoft.com/azure/role-based-access-control/built-in-roles#managed-identity-contributor ] // Roles for ADF to manage data in storage @@ -142,7 +154,7 @@ resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' existing } // Get keyvault instance -resource keyVault 'Microsoft.KeyVault/vaults@2023-02-01' existing = { +resource keyVault 'Microsoft.KeyVault/vaults@2023-02-01' existing = if (!empty(remoteHubStorageUri)) { name: keyVaultName } @@ -227,7 +239,7 @@ module approveStoragePrivateEndpointConnections 'storageEndpoints.bicep' = if (! } } -resource keyVaultManagedPrivateEndpoint 'Microsoft.DataFactory/factories/managedVirtualNetworks/managedPrivateEndpoints@2018-06-01' = if (!enablePublicAccess) { +resource keyVaultManagedPrivateEndpoint 'Microsoft.DataFactory/factories/managedVirtualNetworks/managedPrivateEndpoints@2018-06-01' = if (!empty(remoteHubStorageUri) && !enablePublicAccess) { name: keyVault.name parent: managedVirtualNetwork properties: { @@ -240,7 +252,7 @@ resource keyVaultManagedPrivateEndpoint 'Microsoft.DataFactory/factories/managed } } -module getKeyVaultPrivateEndpointConnections 'keyVaultEndpoints.bicep' = if (!enablePublicAccess) { +module getKeyVaultPrivateEndpointConnections 'keyVaultEndpoints.bicep' = if (!empty(remoteHubStorageUri) && !enablePublicAccess) { name: 'GetKeyVaultPrivateEndpointConnections' dependsOn: [ keyVaultManagedPrivateEndpoint @@ -250,7 +262,7 @@ module getKeyVaultPrivateEndpointConnections 'keyVaultEndpoints.bicep' = if (!en } } -module approveKeyVaultPrivateEndpointConnections 'keyVaultEndpoints.bicep' = if (!enablePublicAccess) { +module approveKeyVaultPrivateEndpointConnections 'keyVaultEndpoints.bicep' = if (!empty(remoteHubStorageUri) && !enablePublicAccess) { name: 'ApproveKeyVaultPrivateEndpointConnections' params: { keyVaultName: keyVault.name @@ -380,7 +392,7 @@ resource stopTriggers 'Microsoft.Resources/deploymentScripts@2020-10-01' = { dependsOn: [ triggerManagerRoleAssignments ] - tags: tags + tags: union(tags, tagsByResource[?'Microsoft.Resources/deploymentScripts'] ?? {}) properties: { azPowerShellVersion: '8.0' retentionInterval: 'PT1H' @@ -413,7 +425,7 @@ resource stopTriggers 'Microsoft.Resources/deploymentScripts@2020-10-01' = { //------------------------------------------------------------------------------ // cSpell:ignore linkedservices -resource linkedService_keyVault 'Microsoft.DataFactory/factories/linkedservices@2018-06-01' = { +resource linkedService_keyVault 'Microsoft.DataFactory/factories/linkedservices@2018-06-01' = if (!empty(remoteHubStorageUri)) { name: keyVault.name parent: dataFactory dependsOn: enablePublicAccess ? [] : [managedIntegrationRuntime] @@ -951,6 +963,7 @@ resource trigger_MonthlySchedule 'Microsoft.DataFactory/factories/triggers@2018- timeZone: azuretimezones.outputs.Timezone schedule: { monthDays: [ + 2 5 19 ] @@ -2225,7 +2238,7 @@ resource pipeline_RunExportJobs 'Microsoft.DataFactory/factories/pipelines@2018- userProperties: [] typeProperties: { expression: { - value: '@and(equals(toLower(item().properties.schedule.recurrence), toLower(pipeline().parameters.Recurrence)),startswith(toLower(item().name), toLower(variables(\'hubName\'))))' + value: '@and( startswith(toLower(item().name), toLower(variables(\'hubName\'))), and(contains(string(item().properties.schedule), \'recurrence\'), equals(toLower(item().properties.schedule.recurrence), toLower(pipeline().parameters.Recurrence))))' type: 'Expression' } ifTrueActivities: [ @@ -2251,7 +2264,7 @@ resource pipeline_RunExportJobs 'Microsoft.DataFactory/factories/pipelines@2018- 'x-ms-command-name': 'FinOpsToolkit.Hubs.config_RunExportJobs@${ftkVersion}' ClientType: 'FinOpsToolkit.Hubs@${ftkVersion}' } - body: '{}' + body: ' ' authentication: { type: 'MSI' resource: { @@ -2295,7 +2308,7 @@ resource pipeline_RunExportJobs 'Microsoft.DataFactory/factories/pipelines@2018- // config_ConfigureExports pipeline // Triggered by config_SettingsUpdated trigger //------------------------------------------------------------------------------ -@description('Creates Cost Management exports for all scopes.') +@description('Creates Cost Management exports for supported scopes.') resource pipeline_ConfigureExports 'Microsoft.DataFactory/factories/pipelines@2018-06-01' = { name: '${safeConfigContainerName}_ConfigureExports' parent: dataFactory @@ -2438,46 +2451,8 @@ resource pipeline_ConfigureExports 'Microsoft.DataFactory/factories/pipelines@20 } isSequential: true activities: [ - { // 'Create or update open month focus export' - 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: '@{variables(\'resourceManagementUri\')}@{item().scope}/providers/Microsoft.CostManagement/exports/@{variables(\'exportName\')}?api-version=${exportApiVersion}' - type: 'Expression' - } - method: 'PUT' - body: { - value: getExportBody(exportContainerName, 'FocusCost', focusSchemaVersion, false, 'Parquet', 'Snappy', 'true', 'CreateNewReport') - type: 'Expression' - } - authentication: { - type: 'MSI' - resource: { - value: '@variables(\'ResourceManagementUri\')' - type: 'Expression' - } - } - } - } - { // 'Set open month focus export name' - name: 'Set open month focus export name' + { + name: 'Set Export Type' type: 'SetVariable' dependsOn: [] policy: { @@ -2486,73 +2461,422 @@ resource pipeline_ConfigureExports 'Microsoft.DataFactory/factories/pipelines@20 } userProperties: [] typeProperties: { - variableName: 'exportName' + variableName: 'exportScopeType' value: { - value: '@toLower(concat(variables(\'finOpsHub\'), \'-daily-costdetails\'))' + value: '@if(contains(toLower(item().scope), \'providers/microsoft.billing/billingaccounts\'), if(contains(toLower(item().scope), \':\'), \'mca\', \'ea\'), if(contains(toLower(item().scope), \'subscriptions/\'), \'subscription\', \'undefined\'))' type: 'Expression' } } } - { // 'Create or update closed month focus export' - name: 'Create or update closed month focus export' - type: 'WebActivity' + { + name: 'Switch Export Type' + type: 'Switch' dependsOn: [ { - activity: 'Set closed month focus export name' - dependencyConditions: [ - 'Succeeded' - ] + activity: 'Set Export Type' + dependencyConditions: [ 'Succeeded' ] } ] - policy: { - timeout: '0.00:05:00' - retry: 2 - retryIntervalInSeconds: 30 - secureOutput: false - secureInput: false - } userProperties: [] typeProperties: { - url: { - value: '@{variables(\'ResourceManagementUri\')}@{item().scope}/providers/Microsoft.CostManagement/exports/@{variables(\'exportName\')}?api-version=${exportApiVersion}' + on: { + value: '@toLower(variables(\'exportScopeType\'))' type: 'Expression' } - method: 'PUT' - body: { - value: getExportBody(exportContainerName, 'FocusCost', focusSchemaVersion, true, 'Parquet', 'Snappy', 'true', 'CreateNewReport') - type: 'Expression' - } - authentication: { - type: 'MSI' - resource: { - value: '@variables(\'ResourceManagementUri\')' - type: 'Expression' + cases: [ + { // EA + value: 'ea' + activities: [ + { // 'EA open month focus export' + name: 'EA open month focus export' + type: 'WebActivity' + dependsOn: [ + ] + policy: { + timeout: '0.00:05:00' + retry: 2 + retryIntervalInSeconds: 30 + secureOutput: false + secureInput: false + } + userProperties: [] + typeProperties: { + url: { + value: '@{variables(\'resourceManagementUri\')}@{item().scope}/providers/Microsoft.CostManagement/exports/@{toLower(concat(variables(\'finOpsHub\'), \'-daily-costdetails\'))}?api-version=${exportApiVersion}' + type: 'Expression' + } + method: 'PUT' + body: { + value: getExportBodyV2(exportContainerName, 'FocusCost', focusSchemaVersion, false, 'Parquet', 'Snappy', 'true', 'CreateNewReport', '', '', '') + type: 'Expression' + } + headers: { + 'x-ms-command-name': 'FinOpsToolkit.Hubs.config_RunExportJobs.CostsDaily@${ftkVersion}' + ClientType: 'FinOpsToolkit.Hubs@${ftkVersion}' + } + authentication: { + type: 'MSI' + resource: { + value: '@variables(\'resourceManagementUri\')' + type: 'Expression' + } + } + } + } + { // 'EA closed month focus export' + name: 'EA closed month focus export' + type: 'WebActivity' + dependsOn: [ + { + activity: 'EA open month focus export' + dependencyConditions: [ 'Succeeded' ] + } + ] + policy: { + timeout: '0.00:05:00' + retry: 2 + retryIntervalInSeconds: 30 + secureOutput: false + secureInput: false + } + userProperties: [] + typeProperties: { + url: { + value: '@{variables(\'resourceManagementUri\')}@{item().scope}/providers/Microsoft.CostManagement/exports/@{toLower(concat(variables(\'finOpsHub\'), \'-monthly-costdetails\'))}?api-version=${exportApiVersion}' + type: 'Expression' + } + method: 'PUT' + body: { + value: getExportBodyV2(exportContainerName, 'FocusCost', focusSchemaVersion, true, 'Parquet', 'Snappy', 'true', 'CreateNewReport', '', '', '') + type: 'Expression' + } + headers: { + 'x-ms-command-name': 'FinOpsToolkit.Hubs.config_RunExportJobs.CostsMonthly@${ftkVersion}' + ClientType: 'FinOpsToolkit.Hubs@${ftkVersion}' + } + authentication: { + type: 'MSI' + resource: { + value: '@variables(\'resourceManagementUri\')' + type: 'Expression' + } + } + } + } + { // 'EA monthly pricesheet export' + name: 'EA monthly pricesheet export' + type: 'WebActivity' + dependsOn: [ + { + activity: 'EA closed month focus export' + dependencyConditions: [ 'Succeeded' ] + } + ] + policy: { + timeout: '0.00:05:00' + retry: 2 + retryIntervalInSeconds: 30 + secureOutput: false + secureInput: false + } + userProperties: [] + typeProperties: { + url: { + value: '@{variables(\'resourceManagementUri\')}@{item().scope}/providers/Microsoft.CostManagement/exports/@{toLower(concat(variables(\'finOpsHub\'), \'-monthly-pricesheet\'))}?api-version=${exportApiVersion}' + type: 'Expression' + } + method: 'PUT' + body: { + value: getExportBodyV2(exportContainerName, 'Pricesheet', exportSchemaVersion, true, 'Parquet', 'Snappy', 'true', 'CreateNewReport', '', '', '') + type: 'Expression' + } + headers: { + 'x-ms-command-name': 'FinOpsToolkit.Hubs.config_RunExportJobs.Prices@${ftkVersion}' + ClientType: 'FinOpsToolkit.Hubs@${ftkVersion}' + } + authentication: { + type: 'MSI' + resource: { + value: '@variables(\'resourceManagementUri\')' + type: 'Expression' + } + } + } + } + { + name: 'Trigger EA monthly pricesheet export' + type: 'WebActivity' + dependsOn: [ + { + activity: 'EA monthly pricesheet export' + dependencyConditions: [ 'Succeeded' ] + } + ] + policy: { + timeout: '0.00:05:00' + retry: 0 + retryIntervalInSeconds: 30 + secureOutput: false + secureInput: false + } + userProperties: [] + typeProperties: { + method: 'POST' + url: { + value: '@{variables(\'resourceManagementUri\')}@{item().scope}/providers/Microsoft.CostManagement/exports/@{toLower(concat(variables(\'finOpsHub\'), \'-monthly-pricesheet\'))}/run?api-version=${exportApiVersion}' + type: 'Expression' + } + headers: { + 'x-ms-command-name': 'FinOpsToolkit.Hubs.config_RunExportJobs.Prices@${ftkVersion}' + ClientType: 'FinOpsToolkit.Hubs@${ftkVersion}' + } + body: ' ' + authentication: { + type: 'MSI' + resource: { + value: '@variables(\'resourceManagementUri\')' + type: 'Expression' + } + } + } + } + { // 'EA daily reservation details export' + name: 'EA daily reservation details export' + type: 'WebActivity' + dependsOn: [ + { + activity: 'EA monthly pricesheet export' + dependencyConditions: [ 'Succeeded' ] + } + ] + policy: { + timeout: '0.00:05:00' + retry: 2 + retryIntervalInSeconds: 30 + secureOutput: false + secureInput: false + } + userProperties: [] + typeProperties: { + url: { + value: '@{variables(\'resourceManagementUri\')}@{item().scope}/providers/Microsoft.CostManagement/exports/@{toLower(concat(variables(\'finOpsHub\'), \'-daily-reservationdetails\'))}?api-version=${exportApiVersion}' + type: 'Expression' + } + method: 'PUT' + body: { + value: getExportBodyV2(exportContainerName, 'ReservationDetails', reservationDetailsSchemaVersion, false, 'CSV', 'None', 'true', 'CreateNewReport', '', '', '') + type: 'Expression' + } + headers: { + 'x-ms-command-name': 'FinOpsToolkit.Hubs.config_RunExportJobs.ReservationDetails@${ftkVersion}' + ClientType: 'FinOpsToolkit.Hubs@${ftkVersion}' + } + authentication: { + type: 'MSI' + resource: { + value: '@variables(\'resourceManagementUri\')' + type: 'Expression' + } + } + } + } + { // 'EA daily reservation transactions export' + name: 'EA daily reservation transactions export' + type: 'WebActivity' + dependsOn: [ + { + activity: 'EA daily reservation details export' + dependencyConditions: [ 'Succeeded' ] + } + ] + policy: { + timeout: '0.00:05:00' + retry: 2 + retryIntervalInSeconds: 30 + secureOutput: false + secureInput: false + } + userProperties: [] + typeProperties: { + url: { + value: '@{variables(\'resourceManagementUri\')}@{item().scope}/providers/Microsoft.CostManagement/exports/@{toLower(concat(variables(\'finOpsHub\'), \'-daily-reservationtransactions\'))}?api-version=${exportApiVersion}' + type: 'Expression' + } + method: 'PUT' + body: { + value: getExportBodyV2(exportContainerName, 'ReservationTransactions', exportSchemaVersion, false, 'CSV', 'None', 'true', 'CreateNewReport', '', '', '') + type: 'Expression' + } + headers: { + 'x-ms-command-name': 'FinOpsToolkit.Hubs.config_RunExportJobs.ReservationTransactions@${ftkVersion}' + ClientType: 'FinOpsToolkit.Hubs@${ftkVersion}' + } + authentication: { + type: 'MSI' + resource: { + value: '@variables(\'resourceManagementUri\')' + type: 'Expression' + } + } + } + } + { // 'EA daily recommendations shared last30day virtualmachines export' + name: 'EA daily shared 30day virtualmachines' + type: 'WebActivity' + dependsOn: [ + { + activity: 'EA daily reservation transactions export' + dependencyConditions: [ 'Succeeded' ] + } + ] + policy: { + timeout: '0.00:05:00' + retry: 2 + retryIntervalInSeconds: 30 + secureOutput: false + secureInput: false + } + userProperties: [] + typeProperties: { + url: { + value: '@{variables(\'resourceManagementUri\')}@{item().scope}/providers/Microsoft.CostManagement/exports/@{toLower(concat(variables(\'finOpsHub\'), \'-daily-recommendations-shared-last30days-virtualmachines\'))}?api-version=${exportApiVersion}' + type: 'Expression' + } + method: 'PUT' + body: { + value: getExportBodyV2(exportContainerName, 'ReservationRecommendations', exportSchemaVersion, false, 'CSV', 'None', 'true', 'CreateNewReport', 'Shared', 'Last30Days', 'VirtualMachines') + type: 'Expression' + } + headers: { + 'x-ms-command-name': 'FinOpsToolkit.Hubs.config_RunExportJobs.ReservationRecommendations.VM.Shared.30d@${ftkVersion}' + ClientType: 'FinOpsToolkit.Hubs@${ftkVersion}' + } + authentication: { + type: 'MSI' + resource: { + value: '@variables(\'resourceManagementUri\')' + type: 'Expression' + } + } + } + } + ] } - } - } - } - { // 'Set closed month focus export name' - 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' - } + { // subscription + value: 'subscription' + activities: [ + { // 'Subscription open month focus export' + name: 'Subscription open month focus export' + type: 'WebActivity' + dependsOn: [ + ] + policy: { + timeout: '0.00:05:00' + retry: 2 + retryIntervalInSeconds: 30 + secureOutput: false + secureInput: false + } + userProperties: [] + typeProperties: { + url: { + value: '@{variables(\'resourceManagementUri\')}@{item().scope}/providers/Microsoft.CostManagement/exports/@{toLower(concat(variables(\'finOpsHub\'), \'-daily-costdetails\'))}?api-version=${exportApiVersion}' + type: 'Expression' + } + method: 'PUT' + body: { + value: getExportBodyV2(exportContainerName, 'FocusCost', focusSchemaVersion, false, 'Parquet', 'Snappy', 'true', 'CreateNewReport', '', '', '') + type: 'Expression' + } + headers: { + 'x-ms-command-name': 'FinOpsToolkit.Hubs.config_RunExportJobs.CostsDaily@${ftkVersion}' + ClientType: 'FinOpsToolkit.Hubs@${ftkVersion}' + } + authentication: { + type: 'MSI' + resource: { + value: '@variables(\'resourceManagementUri\')' + type: 'Expression' + } + } + } + } + { // 'Subscription closed month focus export' + name: 'Subscription closed month focus export' + type: 'WebActivity' + dependsOn: [ + { + activity: 'Subscription open month focus export' + dependencyConditions: [ 'Succeeded' ] + } + ] + policy: { + timeout: '0.00:05:00' + retry: 2 + retryIntervalInSeconds: 30 + secureOutput: false + secureInput: false + } + userProperties: [] + typeProperties: { + url: { + value: '@{variables(\'resourceManagementUri\')}@{item().scope}/providers/Microsoft.CostManagement/exports/@{toLower(concat(variables(\'finOpsHub\'), \'-monthly-costdetails\'))}?api-version=${exportApiVersion}' + type: 'Expression' + } + method: 'PUT' + body: { + value: getExportBodyV2(exportContainerName, 'FocusCost', focusSchemaVersion, true, 'Parquet', 'Snappy', 'true', 'CreateNewReport', '', '', '') + type: 'Expression' + } + headers: { + 'x-ms-command-name': 'FinOpsToolkit.Hubs.config_RunExportJobs.CostsMonthly@${ftkVersion}' + ClientType: 'FinOpsToolkit.Hubs@${ftkVersion}' + } + authentication: { + type: 'MSI' + resource: { + value: '@variables(\'resourceManagementUri\')' + type: 'Expression' + } + } + } + } + ] + } + { // MCA + value: 'mca' + activities: [ + { + name: 'Export Type Unsupported Error' + type: 'Fail' + dependsOn: [] + userProperties: [] + typeProperties: { + message: { + value: '@concat(\'MCA agreements are not supported for managed exports :\',variables(\'exportScope\'))' + type: 'Expression' + } + errorCode: 'ExportTypeUnsupported' + } + } + ] + } + ] + defaultActivities: [ + { + name: 'Export Type Not Defined Error' + type: 'Fail' + dependsOn: [] + userProperties: [] + typeProperties: { + message: { + value: '@concat(\'Unable to determine the export scope type for :\',variables(\'exportScope\'))' + type: 'Expression' + } + errorCode: 'ExportTypeNotDefined' + } + } + ] } } ] @@ -2570,6 +2894,9 @@ resource pipeline_ConfigureExports 'Microsoft.DataFactory/factories/pipelines@20 exportScope: { type: 'String' } + exportScopeType: { + type: 'String' + } storageAccountId: { type: 'String' defaultValue: storageAccount.id @@ -3223,7 +3550,7 @@ resource pipeline_ExecuteExportsETL 'Microsoft.DataFactory/factories/pipelines@2 typeProperties: { variableName: 'destinationFolder' value: { - value: '@replace(concat(variables(\'hubDataset\'),\'/\',substring(variables(\'date\'), 0, 4),\'/\',substring(variables(\'date\'), 4, 2),\'/\',toLower(variables(\'scope\'))),\'//\',\'/\')' + value: '@replace(concat(variables(\'hubDataset\'),\'/\',substring(variables(\'date\'), 0, 4),\'/\',substring(variables(\'date\'), 4, 2),\'/\',toLower(variables(\'scope\')), if(equals(variables(\'hubDataset\'), \'Recommendations\'), activity(\'Read Manifest\').output.firstRow.exportConfig.exportName, \'\')),\'//\',\'/\')' type: 'Expression' } } diff --git a/src/templates/finops-hub/modules/ftkver.txt b/src/templates/finops-hub/modules/ftkver.txt index ce609caf8..9a7d84f2a 100644 --- a/src/templates/finops-hub/modules/ftkver.txt +++ b/src/templates/finops-hub/modules/ftkver.txt @@ -1 +1 @@ -0.8 \ No newline at end of file +0.9 \ 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 f3e1b5bd5..44e0905dc 100644 --- a/src/templates/finops-hub/modules/hub.bicep +++ b/src/templates/finops-hub/modules/hub.bicep @@ -109,8 +109,8 @@ param dataExplorerSku string = 'Dev(No SLA)_Standard_D11_v2' @maxValue(1000) param dataExplorerCapacity int = 1 -@description('Optional. Array of external tenant IDs that should have access to the cluster. Default: empty (no external access).') -param dataExplorerTrustedExternalTenants string[] = [] +// @description('Optional. Array of external tenant IDs that should have access to the cluster. Default: empty (no external access).') +// param dataExplorerTrustedExternalTenants string[] = [] @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.') param tags object = {} @@ -204,8 +204,23 @@ var safeScriptSubnetId = enablePublicAccess ? '' : vnet.outputs.scriptSubnetId // } // var finalEventGridLocation = eventGridLocation != null && !empty(eventGridLocation) ? eventGridLocation : (eventGridLocationFallback[?location] ?? location) -// The last segment of the telemetryId is used to identify this module -var telemetryId = '00f120b5-2007-6120-0000-40b000000000' +// The last segment of the GUID in the telemetryId (40b) is used to identify this module +// Remaining characters identify settings; must be <= 12 chars -- Example: (guid)_RLXD##x1000P +var telemetryId = join([ + '00f120b5-2007-6120-0000-40b000000000_' + // R = remote hubs enabled + empty(remoteHubStorageUri) || empty(remoteHubStorageKey) ? '' : 'R' + // L = LRS, Z = ZRS + substring(split(storageSku, '_')[1], 0, 1) + // X = ADX enabled + D (dev) or S (standard) SKU + empty(dataExplorerName) ? '' : 'X${substring(dataExplorerSku, 0, 1)}' + // Number of cores in the VM size + empty(dataExplorerName) ? '' : replace(replace(replace(replace(replace(replace(replace(replace(split(split(dataExplorerSku, 'Standard_')[1], '_')[0], 'C', ''), 'D', ''), 'E', ''), 'L', ''), 'a', ''), 'd', ''), 'i', ''), 's', '') + // Number of nodes in the cluster + empty(dataExplorerName) || dataExplorerCapacity == 1 ? '' : 'x${dataExplorerCapacity}' + // P = private endpoints enabled + enablePublicAccess ? '' : 'P' +], '') //============================================================================== // Resources @@ -219,7 +234,7 @@ var telemetryId = '00f120b5-2007-6120-0000-40b000000000' //------------------------------------------------------------------------------ resource defaultTelemetry 'Microsoft.Resources/deployments@2022-09-01' = if (enableDefaultTelemetry) { - name: 'pid-${telemetryId}-${uniqueString(deployment().name, location)}' + name: 'pid-${telemetryId}_${uniqueString(deployment().name, location)}' properties: { mode: 'Incremental' template: { @@ -289,7 +304,7 @@ module dataExplorer 'dataExplorer.bicep' = if (deployDataExplorer) { clusterName: dataExplorerName clusterSku: dataExplorerSku clusterCapacity: dataExplorerCapacity - clusterTrustedExternalTenants: dataExplorerTrustedExternalTenants + // TODO: Figure out why this is breaking upgrades -- clusterTrustedExternalTenants: dataExplorerTrustedExternalTenants location: location tags: resourceTags tagsByResource: tagsByResource @@ -339,7 +354,7 @@ module dataFactoryResources 'dataFactory.bicep' = { dataExplorerIngestionCapacity: safeDataExplorerIngestionCapacity dataExplorerUri: safeDataExplorerUri dataExplorerId: safeDataExplorerId - keyVaultName: keyVault.outputs.name + keyVaultName: empty(remoteHubStorageKey) ? '' : keyVault.outputs.name remoteHubStorageUri: remoteHubStorageUri enablePublicAccess: enablePublicAccess } @@ -349,7 +364,7 @@ module dataFactoryResources 'dataFactory.bicep' = { // Key Vault for storing secrets //------------------------------------------------------------------------------ -module keyVault 'keyVault.bicep' = { +module keyVault 'keyVault.bicep' = if (!empty(remoteHubStorageKey)) { name: 'keyVault' params: { hubName: hubName diff --git a/src/templates/finops-hub/modules/scripts/Copy-FileToAzureBlob.ps1 b/src/templates/finops-hub/modules/scripts/Copy-FileToAzureBlob.ps1 index cd9e151cf..c592f13c3 100644 --- a/src/templates/finops-hub/modules/scripts/Copy-FileToAzureBlob.ps1 +++ b/src/templates/finops-hub/modules/scripts/Copy-FileToAzureBlob.ps1 @@ -28,6 +28,7 @@ if ($blob) Write-Output "---------" $json = $text | ConvertFrom-Json Write-Output "Existing settings.json file found. Updating..." + # Rename exportScopes to scopes + convert to object array if ($json.exportScopes) { @@ -35,7 +36,7 @@ if ($blob) if ($json.exportScopes[0] -is [string]) { Write-Output " Converting string array to object array..." - $json.exportScopes = $json.exportScopes | Where-Object $validateScopes | ForEach-Object { @{ scope = $_ } } + $json.exportScopes = @($json.exportScopes | Where-Object $validateScopes | ForEach-Object { @{ scope = $_ } }) if (-not ($json.exportScopes -is [array])) { Write-Output " Converting single object to object array..." @@ -47,6 +48,15 @@ if ($blob) $json | Add-Member -MemberType NoteProperty -Name scopes -Value $json.exportScopes $json.PSObject.Properties.Remove('exportScopes') } + + # Force string array to object array with unique values + if ($json.scopes) + { + Write-Output " Converting string array to object array..." + $scopeArray = @() + $json.scopes | Where-Object $validateScopes | ForEach-Object { $scopeArray += $_ } | Select-Object -Unique + $json.scopes = @() + $scopeArray + } } # Set default if not found @@ -81,8 +91,7 @@ if (!$json) Write-Output "---------" } -# Set values from inputs -$json.scopes = $env:scopes.Split('|') | ForEach-Object { @{ 'scope' = $_ } } +# Set default retention if (!($json.retention)) { # In case the retention object is not present in the settings.json file (versions before 0.4), add it with default values @@ -148,20 +157,8 @@ else # Updating settings Write-Output "Updating version to $env:ftkVersion..." $json.version = $env:ftkVersion -if ($newScopes) -{ - Write-Output "Merging $($newScopes.Count) scopes..." - $json.scopes = Compare-Object -ReferenceObject $json.scopes -DifferenceObject $newScopes -Property scope -PassThru -IncludeEqual - - # Remove the SideIndicator property from the Compare-Object output - $json.scopes | ForEach-Object { $_.PSObject.Properties.Remove('SideIndicator') } | ConvertTo-Json - - if (-not ($json.scopes -is [array])) - { - $json.scopes = @($json.scopes) - } - Write-Output "$($json.scopes.Count) scopes found." -} +$json.scopes = (@() + $json.scopes + $newScopes) | Select-Object -Unique +if ($null -eq $json.scopes) { $json.scopes = @() } $text = $json | ConvertTo-Json Write-Output "---------" Write-Output $text diff --git a/src/templates/finops-hub/modules/scripts/IngestionSetup.kql b/src/templates/finops-hub/modules/scripts/IngestionSetup.kql index 8c2becec4..0cc201ee1 100644 --- a/src/templates/finops-hub/modules/scripts/IngestionSetup.kql +++ b/src/templates/finops-hub/modules/scripts/IngestionSetup.kql @@ -303,11 +303,11 @@ Prices_transform_v1_0() | extend x_ContractedUnitPriceDiscount = ListUnitPrice - ContractedUnitPrice | extend x_TotalUnitPriceDiscount = ListUnitPrice - x_EffectiveUnitPrice | project - BillingAccountId = case( + BillingAccountId = tolower(case( BillingProfileId startswith '/', BillingProfileId, BillingAccountId startswith '/', BillingAccountId, - strcat('/providers/Microsoft.Billing/billingAccounts/', x_BillingAccountId, iff(x_BillingProfileId != x_BillingAccountId, '', strcat('/billingProfiles/', x_BillingProfileId))) - ), + strcat('/providers/microsoft.billing/billingaccounts/', x_BillingAccountId, iff(x_BillingProfileId == x_BillingAccountId, '', strcat('/billingprofiles/', x_BillingProfileId))) + )), BillingAccountName = coalesce(BillingProfileName, BillingAccountName, x_BillingProfileId), BillingCurrency = coalesce(BillingCurrency, CurrencyCode, Currency), // Currency last as a fallback only ChargeCategory, @@ -780,6 +780,8 @@ Costs_transform_v1_0() iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId) and EffectiveCost > 0, 'InvalidEffectiveCost,', ''), iff((isempty(ContractedCost) or ContractedCost == 0) and EffectiveCost != 0, 'MissingContractedCost,', ''), iff((isempty(ContractedUnitPrice) or ContractedUnitPrice == 0) and x_EffectiveUnitPrice != 0, 'MissingContractedUnitPrice,', ''), + iff(ListCost < ContractedCost, 'ListCostLessThanContractedCost,', ''), + iff(ContractedCost < EffectiveCost, 'ContractedCostLessThanEffectiveCost,', ''), iff((isempty(ListCost) or ListCost == 0) and (ContractedCost != 0 or EffectiveCost != 0), 'MissingListCost,', ''), iff((isempty(ListUnitPrice) or ListUnitPrice == 0) and (ContractedUnitPrice != 0 or x_EffectiveUnitPrice != 0), 'MissingListUnitPrice,', ''), iff(isempty(ProviderName), 'MissingProviderName,', ''), @@ -824,15 +826,16 @@ Costs_transform_v1_0() and isnotempty(strcat(x_SkuMeterId, x_SkuOfferId)) | as allCosts | where tmp_MissingPrices - | extend tmp_ReservationPriceLookupKey = strcat(x_BillingProfileId, substring(ChargePeriodStart, 0, 7), x_SkuMeterId, x_SkuOfferId) + | extend tmp_ReservationPriceLookupKey = tolower(strcat(x_BillingProfileId, substring(ChargePeriodStart, 0, 7), x_SkuMeterId, x_SkuOfferId)) | as costsWithMissingPrices | join kind=leftouter ( Prices_final_v1_0 - | extend tmp_ReservationPriceLookupKey = strcat(x_BillingProfileId, substring(x_EffectivePeriodStart, 0, 7), x_SkuMeterId, x_SkuOfferId) + | extend tmp_ReservationPriceLookupKey = tolower(strcat(x_BillingProfileId, substring(x_EffectivePeriodStart, 0, 7), x_SkuMeterId, x_SkuOfferId)) | where x_SkuPriceType == 'Consumption' and tmp_ReservationPriceLookupKey in ((costsWithMissingPrices | summarize by tmp_ReservationPriceLookupKey)) | summarize ListUnitPrice = min(ListUnitPrice), ContractedUnitPrice = min(ContractedUnitPrice) by tmp_ReservationPriceLookupKey, x_PricingBlockSize, PricingUnit ) on tmp_ReservationPriceLookupKey // Select the best price to use for each row + // TODO: Save values before changing -- | extend x_ms_ContractedUnitPrice = ContractedUnitPrice, x_ms_ListUnitPrice = ListUnitPrice, x_ms_ListCost = ListCost, x_ms_ContractedCost = ContractedCost | extend ContractedUnitPrice = case( // If price is already correct, keep that ContractedUnitPrice != 0 or x_EffectiveUnitPrice == 0, ContractedUnitPrice, @@ -856,8 +859,20 @@ Costs_transform_v1_0() ContractedUnitPrice ) // 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 - | extend ListCost = case(ListCost != 0 or EffectiveCost == 0, ListCost, ListUnitPrice != 0, ListUnitPrice * PricingQuantity, ListCost) - | extend ContractedCost = case(ContractedCost != 0 or EffectiveCost == 0, ContractedCost, ContractedUnitPrice != 0, ContractedUnitPrice * PricingQuantity, ContractedCost) + | extend ContractedCost = case( + ContractedCost != 0 or EffectiveCost == 0, ContractedCost, + ContractedUnitPrice == x_EffectiveUnitPrice, EffectiveCost, // Use EffectiveCost if both prices are the same to avoid rounding errors + ContractedUnitPrice != 0, ContractedUnitPrice * PricingQuantity, + ContractedCost == 0 and ContractedUnitPrice == 0, EffectiveCost, // Fall back to EffectiveCost when ContractedCost and ContractedUnitPrice are 0 + ContractedCost + ) + | extend ListCost = case( + ListCost != 0 or EffectiveCost == 0, ListCost, + ListUnitPrice == ContractedUnitPrice, ContractedCost, // Use ContractedCost if both prices are the same to avoid rounding errors + ListUnitPrice != 0, ListUnitPrice * PricingQuantity, + ListCost == 0 and ListUnitPrice == 0, ContractedCost, // Fall back to ContractedCost when ListCost and ListUnitPrice are 0 + ListCost + ) // Merge the rest of the unmodified cost records and remove excess columns | union (allCosts | where not(tmp_MissingPrices)) | project-away x_PricingBlockSize1, PricingUnit1, ListUnitPrice1, ContractedUnitPrice1, tmp_MissingPrices, tmp_ReservationPriceLookupKey, tmp_ReservationPriceLookupKey1 @@ -893,7 +908,7 @@ Costs_transform_v1_0() | extend ResourceType = case( // Use existing resource type display name unless it's an internal resource type ID isnotempty(ResourceType) and tolower(ResourceType) != tolower(x_ResourceType) and ResourceType !contains '/', ResourceType, - // Use CommitmentDisocuntType for commitment discount purchases + // Use CommitmentDiscountType for commitment discount purchases ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountType), CommitmentDiscountType, // Look up display name from internal type isnotempty(x_ResourceType), coalesce(resource_type(x_ResourceType).SingularDisplayName, ResourceType, x_ResourceType), @@ -903,7 +918,7 @@ Costs_transform_v1_0() | project AvailabilityZone, BilledCost, - BillingAccountId, + BillingAccountId = tolower(BillingAccountId), BillingAccountName, BillingAccountType, BillingCurrency, @@ -922,7 +937,7 @@ Costs_transform_v1_0() ChargePeriodEnd, ChargePeriodStart, CommitmentDiscountCategory, - CommitmentDiscountId, + CommitmentDiscountId = tolower(CommitmentDiscountId), CommitmentDiscountName, CommitmentDiscountStatus = case( // Handle FOCUS 1.0-preview ChargeSubcategory @@ -1352,36 +1367,27 @@ CommitmentDiscountUsage_transform_v1_0() // Recommendations_raw table .create-merge table Recommendations_raw ( CostWithNoReservedInstances: decimal, // MS CM EA resv reco 2024-05-01 - CostWithNoReservedInstances2: decimal, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces - FirstUsageDate: datetime, // MS CM EA resv reco 2024-05-01 - FirstUsageDate2: datetime, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces - InstanceFlexibilityGroup: string, // MS CM EA resv reco 2024-05-01 - InstanceFlexibilityGroup2: string, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces - InstanceFlexibilityRatio: decimal, // MS CM EA resv reco 2024-05-01 - InstanceFlexibilityRatio2: decimal, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces + CostWithNoReservedInstancesJson: string, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces and flag as JSON + FirstUsageDate: datetime, // MS CM EA/MCA resv reco 2024-05-01 -- Renamed for MCA + InstanceFlexibilityGroup: string, // MS CM EA/MCA resv reco 2024-05-01 -- Renamed for MCA + InstanceFlexibilityRatio: decimal, // MS CM EA/MCA resv reco 2024-05-01 -- Renamed for MCA Location: string, // MS CM EA+MCA resv reco 2024-05-01 LookBackPeriod: string, // MS CM EA+MCA resv reco 2024-05-01 - MeterId: string, // MS CM EA resv reco 2024-05-01 - MeterID: string, // MS CM MCA resv reco 2024-05-01 + MeterId: string, // MS CM EA/MCA resv reco 2024-05-01 -- Renamed for MCA NetSavings: decimal, // MS CM EA resv reco 2024-05-01 - NetSavings2: decimal, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces - NormalizedSize: string, // MS CM EA resv reco 2024-05-01 - NormalizedSize2: string, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces - RecommendedQuantity: decimal, // MS CM EA resv reco 2024-05-01 - RecommendedQuantity2: decimal, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces - RecommendedQuantityNormalized: decimal, // MS CM EA resv reco 2024-05-01 - RecommendedQuantityNormalized2: decimal, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces + NetSavingsJson: string, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces and flag as JSON + NormalizedSize: string, // MS CM EA/MCA resv reco 2024-05-01 -- Renamed for MCA + RecommendedQuantity: decimal, // MS CM EA/MCA resv reco 2024-05-01 -- Renamed for MCA + RecommendedQuantityNormalized: decimal, // MS CM EA/MCA resv reco 2024-05-01 -- Renamed for MCA ResourceType: string, // MS CM EA+MCA resv reco 2024-05-01 - Scope: string, // MS CM EA resv reco 2024-05-01 - scope: string, // MS CM MCA resv reco 2024-05-01 + Scope: string, // MS CM EA/MCA resv reco 2024-05-01 -- Renamed for MCA SKU: string, // MS CM EA resv reco 2024-05-01 - SkuName: string, // MS CM MCA resv reco 2024-05-01 - SkuProperties: string, // MS CM EA resv reco 2024-05-01 - SkuProperties2: string, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces + SkuName: string, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces + SkuProperties: string, // MS CM EA/MCA resv reco 2024-05-01 -- Renamed for MCA SubscriptionId: string, // MS CM EA+MCA resv reco 2024-05-01 Term: string, // MS CM EA+MCA resv reco 2024-05-01 TotalCostWithReservedInstances: decimal, // MS CM EA resv reco 2024-05-01 - TotalCostWithReservedInstances2: decimal, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces + TotalCostWithReservedInstancesJson: string, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces and flag as JSON x_SourceName: string, // Hubs add-on x_SourceProvider: string, // Hubs add-on x_SourceType: string, // Hubs add-on @@ -1393,36 +1399,27 @@ CommitmentDiscountUsage_transform_v1_0() ``` [ { "Column": "CostWithNoReservedInstances", "Properties": { "Field": "CostWithNoReservedInstances" } }, - { "Column": "CostWithNoReservedInstances2", "Properties": { "Field": "Cost With No ReservedInstances" } }, + { "Column": "CostWithNoReservedInstancesJson", "Properties": { "Field": "CostWithNoReservedInstancesJson" } }, { "Column": "FirstUsageDate", "Properties": { "Field": "FirstUsageDate" } }, - { "Column": "FirstUsageDate2", "Properties": { "Field": "First UsageDate" } }, { "Column": "InstanceFlexibilityGroup", "Properties": { "Field": "InstanceFlexibilityGroup" } }, - { "Column": "InstanceFlexibilityGroup2", "Properties": { "Field": "Instance Flexibility Group" } }, { "Column": "InstanceFlexibilityRatio", "Properties": { "Field": "InstanceFlexibilityRatio" } }, - { "Column": "InstanceFlexibilityRatio2", "Properties": { "Field": "Instance Flexibility Ratio" } }, { "Column": "Location", "Properties": { "Field": "Location" } }, { "Column": "LookBackPeriod", "Properties": { "Field": "LookBackPeriod" } }, { "Column": "MeterId", "Properties": { "Field": "MeterId" } }, - { "Column": "MeterID", "Properties": { "Field": "MeterID" } }, { "Column": "NetSavings", "Properties": { "Field": "NetSavings" } }, - { "Column": "NetSavings2", "Properties": { "Field": "Net Savings" } }, + { "Column": "NetSavingsJson", "Properties": { "Field": "NetSavingsJson" } }, { "Column": "NormalizedSize", "Properties": { "Field": "NormalizedSize" } }, - { "Column": "NormalizedSize2", "Properties": { "Field": "Normalized Size" } }, { "Column": "RecommendedQuantity", "Properties": { "Field": "RecommendedQuantity" } }, - { "Column": "RecommendedQuantity2", "Properties": { "Field": "Recommended Quantity" } }, { "Column": "RecommendedQuantityNormalized", "Properties": { "Field": "RecommendedQuantityNormalized" } }, - { "Column": "RecommendedQuantityNormalized2", "Properties": { "Field": "Recommended Quantity Normalized" } }, { "Column": "ResourceType", "Properties": { "Field": "ResourceType" } }, { "Column": "Scope", "Properties": { "Field": "Scope" } }, - { "Column": "scope", "Properties": { "Field": "scope" } }, { "Column": "SKU", "Properties": { "Field": "SKU" } }, { "Column": "SkuName", "Properties": { "Field": "SkuName" } }, { "Column": "SkuProperties", "Properties": { "Field": "SkuProperties" } }, - { "Column": "SkuProperties2", "Properties": { "Field": "Sku Properties" } }, { "Column": "SubscriptionId", "Properties": { "Field": "SubscriptionId" } }, { "Column": "Term", "Properties": { "Field": "Term" } }, { "Column": "TotalCostWithReservedInstances", "Properties": { "Field": "TotalCostWithReservedInstances" } }, - { "Column": "TotalCostWithReservedInstances2", "Properties": { "Field": "Total Cost With ReservedInstances" } }, + { "Column": "TotalCostWithReservedInstancesJson", "Properties": { "Field": "TotalCostWithReservedInstancesJson" } }, { "Column": "x_SourceName", "Properties": { "Field": "x_SourceName" } }, { "Column": "x_SourceProvider", "Properties": { "Field": "x_SourceProvider" } }, { "Column": "x_SourceType", "Properties": { "Field": "x_SourceType" } }, @@ -1437,7 +1434,7 @@ CommitmentDiscountUsage_transform_v1_0() // Recommendations_transform_v1_0 function .create-or-alter function -with (docstring='All recommendations transformed to FOCUS 1.0.', folder='Recommendations') +with (docstring = "All recommendations transformed to FOCUS 1.0.",folder = "Recommendations") Recommendations_transform_v1_0() { // NOTE: All open issues and questions are tracked @ https://github.com/microsoft/finops-toolkit/issues/1111 @@ -1451,6 +1448,7 @@ Recommendations_transform_v1_0() )) }; Recommendations_raw + | extend x_IngestionTime = ingestion_time() // // Set ProviderName | extend ProviderName = 'Microsoft' @@ -1461,20 +1459,13 @@ Recommendations_transform_v1_0() | extend x_SourceType = coalesce(x_SourceType, iff(ProviderName == 'Microsoft', 'ReservationRecommendations', '')) | extend x_SourceVersion = coalesce(x_SourceVersion, iff(ProviderName == 'Microsoft', '2023-05-01', '')) // - // Handle duplicated columns with spaces - | extend CostWithNoReservedInstances = coalesce(CostWithNoReservedInstances, CostWithNoReservedInstances2) - | extend FirstUsageDate = coalesce(FirstUsageDate, FirstUsageDate2) - | extend InstanceFlexibilityGroup = coalesce(InstanceFlexibilityGroup, InstanceFlexibilityGroup2) - | extend InstanceFlexibilityRatio = coalesce(InstanceFlexibilityRatio, InstanceFlexibilityRatio2) - | extend NetSavings = coalesce(NetSavings, NetSavings2) - | extend NormalizedSize = coalesce(NormalizedSize, NormalizedSize2) - | extend RecommendedQuantity = coalesce(RecommendedQuantity, RecommendedQuantity2) - | extend RecommendedQuantityNormalized = coalesce(RecommendedQuantityNormalized, RecommendedQuantityNormalized2) - | extend SkuProperties = coalesce(SkuProperties, SkuProperties2) - | extend TotalCostWithReservedInstances = coalesce(TotalCostWithReservedInstances, TotalCostWithReservedInstances2) + // Convert JSON cost columns to decimal + | extend CostWithNoReservedInstances = case(isnotempty(CostWithNoReservedInstances), CostWithNoReservedInstances, isnotempty(CostWithNoReservedInstancesJson), todecimal(extract(@'"value":([0-9\.]+)', 1, CostWithNoReservedInstancesJson)), CostWithNoReservedInstances) + | extend NetSavings = case(isnotempty(NetSavings), NetSavings, isnotempty(NetSavingsJson), todecimal(extract(@'"value":([0-9\.]+)', 1, NetSavingsJson)), NetSavings) + | extend TotalCostWithReservedInstances = case(isnotempty(TotalCostWithReservedInstances), TotalCostWithReservedInstances, isnotempty(TotalCostWithReservedInstancesJson), todecimal(extract(@'"value":([0-9\.]+)', 1, TotalCostWithReservedInstancesJson)), TotalCostWithReservedInstances) // // Build recommendation details - | lookup kind=leftouter (database('Ingestion').Regions | distinct Location = RegionId, RegionName) on Location + | lookup kind=leftouter (database('Ingestion').Regions | summarize RegionName = make_set(RegionName)[0] by Location = RegionId) on Location | extend x_RecommendationDetails = case( x_SourceType == 'ReservationRecommendations', bag_pack( 'CommitmentDiscountNormalizedGroup', InstanceFlexibilityGroup, @@ -1484,6 +1475,7 @@ Recommendations_transform_v1_0() 'CommitmentDiscountScope', coalesce(Scope, scope), 'LookbackPeriodDuration', case( LookBackPeriod matches regex @'^Last([0-9]+)Days$', replace_regex(LookBackPeriod, @'^Last([0-9]+)Days$', @'P\1D'), + LookBackPeriod matches regex @'^[0-9]+$', strcat('P', LookBackPeriod, 'D'), '' ), 'LookbackPeriodStart', FirstUsageDate, @@ -1500,19 +1492,21 @@ Recommendations_transform_v1_0() ) // // Sort columns and apply final transforms + | extend x_RecommendationDate = FirstUsageDate + (toint(extract(@'^P([0-9]+)D$', 1, tostring(x_RecommendationDetails.LookbackPeriodDuration))) * 1d) + | extend x_RecommendationDate = iff(x_RecommendationDate > now(), startofday(now()), x_RecommendationDate) | project - ProviderName, - SubAccountId = iff(isnotempty(SubscriptionId), strcat('/subscriptions/', SubscriptionId), ''), - x_IngestionTime = ingestion_time(), - x_EffectiveCostAfter = TotalCostWithReservedInstances, - x_EffectiveCostBefore = CostWithNoReservedInstances, - x_EffectiveCostSavings = NetSavings, - x_RecommendationDate = FirstUsageDate + (toint(extract(@'^Last([0-9]+)Days$', 1, LookBackPeriod)) * 1d), - x_RecommendationDetails, - x_SourceName, - x_SourceProvider, - x_SourceType, - x_SourceVersion + ProviderName, + SubAccountId = iff(isnotempty(SubscriptionId), strcat('/subscriptions/', SubscriptionId), ''), + x_IngestionTime, + x_EffectiveCostAfter = TotalCostWithReservedInstances, + x_EffectiveCostBefore = CostWithNoReservedInstances, + x_EffectiveCostSavings = NetSavings, + x_RecommendationDate, + x_RecommendationDetails, + x_SourceName, + x_SourceProvider, + x_SourceType, + x_SourceVersion } //---------------------------------------------------------------------------------------------------------------------- diff --git a/src/templates/finops-hub/modules/scripts/OpenDataFunctions_resource_type_1.kql b/src/templates/finops-hub/modules/scripts/OpenDataFunctions_resource_type_1.kql index 5ce22fc54..eb594de2d 100644 --- a/src/templates/finops-hub/modules/scripts/OpenDataFunctions_resource_type_1.kql +++ b/src/templates/finops-hub/modules/scripts/OpenDataFunctions_resource_type_1.kql @@ -5,10 +5,15 @@ with (docstring = 'Return details about the specified ID.', folder = 'OpenData/Internal') _resource_type_1(id: string) { dynamic({ - "arizeai.observabilityeval/organizations": { "SingularDisplayName": "Azure Native ArizeAi Cloud Service" } - ,"astronomer.astro/organizations": { "SingularDisplayName": "Astro organization" } + "arizeai.observabilityeval/organizations": { "SingularDisplayName": "Azure Native Arize AI Cloud Service" } + ,"astronomer.astro/organizations": { "SingularDisplayName": "Astro Organization" } ,"citrix.services/xenappessentials": { "SingularDisplayName": "Citrix Virtual Apps Essentials" } ,"citrix.services/xendesktopessentials": { "SingularDisplayName": "Citrix Virtual Desktops Essentials" } + ,"commvault.contentstore/cloudaccounts": { "SingularDisplayName": "Commvault Cloud Account" } + ,"commvault.contentstore/cloudaccounts/plans": { "SingularDisplayName": "Commvault.ContentStore cloud accounts plan" } + ,"commvault.contentstore/cloudaccounts/protectiongroups": { "SingularDisplayName": "Commvault.ContentStore cloud accounts protection group" } + ,"commvault.contentstore/cloudaccounts/protectiongroups/protecteditems": { "SingularDisplayName": "Commvault.ContentStore cloud accounts protection groups protected item" } + ,"commvault.contentstore/cloudaccounts/storages": { "SingularDisplayName": "Commvault.ContentStore cloud accounts storage" } ,"dell.storage/filesystems": { "SingularDisplayName": "Dell APEX File Storage, An Azure Native Service" } ,"dynatrace.observability/monitors": { "SingularDisplayName": "Dynatrace" } ,"github.network/networksettings": { "SingularDisplayName": "GitHub.Network network setting" } @@ -18,15 +23,17 @@ _resource_type_1(id: string) { ,"microsoft.aadiam/diagnosticsettings": { "SingularDisplayName": "Microsoft.aadiam diagnostic setting" } ,"microsoft.aadiam/privatelinkforazuread": { "SingularDisplayName": "Private Link for Microsoft Entra ID" } ,"microsoft.advisor/advisorscore": { "SingularDisplayName": "Microsoft.Advisor advisor score" } + ,"microsoft.advisor/assessments": { "SingularDisplayName": "Microsoft.Advisor assessment" } ,"microsoft.advisor/configurations": { "SingularDisplayName": "Microsoft.Advisor configuration" } ,"microsoft.advisor/generaterecommendations": { "SingularDisplayName": "Microsoft.Advisor generate recommendation" } ,"microsoft.advisor/metadata": { "SingularDisplayName": "Microsoft.Advisor metadata" } ,"microsoft.advisor/recommendations": { "SingularDisplayName": "Microsoft.Advisor recommendation" } ,"microsoft.advisor/recommendations/suppressions": { "SingularDisplayName": "Microsoft.Advisor recommendations suppression" } + ,"microsoft.advisor/resiliencyreviews": { "SingularDisplayName": "Microsoft.Advisor resiliency review" } ,"microsoft.agfoodplatform/farmbeats": { "SingularDisplayName": "Azure Data Manager for Agriculture" } ,"microsoft.agfoodplatform/farmbeatsextensiondefinitions": { "SingularDisplayName": "Microsoft.AgFoodPlatform farm beats extension definition" } ,"microsoft.agfoodplatform/farmbeatssolutiondefinitions": { "SingularDisplayName": "Microsoft.AgFoodPlatform farm beats solution definition" } - ,"microsoft.agricultureplatform/agriservices": { "SingularDisplayName": "Microsoft.AgriculturePlatform agri service" } + ,"microsoft.agricultureplatform/agriservices": { "SingularDisplayName": "Agriculture data solutions" } ,"microsoft.akshybrid/agentpools": { "SingularDisplayName": "Microsoft.AksHybrid agent pool" } ,"microsoft.akshybrid/provisionedclusters": { "SingularDisplayName": "Microsoft.AksHybrid provisioned cluster" } ,"microsoft.akshybrid/upgradeprofiles": { "SingularDisplayName": "Microsoft.AksHybrid upgrade profile" } @@ -38,7 +45,7 @@ _resource_type_1(id: string) { ,"microsoft.alertsmanagement/smartgroups": { "SingularDisplayName": "Microsoft.AlertsManagement smart group" } ,"microsoft.alertsmanagement/tenantactivitylogalerts": { "SingularDisplayName": "Microsoft.AlertsManagement tenant activity log alert" } ,"microsoft.all/arcvirtualmachines": { "SingularDisplayName": "Azure Arc virtual machine" } - ,"microsoft.all/hcivirtualmachines": { "SingularDisplayName": "Azure Stack HCI Virtual Machine - Azure Arc" } + ,"microsoft.all/hcivirtualmachines": { "SingularDisplayName": "Azure Local Virtual Machine - Azure Arc" } ,"microsoft.all/virtualmachines": { "SingularDisplayName": "Virtual machine" } ,"microsoft.analysisservices/servers": { "SingularDisplayName": "Analysis Services server" } ,"microsoft.anybuild/clusters": { "SingularDisplayName": "AnyBuild cluster" } @@ -71,9 +78,11 @@ _resource_type_1(id: string) { ,"microsoft.appcomplianceautomation/reports/evidences": { "SingularDisplayName": "Microsoft.AppComplianceAutomation reports evidence" } ,"microsoft.appcomplianceautomation/reports/scopingconfigurations": { "SingularDisplayName": "Microsoft.AppComplianceAutomation reports scoping configuration" } ,"microsoft.appcomplianceautomation/reports/snapshots": { "SingularDisplayName": "Microsoft.AppComplianceAutomation reports snapshot" } + ,"microsoft.appcomplianceautomation/reports/snapshots/controls": { "SingularDisplayName": "Microsoft.AppComplianceAutomation reports snapshots control" } ,"microsoft.appcomplianceautomation/reports/webhooks": { "SingularDisplayName": "Microsoft.AppComplianceAutomation reports webhook" } ,"microsoft.appconfiguration/configurationstores": { "SingularDisplayName": "App Configuration" } ,"microsoft.appplatform/spring": { "SingularDisplayName": "Azure Spring Apps" } + ,"microsoft.appsecurity/appprotectmanagedrulesetmanifests": { "SingularDisplayName": "Microsoft.AppSecurity app protect managed rule set manifest" } ,"microsoft.appsecurity/policies": { "SingularDisplayName": "App Protect Policy" } ,"microsoft.arc/all": { "SingularDisplayName": "Azure Arc enabled resource" } ,"microsoft.arc/allfairfax": { "SingularDisplayName": "Azure Arc enabled resource" } @@ -255,7 +264,9 @@ _resource_type_1(id: string) { ,"microsoft.azureactivedirectory/ciamdirectories": { "SingularDisplayName": "External Configuration Tenant" } ,"microsoft.azureactivedirectory/guestusages": { "SingularDisplayName": "Guest Usage" } ,"microsoft.azurearcdata/datacontrollers": { "SingularDisplayName": "Azure Arc data controller" } + ,"microsoft.azurearcdata/mysqlserver": { "SingularDisplayName": "MySql Server - Azure Arc" } ,"microsoft.azurearcdata/postgresinstances": { "SingularDisplayName": "PostgreSQL server ? Azure Arc" } + ,"microsoft.azurearcdata/postgressqlserver": { "SingularDisplayName": "PostgresSql Server - Azure Arc" } ,"microsoft.azurearcdata/sqlmanagedinstances": { "SingularDisplayName": "SQL managed instance - Azure Arc" } ,"microsoft.azurearcdata/sqlserveresulicenses": { "SingularDisplayName": "SQL Server ESU license" } ,"microsoft.azurearcdata/sqlserverinstances": { "SingularDisplayName": "SQL Server - Azure Arc" } @@ -264,16 +275,24 @@ _resource_type_1(id: string) { ,"microsoft.azurebusinesscontinuity/deletedunifiedprotecteditems": { "SingularDisplayName": "Microsoft.AzureBusinessContinuity deleted unified protected item" } ,"microsoft.azurebusinesscontinuity/unifiedprotecteditems": { "SingularDisplayName": "Microsoft.AzureBusinessContinuity unified protected item" } ,"microsoft.azurecis/aadapplications": { "SingularDisplayName": "Microsoft.AzureCis AAD application" } + ,"microsoft.azurecis/addressrecords": { "SingularDisplayName": "Microsoft.AzureCis address record" } ,"microsoft.azurecis/autopilotenvironments": { "SingularDisplayName": "Microsoft.AzureCis autopilot environment" } + ,"microsoft.azurecis/autopilotmachinefunctions": { "SingularDisplayName": "Microsoft.AzureCis autopilot machine function" } + ,"microsoft.azurecis/autopilotsoftwareloadbalancevirtualips": { "SingularDisplayName": "Microsoft.AzureCis auto pilot software load balance virtual IP" } + ,"microsoft.azurecis/canonicalnamerecords": { "SingularDisplayName": "Microsoft.AzureCis canonical name record" } ,"microsoft.azurecis/dsmsallowlists": { "SingularDisplayName": "Microsoft.AzureCis ds msallowlist" } + ,"microsoft.azurecis/dsmscertificates": { "SingularDisplayName": "Microsoft.AzureCis dsms certificate" } ,"microsoft.azurecis/dsmsrootfolders": { "SingularDisplayName": "Microsoft.AzureCis dsms root folder" } ,"microsoft.azurecis/dstsapplications": { "SingularDisplayName": "Microsoft.AzureCis dsts application" } ,"microsoft.azurecis/dstsserviceaccounts": { "SingularDisplayName": "Microsoft.AzureCis dsts service account" } ,"microsoft.azurecis/dstsserviceclientidentities": { "SingularDisplayName": "Microsoft.AzureCis dsts service client identity" } ,"microsoft.azurecis/genericgenevaactions": { "SingularDisplayName": "Microsoft.AzureCis generic geneva action" } ,"microsoft.azurecis/plannedquotas": { "SingularDisplayName": "Microsoft.AzureCis planned quota" } + ,"microsoft.azurecis/pointerrecords": { "SingularDisplayName": "Microsoft.AzureCis pointer record" } ,"microsoft.azurecis/publishconfigvalues": { "SingularDisplayName": "Microsoft.AzureCis publish config value" } ,"microsoft.azurecis/pushagentv2accounts": { "SingularDisplayName": "Microsoft.AzureCis push agent v2 account" } + ,"microsoft.azurecis/servicerecords": { "SingularDisplayName": "Microsoft.AzureCis service record" } + ,"microsoft.azurecis/sharedconfigvalues": { "SingularDisplayName": "Microsoft.AzureCis shared config value" } ,"microsoft.azuredatatransfer/connections": { "SingularDisplayName": "Connection" } ,"microsoft.azuredatatransfer/connections/flows": { "SingularDisplayName": "Flow" } ,"microsoft.azuredatatransfer/pipelines": { "SingularDisplayName": "Pipeline" } @@ -306,22 +325,25 @@ _resource_type_1(id: string) { ,"microsoft.azurestack/registrations": { "SingularDisplayName": "Microsoft.AzureStack registration" } ,"microsoft.azurestack/registrations/customersubscriptions": { "SingularDisplayName": "Microsoft.AzureStack registrations customer subscription" } ,"microsoft.azurestack/registrations/products": { "SingularDisplayName": "Microsoft.AzureStack registrations product" } - ,"microsoft.azurestackhci/clusters": { "SingularDisplayName": "Azure Stack HCI" } + ,"microsoft.azurestackhci/clusters": { "SingularDisplayName": "Azure Local" } + ,"microsoft.azurestackhci/devicepools": { "SingularDisplayName": "Microsoft.AzureStackHCI device pool" } ,"microsoft.azurestackhci/edgedevices": { "SingularDisplayName": "Microsoft.AzureStackHCI edge device" } ,"microsoft.azurestackhci/edgedevices/jobs": { "SingularDisplayName": "Microsoft.AzureStackHCI edge devices job" } + ,"microsoft.azurestackhci/edgemachines": { "SingularDisplayName": "Microsoft.AzureStackHCI edge machine" } + ,"microsoft.azurestackhci/edgemachines/jobs": { "SingularDisplayName": "Microsoft.AzureStackHCI edge machines job" } ,"microsoft.azurestackhci/edgenodepools": { "SingularDisplayName": "Azure Stack" } - ,"microsoft.azurestackhci/galleryimages": { "SingularDisplayName": "Azure Stack HCI Gallery image" } - ,"microsoft.azurestackhci/logicalnetworks": { "SingularDisplayName": "Azure Stack HCI Logical network" } - ,"microsoft.azurestackhci/marketplacegalleryimages": { "SingularDisplayName": "Azure Stack HCI Marketplace Gallery image" } - ,"microsoft.azurestackhci/networkinterfaces": { "SingularDisplayName": "Azure Stack HCI VM Network Interface" } - ,"microsoft.azurestackhci/networksecuritygroups": { "SingularDisplayName": "Microsoft.AzureStackHCI network security group" } + ,"microsoft.azurestackhci/galleryimages": { "SingularDisplayName": "Azure Local Gallery image" } + ,"microsoft.azurestackhci/logicalnetworks": { "SingularDisplayName": "Azure Local Logical network" } + ,"microsoft.azurestackhci/marketplacegalleryimages": { "SingularDisplayName": "Azure Local Marketplace Gallery image" } + ,"microsoft.azurestackhci/networkinterfaces": { "SingularDisplayName": "Azure Local VM Network Interface" } + ,"microsoft.azurestackhci/networksecuritygroups": { "SingularDisplayName": "Azure Local Network Security Group" } ,"microsoft.azurestackhci/networksecuritygroups/securityrules": { "SingularDisplayName": "Microsoft.AzureStackHCI network security groups security rule" } - ,"microsoft.azurestackhci/storagecontainers": { "SingularDisplayName": "Azure Stack HCI Storage path" } + ,"microsoft.azurestackhci/storagecontainers": { "SingularDisplayName": "Azure Local Storage path" } ,"microsoft.azurestackhci/virtualharddisks": { "SingularDisplayName": "Microsoft.AzureStackHCI virtual hard disk" } ,"microsoft.azurestackhci/virtualmachineinstances": { "SingularDisplayName": "Microsoft.AzureStackHCI virtual machine instance" } ,"microsoft.azurestackhci/virtualmachineinstances/guestagents": { "SingularDisplayName": "Microsoft.AzureStackHCI virtual machine instances guest agent" } ,"microsoft.azurestackhci/virtualmachineinstances/hybrididentitymetadata": { "SingularDisplayName": "Microsoft.AzureStackHCI virtual machine instances hybrid identity metadata" } - ,"microsoft.azurestackhci/virtualmachines": { "SingularDisplayName": "Azure Stack HCI virtual machine - Azure Arc" } + ,"microsoft.azurestackhci/virtualmachines": { "SingularDisplayName": "Azure Local virtual machine - Azure Arc" } ,"microsoft.azurestackhci/virtualnetworks": { "SingularDisplayName": "Microsoft.AzureStackHCI virtual network" } ,"microsoft.backupsolutions/vmwareapplications": { "SingularDisplayName": "Microsoft.BackupSolutions vmware application" } ,"microsoft.bakeryhybrid/pies": { "SingularDisplayName": "Microsoft.BakeryHybrid py" } @@ -329,6 +351,7 @@ _resource_type_1(id: string) { ,"microsoft.baremetal/baremetalconnections": { "SingularDisplayName": "Microsoft.BareMetal bare metal connection" } ,"microsoft.baremetal/crayservers": { "SingularDisplayName": "Cray Server" } ,"microsoft.baremetal/monitoringservers": { "SingularDisplayName": "Monitoring Server" } + ,"microsoft.baremetal/peeringsettings": { "SingularDisplayName": "Microsoft.BareMetal peering setting" } ,"microsoft.baremetalinfrastructure/baremetalinstances": { "SingularDisplayName": "BareMetal Instance" } ,"microsoft.baremetalinfrastructure/baremetalstorageinstances": { "SingularDisplayName": "Microsoft.BareMetalInfrastructure bare metal storage instance" } ,"microsoft.batch/batchaccounts": { "SingularDisplayName": "Batch account" } @@ -380,6 +403,7 @@ _resource_type_1(id: string) { ,"microsoft.billing/billingaccounts/invoicesections/products": { "SingularDisplayName": "Microsoft.Billing billing accounts invoice sections product" } ,"microsoft.billing/billingaccounts/invoicesections/transfers": { "SingularDisplayName": "Microsoft.Billing billing accounts invoice sections transfer" } ,"microsoft.billing/billingaccounts/lineofcredit": { "SingularDisplayName": "Microsoft.Billing billing accounts line of credit" } + ,"microsoft.billing/billingaccounts/migrations": { "SingularDisplayName": "Microsoft.Billing billing accounts migration" } ,"microsoft.billing/billingaccounts/paymentmethods": { "SingularDisplayName": "Microsoft.Billing billing accounts payment method" } ,"microsoft.billing/billingaccounts/policies": { "SingularDisplayName": "Microsoft.Billing billing accounts policy" } ,"microsoft.billing/billingaccounts/products": { "SingularDisplayName": "Microsoft.Billing billing accounts product" } @@ -427,6 +451,7 @@ _resource_type_1(id: string) { ,"microsoft.capacity/reservationorders/reservations": { "SingularDisplayName": "Reservation" } ,"microsoft.cascade/sites": { "SingularDisplayName": "Microsoft.Cascade site" } ,"microsoft.cdn/cdnwebapplicationfirewallpolicies": { "SingularDisplayName": "Content Delivery Network WAF policy" } + ,"microsoft.cdn/edgeactions": { "SingularDisplayName": "Edge Action" } ,"microsoft.cdn/profiles": { "SingularDisplayName": "Front Door and CDN profile" } ,"microsoft.cdn/profiles/afdendpoints": { "SingularDisplayName": "Endpoint" } ,"microsoft.cdn/profiles/afdendpoints/routes": { "SingularDisplayName": "Route" } @@ -444,6 +469,12 @@ _resource_type_1(id: string) { ,"microsoft.certify/testsuites": { "SingularDisplayName": "Microsoft.Certify test suite" } ,"microsoft.certify/validationjobs": { "SingularDisplayName": "Microsoft.Certify validation job" } ,"microsoft.changeanalysis/profile": { "SingularDisplayName": "Microsoft.ChangeAnalysis profile" } + ,"microsoft.changesafety/changestates": { "SingularDisplayName": "Microsoft.ChangeSafety change state" } + ,"microsoft.changesafety/changestates/stageprogressions": { "SingularDisplayName": "Microsoft.ChangeSafety change states stage progression" } + ,"microsoft.changesafety/stagemaps": { "SingularDisplayName": "Microsoft.ChangeSafety stage map" } + ,"microsoft.changesafety/validations": { "SingularDisplayName": "Microsoft.ChangeSafety validation" } + ,"microsoft.changesafety/validators": { "SingularDisplayName": "Microsoft.ChangeSafety validator" } + ,"microsoft.changesafety/validators/versions": { "SingularDisplayName": "Microsoft.ChangeSafety validators version" } ,"microsoft.chaos/experiments": { "SingularDisplayName": "Chaos Experiment" } ,"microsoft.chaos/privateaccesses": { "SingularDisplayName": "Agent Private Access" } ,"microsoft.chaos/targets": { "SingularDisplayName": "Microsoft.Chaos target" } @@ -459,6 +490,9 @@ _resource_type_1(id: string) { ,"microsoft.classicstorage/storageaccounts/osimages": { "SingularDisplayName": "OS image (classic)" } ,"microsoft.classicstorage/storageaccounts/vmimages": { "SingularDisplayName": "VM image (classic)" } ,"microsoft.cleanroom/cleanrooms": { "SingularDisplayName": "Microsoft.CleanRoom cleanroom" } + ,"microsoft.cleanroom/collaborations": { "SingularDisplayName": "Microsoft.CleanRoom collaboration" } + ,"microsoft.cleanroom/collaborations/contracts": { "SingularDisplayName": "Microsoft.CleanRoom collaborations contract" } + ,"microsoft.cleanroom/consortiums": { "SingularDisplayName": "Microsoft.CleanRoom consortium" } ,"microsoft.cleanroom/microservices": { "SingularDisplayName": "Microsoft.CleanRoom microservice" } ,"microsoft.cloud/hubs": { "SingularDisplayName": "FinOps hub" } ,"microsoft.clouddeviceplatform/delegatedidentities": { "SingularDisplayName": "Microsoft.CloudDevicePlatform delegated identity" } @@ -471,39 +505,5 @@ _resource_type_1(id: string) { ,"microsoft.clusterstor/nodes": { "SingularDisplayName": "ClusterStor" } ,"microsoft.codesigning/codesigningaccounts": { "SingularDisplayName": "Trusted Signing Account" } ,"microsoft.codespaces/plans": { "SingularDisplayName": "Microsoft.Codespaces plan" } - ,"microsoft.cognitiveservices/accounts": { "SingularDisplayName": "Azure AI services" } - ,"microsoft.cognitiveservices/commitmentplans": { "SingularDisplayName": "Microsoft.CognitiveServices commitment plan" } - ,"microsoft.cognitiveservices/commitmentplans/accountassociations": { "SingularDisplayName": "Microsoft.CognitiveServices commitment plans account association" } - ,"microsoft.communication/communicationservices": { "SingularDisplayName": "Communication Service" } - ,"microsoft.communication/emailservices": { "SingularDisplayName": "Email Communication Service" } - ,"microsoft.communication/emailservices/domains": { "SingularDisplayName": "Email Communication Services Domain" } - ,"microsoft.community/communitytrainings": { "SingularDisplayName": "Community Training" } - ,"microsoft.compositesolutions/compositesolutiondefinitions": { "SingularDisplayName": "Microsoft.CompositeSolutions composite solution definition" } - ,"microsoft.compositesolutions/compositesolutions": { "SingularDisplayName": "Microsoft.CompositeSolutions composite solution" } - ,"microsoft.compute/availabilitysets": { "SingularDisplayName": "Availability set" } - ,"microsoft.compute/capacityreservationgroups": { "SingularDisplayName": "Capacity Reservation Group" } - ,"microsoft.compute/capacityreservationgroups/capacityreservations": { "SingularDisplayName": "Capacity reservation" } - ,"microsoft.compute/capacityreservationgroupscomputehub": { "SingularDisplayName": "Capacity Reservation Group" } - ,"microsoft.compute/cloudservices": { "SingularDisplayName": "Cloud service (extended support)" } - ,"microsoft.compute/computefleetinstances": { "SingularDisplayName": "Instance" } - ,"microsoft.compute/diskaccesses": { "SingularDisplayName": "Disk Access" } - ,"microsoft.compute/diskencryptionsets": { "SingularDisplayName": "Disk Encryption Set" } - ,"microsoft.compute/disks": { "SingularDisplayName": "Disk" } - ,"microsoft.compute/galleries": { "SingularDisplayName": "Azure compute gallery" } - ,"microsoft.compute/galleries/applications": { "SingularDisplayName": "VM application definition" } - ,"microsoft.compute/galleries/applications/versions": { "SingularDisplayName": "VM application version" } - ,"microsoft.compute/galleries/images": { "SingularDisplayName": "VM image definition" } - ,"microsoft.compute/galleries/images/versions": { "SingularDisplayName": "VM image version" } - ,"microsoft.compute/galleries/imagescomputehub": { "SingularDisplayName": "VM image definition" } - ,"microsoft.compute/hostgroups": { "SingularDisplayName": "Host group" } - ,"microsoft.compute/hostgroups/hosts": { "SingularDisplayName": "Host" } - ,"microsoft.compute/hostgroupscomputehub": { "SingularDisplayName": "Host group" } - ,"microsoft.compute/images": { "SingularDisplayName": "Image" } - ,"microsoft.compute/imagescomputehub": { "SingularDisplayName": "Image" } - ,"microsoft.compute/locations/communitygalleries/images": { "SingularDisplayName": "Community image" } - ,"microsoft.compute/locations/communitygalleries/imagescomputehub": { "SingularDisplayName": "Community image" } - ,"microsoft.compute/proximityplacementgroups": { "SingularDisplayName": "Proximity placement group" } - ,"microsoft.compute/proximityplacementgroupscomputehub": { "SingularDisplayName": "Proximity placement group" } - ,"microsoft.compute/restorepointcollections": { "SingularDisplayName": "Restore Point Collection" } })[tolower(id)] } diff --git a/src/templates/finops-hub/modules/scripts/OpenDataFunctions_resource_type_2.kql b/src/templates/finops-hub/modules/scripts/OpenDataFunctions_resource_type_2.kql index 141e951b0..3eef69135 100644 --- a/src/templates/finops-hub/modules/scripts/OpenDataFunctions_resource_type_2.kql +++ b/src/templates/finops-hub/modules/scripts/OpenDataFunctions_resource_type_2.kql @@ -5,7 +5,42 @@ with (docstring = 'Return details about the specified ID.', folder = 'OpenData/Internal') _resource_type_2(id: string) { dynamic({ - "microsoft.compute/restorepointcollections/restorepoints": { "SingularDisplayName": "Restore Point" } + "microsoft.cognitiveservices/accounts": { "SingularDisplayName": "Azure AI services" } + ,"microsoft.cognitiveservices/commitmentplans": { "SingularDisplayName": "Microsoft.CognitiveServices commitment plan" } + ,"microsoft.cognitiveservices/commitmentplans/accountassociations": { "SingularDisplayName": "Microsoft.CognitiveServices commitment plans account association" } + ,"microsoft.communication/communicationservices": { "SingularDisplayName": "Communication Service" } + ,"microsoft.communication/emailservices": { "SingularDisplayName": "Email Communication Service" } + ,"microsoft.communication/emailservices/domains": { "SingularDisplayName": "Email Communication Services Domain" } + ,"microsoft.community/communitytrainings": { "SingularDisplayName": "Community Training" } + ,"microsoft.compositesolutions/compositesolutiondefinitions": { "SingularDisplayName": "Microsoft.CompositeSolutions composite solution definition" } + ,"microsoft.compositesolutions/compositesolutions": { "SingularDisplayName": "Microsoft.CompositeSolutions composite solution" } + ,"microsoft.compute/availabilitysets": { "SingularDisplayName": "Availability set" } + ,"microsoft.compute/capacityreservationgroups": { "SingularDisplayName": "Capacity Reservation Group" } + ,"microsoft.compute/capacityreservationgroups/capacityreservations": { "SingularDisplayName": "Capacity reservation" } + ,"microsoft.compute/capacityreservationgroupscomputehub": { "SingularDisplayName": "Capacity Reservation Group" } + ,"microsoft.compute/cloudservices": { "SingularDisplayName": "Cloud service (extended support)" } + ,"microsoft.compute/computefleetinstances": { "SingularDisplayName": "Instance" } + ,"microsoft.compute/computefleetscalesets": { "SingularDisplayName": "Virtual machine scale set" } + ,"microsoft.compute/diskaccesses": { "SingularDisplayName": "Disk Access" } + ,"microsoft.compute/diskencryptionsets": { "SingularDisplayName": "Disk Encryption Set" } + ,"microsoft.compute/disks": { "SingularDisplayName": "Disk" } + ,"microsoft.compute/galleries": { "SingularDisplayName": "Azure compute gallery" } + ,"microsoft.compute/galleries/applications": { "SingularDisplayName": "VM application definition" } + ,"microsoft.compute/galleries/applications/versions": { "SingularDisplayName": "VM application version" } + ,"microsoft.compute/galleries/images": { "SingularDisplayName": "VM image definition" } + ,"microsoft.compute/galleries/images/versions": { "SingularDisplayName": "VM image version" } + ,"microsoft.compute/galleries/imagescomputehub": { "SingularDisplayName": "VM image definition" } + ,"microsoft.compute/hostgroups": { "SingularDisplayName": "Host group" } + ,"microsoft.compute/hostgroups/hosts": { "SingularDisplayName": "Host" } + ,"microsoft.compute/hostgroupscomputehub": { "SingularDisplayName": "Host group" } + ,"microsoft.compute/images": { "SingularDisplayName": "Image" } + ,"microsoft.compute/imagescomputehub": { "SingularDisplayName": "Image" } + ,"microsoft.compute/locations/communitygalleries/images": { "SingularDisplayName": "Community image" } + ,"microsoft.compute/locations/communitygalleries/imagescomputehub": { "SingularDisplayName": "Community image" } + ,"microsoft.compute/proximityplacementgroups": { "SingularDisplayName": "Proximity placement group" } + ,"microsoft.compute/proximityplacementgroupscomputehub": { "SingularDisplayName": "Proximity placement group" } + ,"microsoft.compute/restorepointcollections": { "SingularDisplayName": "Restore Point Collection" } + ,"microsoft.compute/restorepointcollections/restorepoints": { "SingularDisplayName": "Restore Point" } ,"microsoft.compute/snapshots": { "SingularDisplayName": "Snapshot" } ,"microsoft.compute/sshpublickeys": { "SingularDisplayName": "SSH key" } ,"microsoft.compute/standbypoolinstance": { "SingularDisplayName": "Standby pool" } @@ -17,6 +52,7 @@ _resource_type_2(id: string) { ,"microsoft.compute/virtualmachinescalesets/providers/guestconfigurationassignments": { "SingularDisplayName": "Guest Assignment" } ,"microsoft.compute/virtualmachinescalesets/virtualmachines": { "SingularDisplayName": "Virtual machine scale set instance" } ,"microsoft.compute/virtualmachinescalesets/virtualmachines/networkinterfaces/ipconfigurations/publicipaddresses": { "SingularDisplayName": "Public IP address" } + ,"microsoft.compute/virtualmachinescalesetscomputehub": { "SingularDisplayName": "Virtual machine scale set" } ,"microsoft.computehub/advisorcost": { "SingularDisplayName": "Recommendations" } ,"microsoft.computehub/advisoroperationalexcellence": { "SingularDisplayName": "Recommendations" } ,"microsoft.computehub/advisorperformance": { "SingularDisplayName": "Recommendations" } @@ -36,14 +72,14 @@ _resource_type_2(id: string) { ,"microsoft.computehub/provisioningstatefailedresources": { "SingularDisplayName": "Provisioning states" } ,"microsoft.computehub/provisioningstatesucceededresources": { "SingularDisplayName": "Provisioning states" } ,"microsoft.computehub/windowsostype": { "SingularDisplayName": "Windows OS" } - ,"microsoft.computeschedule/autoactions": { "SingularDisplayName": "Microsoft.ComputeSchedule auto action" } + ,"microsoft.computeschedule/autoactions": { "SingularDisplayName": "Automatic Action" } ,"microsoft.computeschedule/autoactions/occurrences": { "SingularDisplayName": "Microsoft.ComputeSchedule auto actions occurrence" } ,"microsoft.confidentialledger/ledgers": { "SingularDisplayName": "Confidential Ledger" } ,"microsoft.confidentialledger/managedccfs": { "SingularDisplayName": "Managed CCF App" } ,"microsoft.confluent/agreements": { "SingularDisplayName": "Microsoft.Confluent agreement" } ,"microsoft.confluent/organizations": { "SingularDisplayName": "Confluent organization" } - ,"microsoft.connectedcache/cachenodes": { "SingularDisplayName": "Connected Cache for ISP (early preview)" } - ,"microsoft.connectedcache/enterprisecustomers": { "SingularDisplayName": "Connected Cache for Enterprise & Education (early preview)" } + ,"microsoft.connectedcache/cachenodes": { "SingularDisplayName": "Connected Cache for ISP" } + ,"microsoft.connectedcache/enterprisecustomers": { "SingularDisplayName": "Connected Cache for Enterprise & Education" } ,"microsoft.connectedcache/enterprisemcccustomers": { "SingularDisplayName": "Connected Cache for Enterprise & Education" } ,"microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes": { "SingularDisplayName": "MCC CacheNode for Enterprise" } ,"microsoft.connectedcache/ispcustomers": { "SingularDisplayName": "Connected Cache for ISP" } @@ -81,13 +117,6 @@ _resource_type_2(id: string) { ,"microsoft.containerservice/managedclustersnapshots": { "SingularDisplayName": "Microsoft.ContainerService managedclustersnapshot" } ,"microsoft.containerservice/snapshots": { "SingularDisplayName": "Microsoft.ContainerService snapshot" } ,"microsoft.containerstorage/pools": { "SingularDisplayName": "Container storage" } - ,"microsoft.contoso/clusters": { "SingularDisplayName": "Microsoft.Contoso cluster" } - ,"microsoft.contoso/employees": { "SingularDisplayName": "Microsoft.Contoso employee" } - ,"microsoft.contoso/employees/desks": { "SingularDisplayName": "Microsoft.Contoso employees desk" } - ,"microsoft.contoso/employees/nestedresourcetype": { "SingularDisplayName": "Microsoft.Contoso employees nested resource type" } - ,"microsoft.contoso/employees/privateendpointconnections": { "SingularDisplayName": "Microsoft.Contoso employees private endpoint connection" } - ,"microsoft.contoso/employees/privatelinkresources": { "SingularDisplayName": "Microsoft.Contoso employees private link resource" } - ,"microsoft.contoso/extensionresourcetype": { "SingularDisplayName": "Microsoft.Contoso extension resource type" } ,"microsoft.costmanagement/alerts": { "SingularDisplayName": "Microsoft.CostManagement alert" } ,"microsoft.costmanagement/budgets": { "SingularDisplayName": "Microsoft.CostManagement budget" } ,"microsoft.costmanagement/cloudconnectors": { "SingularDisplayName": "Microsoft.CostManagement cloud connector" } @@ -108,18 +137,19 @@ _resource_type_2(id: string) { ,"microsoft.customerlockbox/tenantoptedin": { "SingularDisplayName": "Microsoft.CustomerLockbox tenant opted in" } ,"microsoft.customproviders/associations": { "SingularDisplayName": "Microsoft.CustomProviders association" } ,"microsoft.customproviders/resourceproviders": { "SingularDisplayName": "Microsoft.CustomProviders resource provider" } + ,"microsoft.dashboard/dashboards": { "SingularDisplayName": "Azure Monitor Dashboard" } ,"microsoft.dashboard/grafana": { "SingularDisplayName": "Azure Managed Grafana" } ,"microsoft.dataaccelerator/indexclusters": { "SingularDisplayName": "Microsoft.DataAccelerator index cluster" } ,"microsoft.databasefleetmanager/fleets": { "SingularDisplayName": "Database fleet manager" } ,"microsoft.databasefleetmanager/fleets/fleetspaces": { "SingularDisplayName": "Fleetspaces" } - ,"microsoft.databasefleetmanager/fleets/fleetspaces/databases": { "SingularDisplayName": "Fleet Managed Database" } + ,"microsoft.databasefleetmanager/fleets/fleetspaces/databases": { "SingularDisplayName": "Fleet managed database" } ,"microsoft.databasefleetmanager/fleets/tiers": { "SingularDisplayName": "tier" } ,"microsoft.databasewatcher/watchers": { "SingularDisplayName": "Database watcher" } ,"microsoft.databox/jobs": { "SingularDisplayName": "Azure Data Box" } ,"microsoft.databoxedge/databoxedgedevices": { "SingularDisplayName": "Azure Stack Edge / Data Box Gateway" } ,"microsoft.databricks/accessconnectors": { "SingularDisplayName": "Access Connector for Azure Databricks" } ,"microsoft.databricks/workspaces": { "SingularDisplayName": "Azure Databricks Service" } - ,"microsoft.datacatalog/catalogs": { "SingularDisplayName": "Data Catalog" } + ,"microsoft.datacatalog/catalogs": { "SingularDisplayName": "Data catalog" } ,"microsoft.datacollaboration/workspaces": { "SingularDisplayName": "Project CI" } ,"microsoft.datadog/agreements": { "SingularDisplayName": "Microsoft.Datadog agreement" } ,"microsoft.datadog/monitors": { "SingularDisplayName": "Datadog" } @@ -147,6 +177,9 @@ _resource_type_2(id: string) { ,"microsoft.datareplication/replicationvaults/jobs": { "SingularDisplayName": "Microsoft.DataReplication replication vaults job" } ,"microsoft.datareplication/replicationvaults/jobs/operations": { "SingularDisplayName": "Microsoft.DataReplication replication vaults jobs operation" } ,"microsoft.datareplication/replicationvaults/operations": { "SingularDisplayName": "Microsoft.DataReplication replication vaults operation" } + ,"microsoft.datareplication/replicationvaults/privateendpointconnectionproxies": { "SingularDisplayName": "Microsoft.DataReplication replication vaults private endpoint connection proxy" } + ,"microsoft.datareplication/replicationvaults/privateendpointconnections": { "SingularDisplayName": "Microsoft.DataReplication replication vaults private endpoint connection" } + ,"microsoft.datareplication/replicationvaults/privatelinkresources": { "SingularDisplayName": "Microsoft.DataReplication replication vaults private link resource" } ,"microsoft.datareplication/replicationvaults/protecteditems": { "SingularDisplayName": "Microsoft.DataReplication replication vaults protected item" } ,"microsoft.datareplication/replicationvaults/protecteditems/operations": { "SingularDisplayName": "Microsoft.DataReplication replication vaults protected items operation" } ,"microsoft.datareplication/replicationvaults/protecteditems/recoverypoints": { "SingularDisplayName": "Microsoft.DataReplication replication vaults protected items recovery point" } @@ -158,7 +191,7 @@ _resource_type_2(id: string) { ,"microsoft.dbformariadb/servers": { "SingularDisplayName": "Azure Database for MariaDB server" } ,"microsoft.dbformysql/flexibleservers": { "SingularDisplayName": "Azure Database for MySQL flexible server" } ,"microsoft.dbformysql/servers": { "SingularDisplayName": "MySQL server" } - ,"microsoft.dbforpostgresql/flexibleservers": { "SingularDisplayName": "Azure Database for PostgreSQL - Flexible Server" } + ,"microsoft.dbforpostgresql/flexibleservers": { "SingularDisplayName": "Azure Database for PostgreSQL flexible server" } ,"microsoft.dbforpostgresql/servergroupsv2": { "SingularDisplayName": "Azure Cosmos DB for PostgreSQL Cluster" } ,"microsoft.dbforpostgresql/servers": { "SingularDisplayName": "PostgreSQL server" } ,"microsoft.delegatednetwork/controller": { "SingularDisplayName": "Microsoft.DelegatedNetwork controller" } @@ -189,16 +222,26 @@ _resource_type_2(id: string) { ,"microsoft.devcenter/projects/pools": { "SingularDisplayName": "Pool" } ,"microsoft.developmentwindows365/developmentcloudpcdelegatedmsis": { "SingularDisplayName": "Microsoft.DevelopmentWindows365 development cloud pc delegated msi" } ,"microsoft.devhub/iacprofiles": { "SingularDisplayName": "Infrastructure as Code Automation" } + ,"microsoft.devhub/templates": { "SingularDisplayName": "Microsoft.DevHub template" } + ,"microsoft.devhub/templates/versions": { "SingularDisplayName": "Microsoft.DevHub templates version" } ,"microsoft.devhub/workflows": { "SingularDisplayName": "Microsoft.DevHub workflow" } + ,"microsoft.deviceonboarding/discoveryservices": { "SingularDisplayName": "Microsoft.DeviceOnboarding discovery service" } + ,"microsoft.deviceonboarding/discoveryservices/ownershipvoucherpublickeys": { "SingularDisplayName": "Microsoft.DeviceOnboarding discovery services ownership voucher public key" } ,"microsoft.deviceonboarding/onboardingservices": { "SingularDisplayName": "Microsoft.DeviceOnboarding onboarding service" } ,"microsoft.deviceonboarding/onboardingservices/policies": { "SingularDisplayName": "Microsoft.DeviceOnboarding onboarding services policy" } - ,"microsoft.deviceregistry/assetendpointprofiles": { "SingularDisplayName": "Microsoft.DeviceRegistry asset endpoint profile" } + ,"microsoft.deviceregistry/assetendpointprofiles": { "SingularDisplayName": "IoT Asset Endpoint Profile" } ,"microsoft.deviceregistry/assets": { "SingularDisplayName": "IoT Asset" } ,"microsoft.deviceregistry/billingcontainers": { "SingularDisplayName": "Microsoft.DeviceRegistry billing container" } ,"microsoft.deviceregistry/devices": { "SingularDisplayName": "IoT Device" } ,"microsoft.deviceregistry/discoveredassetendpointprofiles": { "SingularDisplayName": "Microsoft.DeviceRegistry discovered asset endpoint profile" } ,"microsoft.deviceregistry/discoveredassets": { "SingularDisplayName": "Microsoft.DeviceRegistry discovered asset" } - ,"microsoft.deviceregistry/schemaregistries": { "SingularDisplayName": "Microsoft.DeviceRegistry schema registry" } + ,"microsoft.deviceregistry/namespaces": { "SingularDisplayName": "Microsoft.DeviceRegistry namespace" } + ,"microsoft.deviceregistry/namespaces/assetendpointprofiles": { "SingularDisplayName": "Microsoft.DeviceRegistry namespaces asset endpoint profile" } + ,"microsoft.deviceregistry/namespaces/assets": { "SingularDisplayName": "Microsoft.DeviceRegistry namespaces asset" } + ,"microsoft.deviceregistry/namespaces/devices": { "SingularDisplayName": "Microsoft.DeviceRegistry namespaces device" } + ,"microsoft.deviceregistry/namespaces/discoveredassetendpointprofiles": { "SingularDisplayName": "Microsoft.DeviceRegistry namespaces discovered asset endpoint profile" } + ,"microsoft.deviceregistry/namespaces/discoveredassets": { "SingularDisplayName": "Microsoft.DeviceRegistry namespaces discovered asset" } + ,"microsoft.deviceregistry/schemaregistries": { "SingularDisplayName": "IoT Schema Registry" } ,"microsoft.deviceregistry/schemaregistries/schemas": { "SingularDisplayName": "Microsoft.DeviceRegistry schema registries schema" } ,"microsoft.deviceregistry/schemaregistries/schemas/schemaversions": { "SingularDisplayName": "Microsoft.DeviceRegistry schema registries schemas schema version" } ,"microsoft.devices/iothubs": { "SingularDisplayName": "IoT hub" } @@ -221,13 +264,16 @@ _resource_type_2(id: string) { ,"microsoft.digitaltwins/digitaltwinsinstances": { "SingularDisplayName": "Azure Digital Twins" } ,"microsoft.documentdb/cassandraclusters": { "SingularDisplayName": "Azure Managed Instance for Apache Cassandra" } ,"microsoft.documentdb/databaseaccounts": { "SingularDisplayName": "Cosmos DB account" } + ,"microsoft.documentdb/fleets": { "SingularDisplayName": "Cosmos DB Fleet" } ,"microsoft.documentdb/mongoclusters": { "SingularDisplayName": "Azure Cosmos DB for MongoDB (vCore)" } ,"microsoft.documentdb/throughputpools": { "SingularDisplayName": "Microsoft.DocumentDB throughput pool" } ,"microsoft.documentdb/throughputpools/throughputpoolaccounts": { "SingularDisplayName": "Microsoft.DocumentDB throughput pools throughput pool account" } ,"microsoft.domainregistration/domains": { "SingularDisplayName": "App Service Domain" } ,"microsoft.domainregistration/topleveldomains": { "SingularDisplayName": "Microsoft.DomainRegistration top level domain" } - ,"microsoft.durabletask/namespaces": { "SingularDisplayName": "Durable Task Scheduler" } + ,"microsoft.durabletask/namespaces": { "SingularDisplayName": "Microsoft.DurableTask namespace" } ,"microsoft.durabletask/namespaces/taskhubs": { "SingularDisplayName": "Task Hub" } + ,"microsoft.durabletask/schedulers": { "SingularDisplayName": "Durable Task Scheduler" } + ,"microsoft.durabletask/schedulers/taskhubs": { "SingularDisplayName": "Task Hub" } ,"microsoft.dynamics365fraudprotection/instances": { "SingularDisplayName": "Microsoft.Dynamics365FraudProtection instance" } ,"microsoft.easm/workspaces": { "SingularDisplayName": "Microsoft Defender EASM" } ,"microsoft.edge/configurations": { "SingularDisplayName": "Site configuration" } @@ -239,13 +285,14 @@ _resource_type_2(id: string) { ,"microsoft.edge/configurations/securityconfigurations": { "SingularDisplayName": "Microsoft.Edge configurations security configuration" } ,"microsoft.edge/configurations/timeserverconfigurations": { "SingularDisplayName": "Microsoft.Edge configurations time server configuration" } ,"microsoft.edge/connectivitystatuses": { "SingularDisplayName": "Microsoft.Edge connectivity statuse" } + ,"microsoft.edge/disconnectedoperations": { "SingularDisplayName": "Azure Local - disconnected operations" } ,"microsoft.edge/siteawareresourcetypes": { "SingularDisplayName": "Microsoft.Edge site aware resource type" } ,"microsoft.edge/sites": { "SingularDisplayName": "Site manager - Azure Arc" } ,"microsoft.edge/updates": { "SingularDisplayName": "Microsoft.Edge update" } ,"microsoft.edgemarketplace/offers": { "SingularDisplayName": "Microsoft.EdgeMarketplace offer" } ,"microsoft.edgemarketplace/publishers": { "SingularDisplayName": "Microsoft.EdgeMarketplace publisher" } ,"microsoft.edgeorder/addresses": { "SingularDisplayName": "Azure Edge Hardware Center Address" } - ,"microsoft.edgeorder/bootstrapconfigurations": { "SingularDisplayName": "Site Bootstrap Key" } + ,"microsoft.edgeorder/bootstrapconfigurations": { "SingularDisplayName": "Site Key" } ,"microsoft.edgeorder/orderitems": { "SingularDisplayName": "Azure Edge Hardware Center" } ,"microsoft.edgeorder/virtual_orderitems": { "SingularDisplayName": "Device" } ,"microsoft.edgezones/extendedzones": { "SingularDisplayName": "Microsoft.EdgeZones extended zone" } @@ -322,9 +369,9 @@ _resource_type_2(id: string) { ,"microsoft.footprintmonitoring/profiles/measurementendpoints/conditions": { "SingularDisplayName": "Microsoft.FootprintMonitoring profiles measurement endpoints condition" } ,"microsoft.gallery/myareas/galleryitems": { "SingularDisplayName": "Template" } ,"microsoft.genomics/accounts": { "SingularDisplayName": "Genomics account" } - ,"microsoft.graph/azureadapplication": { "SingularDisplayName": "Microsoft.Graph Azure ad application" } + ,"microsoft.graph/azureadapplication": { "SingularDisplayName": "Entra application" } ,"microsoft.graph/azureadapplicationprototype": { "SingularDisplayName": "Microsoft.Graph Azure ad application prototype" } - ,"microsoft.graphservices/accounts": { "SingularDisplayName": "Metered API Account" } + ,"microsoft.graphservices/accounts": { "SingularDisplayName": "Metered API account" } ,"microsoft.guestconfiguration/guestconfigurationassignments": { "SingularDisplayName": "Microsoft.GuestConfiguration guest configuration assignment" } ,"microsoft.guestconfiguration/guestconfigurationassignments/reports": { "SingularDisplayName": "Microsoft.GuestConfiguration guest configuration assignments report" } ,"microsoft.hanaonazure/hanainstances": { "SingularDisplayName": "SAP HANA on Azure" } @@ -333,6 +380,7 @@ _resource_type_2(id: string) { ,"microsoft.hardwaresecuritymodules/cloudhsmclusters": { "SingularDisplayName": "Azure Cloud HSM" } ,"microsoft.hdinsight/clusterpools": { "SingularDisplayName": "Azure HDInsight on AKS cluster pool" } ,"microsoft.hdinsight/clusterpools/clusters": { "SingularDisplayName": "Azure HDInsight on AKS cluster" } + ,"microsoft.hdinsight/clusterpools/clusters/instanceviews": { "SingularDisplayName": "Microsoft.HDInsight clusterpools clusters instance view" } ,"microsoft.hdinsight/clusters": { "SingularDisplayName": "HDInsight cluster" } ,"microsoft.healthbot/healthbots": { "SingularDisplayName": "Healthcare agent service" } ,"microsoft.healthcareapis/services": { "SingularDisplayName": "Azure API for FHIR" } @@ -342,6 +390,7 @@ _resource_type_2(id: string) { ,"microsoft.healthcareapis/workspaces/iotconnectors": { "SingularDisplayName": "MedTech service" } ,"microsoft.healthdataaiservices/deidservices": { "SingularDisplayName": "De-identification Service" } ,"microsoft.healthmodel/healthmodels": { "SingularDisplayName": "Health Model" } + ,"microsoft.healthplatform/accounts": { "SingularDisplayName": "Microsoft.HealthPlatform account" } ,"microsoft.help/diagnostics": { "SingularDisplayName": "Microsoft.Help diagnostic" } ,"microsoft.help/selfhelp": { "SingularDisplayName": "Microsoft.Help self help" } ,"microsoft.help/simplifiedsolutions": { "SingularDisplayName": "Microsoft.Help simplified solution" } @@ -456,54 +505,5 @@ _resource_type_2(id: string) { ,"microsoft.intelligentitdigitaltwin/digitaltwins/assets": { "SingularDisplayName": "Microsoft.IntelligentITDigitalTwin digital twins asset" } ,"microsoft.intelligentitdigitaltwin/digitaltwins/executionplans": { "SingularDisplayName": "Microsoft.IntelligentITDigitalTwin digital twins execution plan" } ,"microsoft.intelligentitdigitaltwin/digitaltwins/testplans": { "SingularDisplayName": "Microsoft.IntelligentITDigitalTwin digital twins test plan" } - ,"microsoft.intelligentitdigitaltwin/digitaltwins/tests": { "SingularDisplayName": "Microsoft.IntelligentITDigitalTwin digital twins test" } - ,"microsoft.inventory/subscriptioninternalproperties": { "SingularDisplayName": "Microsoft.Inventory subscription internal property" } - ,"microsoft.iotcentral/iotapps": { "SingularDisplayName": "IoT Central Application" } - ,"microsoft.iotfirmwaredefense/workspaces": { "SingularDisplayName": "Microsoft.IoTFirmwareDefense workspace" } - ,"microsoft.iotfirmwaredefense/workspaces/firmwares": { "SingularDisplayName": "Microsoft.IoTFirmwareDefense workspaces firmware" } - ,"microsoft.iotfirmwaredefense/workspaces/firmwares/summaries": { "SingularDisplayName": "Microsoft.IoTFirmwareDefense workspaces firmwares summary" } - ,"microsoft.iotoperations/instances": { "SingularDisplayName": "Azure IoT Operations" } - ,"microsoft.iotoperations/instances/brokers": { "SingularDisplayName": "Microsoft.IoTOperations instances broker" } - ,"microsoft.iotoperations/instances/brokers/authentications": { "SingularDisplayName": "Microsoft.IoTOperations instances brokers authentication" } - ,"microsoft.iotoperations/instances/brokers/authorizations": { "SingularDisplayName": "Microsoft.IoTOperations instances brokers authorization" } - ,"microsoft.iotoperations/instances/brokers/listeners": { "SingularDisplayName": "Microsoft.IoTOperations instances brokers listener" } - ,"microsoft.iotoperations/instances/dataflowendpoints": { "SingularDisplayName": "Microsoft.IoTOperations instances dataflow endpoint" } - ,"microsoft.iotoperations/instances/dataflowprofiles": { "SingularDisplayName": "Microsoft.IoTOperations instances dataflow profile" } - ,"microsoft.iotoperations/instances/dataflowprofiles/dataflows": { "SingularDisplayName": "Microsoft.IoTOperations instances dataflow profiles dataflow" } - ,"microsoft.iotoperationsdataprocessor/instances": { "SingularDisplayName": "Microsoft.IoTOperationsDataProcessor instance" } - ,"microsoft.iotoperationsdataprocessor/instances/datasets": { "SingularDisplayName": "Microsoft.IoTOperationsDataProcessor instances dataset" } - ,"microsoft.iotoperationsdataprocessor/instances/pipelines": { "SingularDisplayName": "Microsoft.IoTOperationsDataProcessor instances pipeline" } - ,"microsoft.iotoperationsmq/mq": { "SingularDisplayName": "IoT Operations Ops MQ" } - ,"microsoft.iotoperationsorchestrator/instances": { "SingularDisplayName": "Microsoft.IoTOperationsOrchestrator instance" } - ,"microsoft.iotoperationsorchestrator/solutions": { "SingularDisplayName": "Microsoft.IoTOperationsOrchestrator solution" } - ,"microsoft.iotoperationsorchestrator/targets": { "SingularDisplayName": "Microsoft.IoTOperationsOrchestrator target" } - ,"microsoft.iotsecurity/alerttypes": { "SingularDisplayName": "Microsoft.IoTSecurity alert type" } - ,"microsoft.iotsecurity/defendersettings": { "SingularDisplayName": "Microsoft.IoTSecurity defender setting" } - ,"microsoft.iotsecurity/onpremisesensors": { "SingularDisplayName": "Microsoft.IoTSecurity on premise sensor" } - ,"microsoft.iotsecurity/recommendationtypes": { "SingularDisplayName": "Microsoft.IoTSecurity recommendation type" } - ,"microsoft.iotsecurity/sensors": { "SingularDisplayName": "Microsoft.IoTSecurity sensor" } - ,"microsoft.iotsecurity/sites": { "SingularDisplayName": "Microsoft.IoTSecurity site" } - ,"microsoft.keyvault/managedhsms": { "SingularDisplayName": "Azure Key Vault Managed HSM" } - ,"microsoft.keyvault/vaults": { "SingularDisplayName": "Key vault" } - ,"microsoft.kubernetes/connectedclusters": { "SingularDisplayName": "kubernetes 1 - Azure Arc" } - ,"microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/extensions": { "SingularDisplayName": "Kubernetes - Azure Arc extension" } - ,"microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations": { "SingularDisplayName": "GitOps configuration" } - ,"microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces": { "SingularDisplayName": "Kubernetes - Azure Arc namespace" } - ,"microsoft.kubernetesconfiguration/extensions": { "SingularDisplayName": "Kubernetes service extension" } - ,"microsoft.kubernetesconfiguration/extensiontypes": { "SingularDisplayName": "Microsoft.KubernetesConfiguration extension type" } - ,"microsoft.kubernetesconfiguration/extensiontypes/versions": { "SingularDisplayName": "Microsoft.KubernetesConfiguration extension types version" } - ,"microsoft.kubernetesconfiguration/fluxconfigurations": { "SingularDisplayName": "Microsoft.KubernetesConfiguration flux configuration" } - ,"microsoft.kubernetesconfiguration/fluxconfigurations/operations": { "SingularDisplayName": "Microsoft.KubernetesConfiguration flux configurations operation" } - ,"microsoft.kubernetesconfiguration/privatelinkscopes": { "SingularDisplayName": "Microsoft.KubernetesConfiguration private link scope" } - ,"microsoft.kubernetesconfiguration/privatelinkscopes/privateendpointconnections": { "SingularDisplayName": "Microsoft.KubernetesConfiguration private link scopes private endpoint connection" } - ,"microsoft.kubernetesconfiguration/privatelinkscopes/privatelinkresources": { "SingularDisplayName": "Microsoft.KubernetesConfiguration private link scopes private link resource" } - ,"microsoft.kubernetesconfiguration/sourcecontrolconfigurations": { "SingularDisplayName": "Microsoft.KubernetesConfiguration source control configuration" } - ,"microsoft.kubernetesruntime/bgppeers": { "SingularDisplayName": "Microsoft.KubernetesRuntime bgp peer" } - ,"microsoft.kubernetesruntime/loadbalancers": { "SingularDisplayName": "Arc Load Balancer" } - ,"microsoft.kubernetesruntime/services": { "SingularDisplayName": "Microsoft.KubernetesRuntime service" } - ,"microsoft.kubernetesruntime/storageclasses": { "SingularDisplayName": "Microsoft.KubernetesRuntime storage class" } - ,"microsoft.kusto/clusters": { "SingularDisplayName": "Azure Data Explorer Cluster" } - ,"microsoft.kusto/clusters/databases": { "SingularDisplayName": "Azure Data Explorer Database" } - ,"microsoft.labservices/labaccounts": { "SingularDisplayName": "Lab account" } })[tolower(id)] } diff --git a/src/templates/finops-hub/modules/scripts/OpenDataFunctions_resource_type_3.kql b/src/templates/finops-hub/modules/scripts/OpenDataFunctions_resource_type_3.kql index 71dafbe4f..99f325597 100644 --- a/src/templates/finops-hub/modules/scripts/OpenDataFunctions_resource_type_3.kql +++ b/src/templates/finops-hub/modules/scripts/OpenDataFunctions_resource_type_3.kql @@ -5,15 +5,77 @@ with (docstring = 'Return details about the specified ID.', folder = 'OpenData/Internal') _resource_type_3(id: string) { dynamic({ - "microsoft.labservices/labaccounts/labs": { "SingularDisplayName": "Lab" } + "microsoft.intelligentitdigitaltwin/digitaltwins/tests": { "SingularDisplayName": "Microsoft.IntelligentITDigitalTwin digital twins test" } + ,"microsoft.inventory/subscriptioninternalproperties": { "SingularDisplayName": "Microsoft.Inventory subscription internal property" } + ,"microsoft.iotcentral/iotapps": { "SingularDisplayName": "IoT Central Application" } + ,"microsoft.iotfirmwaredefense/workspaces": { "SingularDisplayName": "Firmware analysis workspace" } + ,"microsoft.iotfirmwaredefense/workspaces/firmwares": { "SingularDisplayName": "Microsoft.IoTFirmwareDefense workspaces firmware" } + ,"microsoft.iotfirmwaredefense/workspaces/firmwares/summaries": { "SingularDisplayName": "Microsoft.IoTFirmwareDefense workspaces firmwares summary" } + ,"microsoft.iotoperations/instances": { "SingularDisplayName": "Azure IoT Operations" } + ,"microsoft.iotoperations/instances/brokers": { "SingularDisplayName": "Microsoft.IoTOperations instances broker" } + ,"microsoft.iotoperations/instances/brokers/authentications": { "SingularDisplayName": "Microsoft.IoTOperations instances brokers authentication" } + ,"microsoft.iotoperations/instances/brokers/authorizations": { "SingularDisplayName": "Microsoft.IoTOperations instances brokers authorization" } + ,"microsoft.iotoperations/instances/brokers/listeners": { "SingularDisplayName": "Microsoft.IoTOperations instances brokers listener" } + ,"microsoft.iotoperations/instances/dataflowendpoints": { "SingularDisplayName": "Microsoft.IoTOperations instances dataflow endpoint" } + ,"microsoft.iotoperations/instances/dataflowprofiles": { "SingularDisplayName": "Microsoft.IoTOperations instances dataflow profile" } + ,"microsoft.iotoperations/instances/dataflowprofiles/dataflows": { "SingularDisplayName": "Microsoft.IoTOperations instances dataflow profiles dataflow" } + ,"microsoft.iotoperationsdataprocessor/instances": { "SingularDisplayName": "Microsoft.IoTOperationsDataProcessor instance" } + ,"microsoft.iotoperationsdataprocessor/instances/datasets": { "SingularDisplayName": "Microsoft.IoTOperationsDataProcessor instances dataset" } + ,"microsoft.iotoperationsdataprocessor/instances/pipelines": { "SingularDisplayName": "Microsoft.IoTOperationsDataProcessor instances pipeline" } + ,"microsoft.iotoperationsmq/mq": { "SingularDisplayName": "IoT Operations Ops MQ" } + ,"microsoft.iotoperationsmq/mq/broker": { "SingularDisplayName": "Microsoft.IoTOperationsMQ mq broker" } + ,"microsoft.iotoperationsmq/mq/broker/authentication": { "SingularDisplayName": "Microsoft.IoTOperationsMQ mq broker authentication" } + ,"microsoft.iotoperationsmq/mq/broker/authorization": { "SingularDisplayName": "Microsoft.IoTOperationsMQ mq broker authorization" } + ,"microsoft.iotoperationsmq/mq/broker/listener": { "SingularDisplayName": "Microsoft.IoTOperationsMQ mq broker listener" } + ,"microsoft.iotoperationsmq/mq/datalakeconnector": { "SingularDisplayName": "Microsoft.IoTOperationsMQ mq data lake connector" } + ,"microsoft.iotoperationsmq/mq/datalakeconnector/topicmap": { "SingularDisplayName": "Microsoft.IoTOperationsMQ mq data lake connector topic map" } + ,"microsoft.iotoperationsmq/mq/diagnosticservice": { "SingularDisplayName": "Microsoft.IoTOperationsMQ mq diagnostic service" } + ,"microsoft.iotoperationsmq/mq/kafkaconnector": { "SingularDisplayName": "Microsoft.IoTOperationsMQ mq kafka connector" } + ,"microsoft.iotoperationsmq/mq/kafkaconnector/topicmap": { "SingularDisplayName": "Microsoft.IoTOperationsMQ mq kafka connector topic map" } + ,"microsoft.iotoperationsmq/mq/mqttbridgeconnector": { "SingularDisplayName": "Microsoft.IoTOperationsMQ mq mqtt bridge connector" } + ,"microsoft.iotoperationsmq/mq/mqttbridgeconnector/topicmap": { "SingularDisplayName": "Microsoft.IoTOperationsMQ mq mqtt bridge connector topic map" } + ,"microsoft.iotoperationsorchestrator/instances": { "SingularDisplayName": "Microsoft.IoTOperationsOrchestrator instance" } + ,"microsoft.iotoperationsorchestrator/solutions": { "SingularDisplayName": "Microsoft.IoTOperationsOrchestrator solution" } + ,"microsoft.iotoperationsorchestrator/targets": { "SingularDisplayName": "Microsoft.IoTOperationsOrchestrator target" } + ,"microsoft.iotsecurity/alerttypes": { "SingularDisplayName": "Microsoft.IoTSecurity alert type" } + ,"microsoft.iotsecurity/defendersettings": { "SingularDisplayName": "Microsoft.IoTSecurity defender setting" } + ,"microsoft.iotsecurity/onpremisesensors": { "SingularDisplayName": "Microsoft.IoTSecurity on premise sensor" } + ,"microsoft.iotsecurity/recommendationtypes": { "SingularDisplayName": "Microsoft.IoTSecurity recommendation type" } + ,"microsoft.iotsecurity/sensors": { "SingularDisplayName": "Microsoft.IoTSecurity sensor" } + ,"microsoft.iotsecurity/sites": { "SingularDisplayName": "Microsoft.IoTSecurity site" } + ,"microsoft.keyvault/managedhsms": { "SingularDisplayName": "Azure Key Vault Managed HSM" } + ,"microsoft.keyvault/vaults": { "SingularDisplayName": "Key vault" } + ,"microsoft.kubernetes/connectedclusters": { "SingularDisplayName": "Kubernetes - Azure Arc" } + ,"microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/extensions": { "SingularDisplayName": "Kubernetes - Azure Arc extension" } + ,"microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations": { "SingularDisplayName": "GitOps configuration" } + ,"microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces": { "SingularDisplayName": "Kubernetes - Azure Arc namespace" } + ,"microsoft.kubernetesconfiguration/extensions": { "SingularDisplayName": "Kubernetes service extension" } + ,"microsoft.kubernetesconfiguration/extensiontypes": { "SingularDisplayName": "Microsoft.KubernetesConfiguration extension type" } + ,"microsoft.kubernetesconfiguration/extensiontypes/versions": { "SingularDisplayName": "Microsoft.KubernetesConfiguration extension types version" } + ,"microsoft.kubernetesconfiguration/fluxconfigurations": { "SingularDisplayName": "Microsoft.KubernetesConfiguration flux configuration" } + ,"microsoft.kubernetesconfiguration/fluxconfigurations/operations": { "SingularDisplayName": "Microsoft.KubernetesConfiguration flux configurations operation" } + ,"microsoft.kubernetesconfiguration/privatelinkscopes": { "SingularDisplayName": "Microsoft.KubernetesConfiguration private link scope" } + ,"microsoft.kubernetesconfiguration/privatelinkscopes/privateendpointconnections": { "SingularDisplayName": "Microsoft.KubernetesConfiguration private link scopes private endpoint connection" } + ,"microsoft.kubernetesconfiguration/privatelinkscopes/privatelinkresources": { "SingularDisplayName": "Microsoft.KubernetesConfiguration private link scopes private link resource" } + ,"microsoft.kubernetesconfiguration/sourcecontrolconfigurations": { "SingularDisplayName": "Microsoft.KubernetesConfiguration source control configuration" } + ,"microsoft.kubernetesruntime/bgppeers": { "SingularDisplayName": "Microsoft.KubernetesRuntime bgp peer" } + ,"microsoft.kubernetesruntime/loadbalancers": { "SingularDisplayName": "Arc Load Balancer" } + ,"microsoft.kubernetesruntime/services": { "SingularDisplayName": "Microsoft.KubernetesRuntime service" } + ,"microsoft.kubernetesruntime/storageclasses": { "SingularDisplayName": "Microsoft.KubernetesRuntime storage class" } + ,"microsoft.kusto/clusters": { "SingularDisplayName": "Azure Data Explorer Cluster" } + ,"microsoft.kusto/clusters/databases": { "SingularDisplayName": "Azure Data Explorer Database" } + ,"microsoft.labservices/labaccounts": { "SingularDisplayName": "Lab account" } + ,"microsoft.labservices/labaccounts/labs": { "SingularDisplayName": "Lab" } ,"microsoft.labservices/labplans": { "SingularDisplayName": "Lab plan" } ,"microsoft.labservices/labs": { "SingularDisplayName": "Lab" } + ,"microsoft.liftrpilot/organizations": { "SingularDisplayName": "Microsoft.LiftrPilot organization" } ,"microsoft.loadtestservice/loadtestmappings": { "SingularDisplayName": "Microsoft.LoadTestService load test mapping" } ,"microsoft.loadtestservice/loadtestprofilemappings": { "SingularDisplayName": "Microsoft.LoadTestService load test profile mapping" } ,"microsoft.loadtestservice/loadtests": { "SingularDisplayName": "Azure Load Testing" } ,"microsoft.logic/businessprocesses": { "SingularDisplayName": "Business Process" } ,"microsoft.logic/integrationaccounts": { "SingularDisplayName": "Logic app integration account" } ,"microsoft.logic/integrationserviceenvironments": { "SingularDisplayName": "Integration Service Environment" } + ,"microsoft.logic/integrationserviceenvironments/health": { "SingularDisplayName": "Microsoft.Logic integration service environments health" } ,"microsoft.logic/integrationserviceenvironments/managedapis": { "SingularDisplayName": "Managed Connector" } ,"microsoft.logic/workflows": { "SingularDisplayName": "Logic app" } ,"microsoft.logz/monitors": { "SingularDisplayName": "Logz.io" } @@ -22,18 +84,19 @@ _resource_type_3(id: string) { ,"microsoft.m365consumptionservices/services": { "SingularDisplayName": "Microsoft.M365ConsumptionServices service" } ,"microsoft.machinelearning/commitmentplans": { "SingularDisplayName": "Microsoft.MachineLearning commitment plan" } ,"microsoft.machinelearning/commitmentplans/commitmentassociations": { "SingularDisplayName": "Microsoft.MachineLearning commitment plans commitment association" } - ,"microsoft.machinelearning/webservices": { "SingularDisplayName": "Microsoft.MachineLearning web service" } - ,"microsoft.machinelearning/workspaces": { "SingularDisplayName": "Microsoft.MachineLearning workspace" } + ,"microsoft.machinelearning/webservices": { "SingularDisplayName": "Machine Learning Studio (classic) web service" } + ,"microsoft.machinelearning/workspaces": { "SingularDisplayName": "Machine Learning Studio (classic) workspace" } ,"microsoft.machinelearningexperimentation/accounts": { "SingularDisplayName": "Microsoft.MachineLearningExperimentation account" } ,"microsoft.machinelearningexperimentation/accounts/workspaces": { "SingularDisplayName": "Microsoft.MachineLearningExperimentation accounts workspace" } ,"microsoft.machinelearningexperimentation/accounts/workspaces/projects": { "SingularDisplayName": "Microsoft.MachineLearningExperimentation accounts workspaces project" } - ,"microsoft.machinelearningservices/aistudio": { "SingularDisplayName": "Azure AI Studio" } + ,"microsoft.machinelearningservices/aistudio": { "SingularDisplayName": "Azure AI Foundry" } ,"microsoft.machinelearningservices/registries": { "SingularDisplayName": "Azure Machine Learning registry" } ,"microsoft.machinelearningservices/workspaces": { "SingularDisplayName": "Azure Machine Learning workspace" } ,"microsoft.machinelearningservices/workspaces/onlineendpoints": { "SingularDisplayName": "Machine learning online endpoint" } ,"microsoft.machinelearningservices/workspaces/onlineendpoints/deployments": { "SingularDisplayName": "Machine learning online deployment" } ,"microsoft.maintenance/configurationassignments": { "SingularDisplayName": "Microsoft.Maintenance configuration assignment" } ,"microsoft.maintenance/maintenanceconfigurations": { "SingularDisplayName": "Maintenance Configuration" } + ,"microsoft.maintenance/maintenanceconfigurationsbladeresource": { "SingularDisplayName": "Maintenance configuration" } ,"microsoft.maintenance/publicmaintenanceconfigurations": { "SingularDisplayName": "Microsoft.Maintenance public maintenance configuration" } ,"microsoft.managedidentity/identities": { "SingularDisplayName": "Microsoft.ManagedIdentity identity" } ,"microsoft.managedidentity/userassignedidentities": { "SingularDisplayName": "Managed Identity" } @@ -57,6 +120,7 @@ _resource_type_3(id: string) { ,"microsoft.managednetworkfabric/networkfabrics": { "SingularDisplayName": "Network Fabric (Operator Nexus)" } ,"microsoft.managednetworkfabric/networkfabrics/networktonetworkinterconnects": { "SingularDisplayName": "Network to Network Interconnect (Operator Nexus)" } ,"microsoft.managednetworkfabric/networkfabricskus": { "SingularDisplayName": "Network Fabric SKU (Operator Nexus)" } + ,"microsoft.managednetworkfabric/networkmonitors": { "SingularDisplayName": "Microsoft.ManagedNetworkFabric network monitor" } ,"microsoft.managednetworkfabric/networkpacketbrokers": { "SingularDisplayName": "Network Packet Broker (Operator Nexus)" } ,"microsoft.managednetworkfabric/networkracks": { "SingularDisplayName": "Network Rack (Operator Nexus)" } ,"microsoft.managednetworkfabric/networktaprules": { "SingularDisplayName": "Network Tap Rule (Operator Nexus)" } @@ -72,7 +136,7 @@ _resource_type_3(id: string) { ,"microsoft.management/managementgroups/settings": { "SingularDisplayName": "Microsoft.Management management groups setting" } ,"microsoft.management/managementgroups/subscriptions": { "SingularDisplayName": "Microsoft.Management management groups subscription" } ,"microsoft.managementpartner/partners": { "SingularDisplayName": "Microsoft.ManagementPartner partner" } - ,"microsoft.manufacturingplatform/manufacturingdataservices": { "SingularDisplayName": "Manufacturing Data Solutions" } + ,"microsoft.manufacturingplatform/manufacturingdataservices": { "SingularDisplayName": "Factory Operations Agent in Azure AI Foundry" } ,"microsoft.maps/accounts": { "SingularDisplayName": "Azure Maps Account" } ,"microsoft.maps/accounts/creators": { "SingularDisplayName": "Azure Maps Creator Resource" } ,"microsoft.marketplace/privatestores": { "SingularDisplayName": "Microsoft.Marketplace private store" } @@ -82,8 +146,22 @@ _resource_type_3(id: string) { ,"microsoft.marketplace/privatestores/offers": { "SingularDisplayName": "Microsoft.Marketplace private stores offer" } ,"microsoft.marketplace/privatestores/requestapprovals": { "SingularDisplayName": "Microsoft.Marketplace private stores request approval" } ,"microsoft.media/mediaservices": { "SingularDisplayName": "Media service" } + ,"microsoft.media/mediaservices/accountfilters": { "SingularDisplayName": "Microsoft.Media media services account filter" } + ,"microsoft.media/mediaservices/assets": { "SingularDisplayName": "Microsoft.Media media services asset" } + ,"microsoft.media/mediaservices/assets/assetfilters": { "SingularDisplayName": "Microsoft.Media media services assets asset filter" } + ,"microsoft.media/mediaservices/assets/tracks": { "SingularDisplayName": "Microsoft.Media media services assets track" } + ,"microsoft.media/mediaservices/assets/tracks/operationresults": { "SingularDisplayName": "Microsoft.Media media services assets tracks operation result" } + ,"microsoft.media/mediaservices/assets/tracks/operationstatuses": { "SingularDisplayName": "Microsoft.Media media services assets tracks operation statuse" } + ,"microsoft.media/mediaservices/contentkeypolicies": { "SingularDisplayName": "Microsoft.Media media services content key policy" } ,"microsoft.media/mediaservices/liveevents": { "SingularDisplayName": "Live event" } + ,"microsoft.media/mediaservices/liveevents/liveoutputs": { "SingularDisplayName": "Microsoft.Media mediaservices live events live output" } + ,"microsoft.media/mediaservices/privateendpointconnections": { "SingularDisplayName": "Microsoft.Media mediaservices private endpoint connection" } + ,"microsoft.media/mediaservices/privatelinkresources": { "SingularDisplayName": "Microsoft.Media mediaservices private link resource" } ,"microsoft.media/mediaservices/streamingendpoints": { "SingularDisplayName": "Streaming Endpoint" } + ,"microsoft.media/mediaservices/streaminglocators": { "SingularDisplayName": "Microsoft.Media media services streaming locator" } + ,"microsoft.media/mediaservices/streamingpolicies": { "SingularDisplayName": "Microsoft.Media media services streaming policy" } + ,"microsoft.media/mediaservices/transforms": { "SingularDisplayName": "Microsoft.Media media services transform" } + ,"microsoft.media/mediaservices/transforms/jobs": { "SingularDisplayName": "Microsoft.Media media services transforms job" } ,"microsoft.mesh/worlds": { "SingularDisplayName": "Microsoft.Mesh world" } ,"microsoft.mesh/worlds/events": { "SingularDisplayName": "Microsoft.Mesh worlds event" } ,"microsoft.mesh/worlds/events/accesspolicies": { "SingularDisplayName": "Microsoft.Mesh worlds events access policy" } @@ -164,6 +242,7 @@ _resource_type_3(id: string) { ,"microsoft.migrate/movecollections": { "SingularDisplayName": "Microsoft.Migrate move collection" } ,"microsoft.migrate/movecollections/moveresources": { "SingularDisplayName": "Microsoft.Migrate move collections move resource" } ,"microsoft.migrate/projects": { "SingularDisplayName": "Migration project" } + ,"microsoft.mission/approvals": { "SingularDisplayName": "Approval" } ,"microsoft.mission/catalogs": { "SingularDisplayName": "Catalog" } ,"microsoft.mission/communities": { "SingularDisplayName": "Community" } ,"microsoft.mission/communities/communityendpoints": { "SingularDisplayName": "Community endpoint" } @@ -225,6 +304,7 @@ _resource_type_3(id: string) { ,"microsoft.monitor/investigations": { "SingularDisplayName": "Microsoft.Monitor investigation" } ,"microsoft.monitor/pipelinegroups": { "SingularDisplayName": "Azure Monitor pipeline" } ,"microsoft.mysqldiscovery/mysqlsites": { "SingularDisplayName": "Microsoft.MySQLDiscovery my sqlsite" } + ,"microsoft.mysqldiscovery/mysqlsites/agents": { "SingularDisplayName": "Microsoft.MySQLDiscovery my sqlsites agent" } ,"microsoft.mysqldiscovery/mysqlsites/errorsummaries": { "SingularDisplayName": "Microsoft.MySQLDiscovery my sqlsites error summary" } ,"microsoft.mysqldiscovery/mysqlsites/mysqlservers": { "SingularDisplayName": "Microsoft.MySQLDiscovery my sqlsites my sqlserver" } ,"microsoft.mysqldiscovery/mysqlsites/summaries": { "SingularDisplayName": "Microsoft.MySQLDiscovery my sqlsites summary" } @@ -285,12 +365,12 @@ _resource_type_3(id: string) { ,"microsoft.network/networkprofiles": { "SingularDisplayName": "Microsoft.Network network profile" } ,"microsoft.network/networksecuritygroups": { "SingularDisplayName": "Network security group" } ,"microsoft.network/networksecurityperimeters": { "SingularDisplayName": "Network Security Perimeter" } - ,"microsoft.network/networksecurityperimeters/profiles": { "SingularDisplayName": "Network Security Perimeter" } + ,"microsoft.network/networksecurityperimeters/profiles": { "SingularDisplayName": "Network Security Perimeter Profile" } ,"microsoft.network/networkverifiers": { "SingularDisplayName": "Virtual Network Verifier" } ,"microsoft.network/networkvirtualappliances": { "SingularDisplayName": "Microsoft.Network network virtual appliance" } ,"microsoft.network/networkwatchers": { "SingularDisplayName": "Network Watcher" } ,"microsoft.network/networkwatchers/flowlogs": { "SingularDisplayName": "Flow log" } - ,"microsoft.network/p2svpngateways": { "SingularDisplayName": "Microsoft.Network P2S VPN gateway" } + ,"microsoft.network/p2svpngateways": { "SingularDisplayName": "VPN Gateway (Point to Site)" } ,"microsoft.network/privatednszones": { "SingularDisplayName": "Private DNS zone" } ,"microsoft.network/privateendpoints": { "SingularDisplayName": "Private endpoint" } ,"microsoft.network/privatelinkservices": { "SingularDisplayName": "Private link service" } @@ -306,11 +386,11 @@ _resource_type_3(id: string) { ,"microsoft.network/virtualhubs": { "SingularDisplayName": "Microsoft.Network/virtualHub" } ,"microsoft.network/virtualnetworkgateways": { "SingularDisplayName": "Virtual network gateway" } ,"microsoft.network/virtualnetworks": { "SingularDisplayName": "Virtual network" } - ,"microsoft.network/virtualnetworktaps": { "SingularDisplayName": "Virtual Network Terminal Access Point" } + ,"microsoft.network/virtualnetworktaps": { "SingularDisplayName": "Virtual network terminal access point" } ,"microsoft.network/virtualrouters": { "SingularDisplayName": "Microsoft.Network virtual router" } ,"microsoft.network/virtualrouters/peerings": { "SingularDisplayName": "Microsoft.Network virtual routers peering" } ,"microsoft.network/virtualwans": { "SingularDisplayName": "Virtual WAN" } - ,"microsoft.network/vpngateways": { "SingularDisplayName": "VPN Gateway" } + ,"microsoft.network/vpngateways": { "SingularDisplayName": "VPN Gateway (Site to Site)" } ,"microsoft.network/vpngateways/vpnconnections": { "SingularDisplayName": "Microsoft.Network VPN gateways VPN connection" } ,"microsoft.network/vpngateways/vpnconnections/vpnlinkconnections": { "SingularDisplayName": "Microsoft.Network VPN gateways VPN connections VPN link connection" } ,"microsoft.network/vpnserverconfigurations": { "SingularDisplayName": "Microsoft.Network VPN server configuration" } @@ -337,6 +417,7 @@ _resource_type_3(id: string) { ,"microsoft.networkcloud/edgeclusterskus": { "SingularDisplayName": "Microsoft.NetworkCloud edge cluster SKU" } ,"microsoft.networkcloud/kubernetesclusters": { "SingularDisplayName": "Kubernetes Cluster (Operator Nexus)" } ,"microsoft.networkcloud/kubernetesclusters/agentpools": { "SingularDisplayName": "Agent Pool (Operator Nexus)" } + ,"microsoft.networkcloud/kubernetesclusters/features": { "SingularDisplayName": "Kubernetes Cluster Feature (Operator Nexus)" } ,"microsoft.networkcloud/l2networks": { "SingularDisplayName": "Layer 2 Network (Operator Nexus)" } ,"microsoft.networkcloud/l3networks": { "SingularDisplayName": "Layer 3 Network (Operator Nexus)" } ,"microsoft.networkcloud/racks": { "SingularDisplayName": "Compute Rack (Operator Nexus)" } @@ -410,6 +491,7 @@ _resource_type_3(id: string) { ,"microsoft.offazurespringboot/springbootsites/springbootapps": { "SingularDisplayName": "Microsoft.OffAzureSpringBoot springbootsites springbootapp" } ,"microsoft.offazurespringboot/springbootsites/springbootservers": { "SingularDisplayName": "Microsoft.OffAzureSpringBoot springbootsites springbootserver" } ,"microsoft.offazurespringboot/springbootsites/summaries": { "SingularDisplayName": "Microsoft.OffAzureSpringBoot springbootsites summary" } + ,"microsoft.onlineexperimentation/workspaces": { "SingularDisplayName": "Online Experimentation Workspace" } ,"microsoft.openenergyplatform/energyservices": { "SingularDisplayName": "Azure Data Manager for Energy" } ,"microsoft.openlogisticsplatform/workspaces": { "SingularDisplayName": "Microsoft.OpenLogisticsPlatform workspace" } ,"microsoft.openlogisticsplatform/workspaces/applicationregistrations": { "SingularDisplayName": "Microsoft.OpenLogisticsPlatform workspaces application registration" } @@ -423,87 +505,5 @@ _resource_type_3(id: string) { ,"microsoft.operationsmanagement/managementassociations": { "SingularDisplayName": "Microsoft.OperationsManagement management association" } ,"microsoft.operationsmanagement/solutions": { "SingularDisplayName": "Solution" } ,"microsoft.operatorvoicemail/operatorvoicemailinstances": { "SingularDisplayName": "Microsoft.OperatorVoicemail operator voicemail instance" } - ,"microsoft.oraclediscovery/oraclesites": { "SingularDisplayName": "Microsoft.OracleDiscovery oracle site" } - ,"microsoft.oraclediscovery/oraclesites/errorsummaries": { "SingularDisplayName": "Microsoft.OracleDiscovery oracle sites error summary" } - ,"microsoft.oraclediscovery/oraclesites/oracledatabases": { "SingularDisplayName": "Microsoft.OracleDiscovery oracle sites oracle database" } - ,"microsoft.oraclediscovery/oraclesites/oracleservers": { "SingularDisplayName": "Microsoft.OracleDiscovery oracle sites oracle server" } - ,"microsoft.oraclediscovery/oraclesites/summaries": { "SingularDisplayName": "Microsoft.OracleDiscovery oracle sites summary" } - ,"microsoft.orbital/cloudaccessrouters": { "SingularDisplayName": "Cloud Access Router" } - ,"microsoft.orbital/contactprofiles": { "SingularDisplayName": "Contact Profile" } - ,"microsoft.orbital/edgesites": { "SingularDisplayName": "Edge Site" } - ,"microsoft.orbital/geocatalogs": { "SingularDisplayName": "GeoCatalog" } - ,"microsoft.orbital/globalcommunicationssites": { "SingularDisplayName": "Microsoft.Orbital global communications site" } - ,"microsoft.orbital/groundstations": { "SingularDisplayName": "Ground Station" } - ,"microsoft.orbital/l2connections": { "SingularDisplayName": "L2 Connection" } - ,"microsoft.orbital/sdwancontrollers": { "SingularDisplayName": "SDWAN Controller" } - ,"microsoft.orbital/spacecrafts": { "SingularDisplayName": "Spacecraft" } - ,"microsoft.orbital/spacecrafts/contacts": { "SingularDisplayName": "Contact" } - ,"microsoft.orbital/terminals": { "SingularDisplayName": "Cloud Access Terminal" } - ,"microsoft.partnermanagedconsumerrecurrence/recurrences": { "SingularDisplayName": "Microsoft.PartnerManagedConsumerRecurrence recurrence" } - ,"microsoft.partnermanagedconsumerrecurrence/recurrences/operationresult": { "SingularDisplayName": "Microsoft.PartnerManagedConsumerRecurrence recurrences operation result" } - ,"microsoft.peering/peerasns": { "SingularDisplayName": "Microsoft.Peering peer asn" } - ,"microsoft.peering/peerings": { "SingularDisplayName": "Peering" } - ,"microsoft.peering/peerings/registeredasns": { "SingularDisplayName": "Registered ASN" } - ,"microsoft.peering/peerings/registeredprefixes": { "SingularDisplayName": "Registered prefix" } - ,"microsoft.peering/peeringservices": { "SingularDisplayName": "Peering Service" } - ,"microsoft.peering/peeringservices/prefixes": { "SingularDisplayName": "Peering Service Prefix" } - ,"microsoft.pki/pkis": { "SingularDisplayName": "Microsoft.Pki PKI" } - ,"microsoft.pki/pkis/certificateauthorities": { "SingularDisplayName": "Microsoft.Pki pkis certificate authority" } - ,"microsoft.pki/pkis/enrollmentpolicies": { "SingularDisplayName": "Microsoft.Pki pkis enrollment policy" } - ,"microsoft.policyinsights/attestations": { "SingularDisplayName": "Microsoft.PolicyInsights attestation" } - ,"microsoft.policyinsights/policymetadata": { "SingularDisplayName": "Microsoft.PolicyInsights policy metadata" } - ,"microsoft.policyinsights/remediations": { "SingularDisplayName": "Microsoft.PolicyInsights remediation" } - ,"microsoft.portal/consoles": { "SingularDisplayName": "Microsoft.Portal console" } - ,"microsoft.portal/dashboards": { "SingularDisplayName": "Shared dashboard" } - ,"microsoft.portal/tenantconfigurations": { "SingularDisplayName": "Microsoft.Portal tenant configuration" } - ,"microsoft.portal/usersettings": { "SingularDisplayName": "Microsoft.Portal user setting" } - ,"microsoft.portal/virtual-privatedashboards": { "SingularDisplayName": "Private dashboard" } - ,"microsoft.portalservices/copilotsettings": { "SingularDisplayName": "Microsoft.PortalServices copilot setting" } - ,"microsoft.portalservices/dashboards": { "SingularDisplayName": "Shared dashboard" } - ,"microsoft.portalservices/extensions": { "SingularDisplayName": "Portal Extension" } - ,"microsoft.portalservices/extensions/deployments": { "SingularDisplayName": "Extension Deployment" } - ,"microsoft.portalservices/extensions/slots": { "SingularDisplayName": "Extension Slot" } - ,"microsoft.portalservices/extensions/versions": { "SingularDisplayName": "Extension Version" } - ,"microsoft.powerbi/privatelinkservicesforpowerbi": { "SingularDisplayName": "Microsoft.PowerBI private link services for power bi" } - ,"microsoft.powerbi/privatelinkservicesforpowerbi/privateendpointconnections": { "SingularDisplayName": "Microsoft.PowerBI private link services for power bi private endpoint connection" } - ,"microsoft.powerbi/privatelinkservicesforpowerbi/privatelinkresources": { "SingularDisplayName": "Microsoft.PowerBI private link services for power bi private link resource" } - ,"microsoft.powerbi/workspacecollections": { "SingularDisplayName": "Microsoft.PowerBI workspace collection" } - ,"microsoft.powerbidedicated/autoscalevcores": { "SingularDisplayName": "Microsoft.PowerBIDedicated auto scale vcore" } - ,"microsoft.powerbidedicated/capacities": { "SingularDisplayName": "Power BI Embedded" } - ,"microsoft.powerplatform/accounts": { "SingularDisplayName": "Microsoft.PowerPlatform account" } - ,"microsoft.professionalservice/resources": { "SingularDisplayName": "Professional Service" } - ,"microsoft.programmableconnectivity/gateways": { "SingularDisplayName": "APC Gateway" } - ,"microsoft.programmableconnectivity/operatorapiconnections": { "SingularDisplayName": "APC Operator API Connection" } - ,"microsoft.programmableconnectivity/operatorapiplans": { "SingularDisplayName": "APC Operator API Plan" } - ,"microsoft.providerhub/providerregistrations": { "SingularDisplayName": "Resource Provider as a Service" } - ,"microsoft.providerhub/providerregistrations/customrollouts": { "SingularDisplayName": "Rollout" } - ,"microsoft.providerhub/providerregistrations/defaultrollouts": { "SingularDisplayName": "Rollout" } - ,"microsoft.providerhub/providerregistrations/resourcetyperegistrations": { "SingularDisplayName": "Resource Type" } - ,"microsoft.providerhub/providerregistrations/resourcetyperegistrations/resourcetyperegistrations": { "SingularDisplayName": "Resource Type" } - ,"microsoft.providerhubdevtest/regionalstresstests": { "SingularDisplayName": "Microsoft.ProviderHubDevTest regional stresstest" } - ,"microsoft.providerhubdevtest/stresstests": { "SingularDisplayName": "Microsoft.ProviderHubDevTest stresstest" } - ,"microsoft.purview/accounts": { "SingularDisplayName": "Microsoft Purview account" } - ,"microsoft.quantum/workspaces": { "SingularDisplayName": "Quantum Workspace" } - ,"microsoft.quota/groupquotas": { "SingularDisplayName": "Microsoft.Quota group quota" } - ,"microsoft.quota/groupquotas/groupquotarequests": { "SingularDisplayName": "Microsoft.Quota group quotas group quota request" } - ,"microsoft.quota/groupquotas/quotaallocationrequests": { "SingularDisplayName": "Microsoft.Quota group quotas quota allocation request" } - ,"microsoft.quota/groupquotas/quotaallocations": { "SingularDisplayName": "Microsoft.Quota group quotas quota allocation" } - ,"microsoft.quota/groupquotas/subscriptionrequests": { "SingularDisplayName": "Microsoft.Quota group quotas subscription request" } - ,"microsoft.quota/groupquotas/subscriptions": { "SingularDisplayName": "Microsoft.Quota group quotas subscription" } - ,"microsoft.quota/quotarequests": { "SingularDisplayName": "Microsoft.Quota quota request" } - ,"microsoft.quota/quotas": { "SingularDisplayName": "Microsoft.Quota quota" } - ,"microsoft.quota/usages": { "SingularDisplayName": "Microsoft.Quota usage" } - ,"microsoft.recommendationsservice/accounts": { "SingularDisplayName": "Intelligent Recommendations Account" } - ,"microsoft.recommendationsservice/accounts/modeling": { "SingularDisplayName": "Modeling" } - ,"microsoft.recommendationsservice/accounts/serviceendpoints": { "SingularDisplayName": "Service Endpoint" } - ,"microsoft.recoveryservices/replicationeligibilityresults": { "SingularDisplayName": "Microsoft.RecoveryServices replication eligibility result" } - ,"microsoft.recoveryservices/vaults": { "SingularDisplayName": "Recovery Services vault" } - ,"microsoft.recoveryservices/vaults/backupfabrics/protectioncontainers/protecteditems": { "SingularDisplayName": "Backup Item" } - ,"microsoft.redhatopenshift/openshiftclusters": { "SingularDisplayName": "Azure Red Hat OpenShift cluster" } - ,"microsoft.relay/namespaces": { "SingularDisplayName": "Relay" } - ,"microsoft.relay/namespaces/hybridconnections": { "SingularDisplayName": "Hybrid connection" } - ,"microsoft.relay/namespaces/wcfrelays": { "SingularDisplayName": "WCF relay" } - ,"microsoft.resilience/resiliencestates": { "SingularDisplayName": "Microsoft.Resilience resilience state" } - ,"microsoft.resourceconnector/appliances": { "SingularDisplayName": "Resource bridge" } })[tolower(id)] } diff --git a/src/templates/finops-hub/modules/scripts/OpenDataFunctions_resource_type_4.kql b/src/templates/finops-hub/modules/scripts/OpenDataFunctions_resource_type_4.kql index 7558c2fa0..7dd73c9ae 100644 --- a/src/templates/finops-hub/modules/scripts/OpenDataFunctions_resource_type_4.kql +++ b/src/templates/finops-hub/modules/scripts/OpenDataFunctions_resource_type_4.kql @@ -5,7 +5,97 @@ with (docstring = 'Return details about the specified ID.', folder = 'OpenData/Internal') _resource_type_4(id: string) { dynamic({ - "microsoft.resourcegraph/queries": { "SingularDisplayName": "Resource Graph query" } + "microsoft.oraclediscovery/oraclesites": { "SingularDisplayName": "Microsoft.OracleDiscovery oracle site" } + ,"microsoft.oraclediscovery/oraclesites/errorsummaries": { "SingularDisplayName": "Microsoft.OracleDiscovery oracle sites error summary" } + ,"microsoft.oraclediscovery/oraclesites/oracledatabases": { "SingularDisplayName": "Microsoft.OracleDiscovery oracle sites oracle database" } + ,"microsoft.oraclediscovery/oraclesites/oracleservers": { "SingularDisplayName": "Microsoft.OracleDiscovery oracle sites oracle server" } + ,"microsoft.oraclediscovery/oraclesites/summaries": { "SingularDisplayName": "Microsoft.OracleDiscovery oracle sites summary" } + ,"microsoft.orbital/cloudaccessrouters": { "SingularDisplayName": "Cloud Access Router" } + ,"microsoft.orbital/contactprofiles": { "SingularDisplayName": "Contact Profile" } + ,"microsoft.orbital/edgesites": { "SingularDisplayName": "Edge Site" } + ,"microsoft.orbital/geocatalogs": { "SingularDisplayName": "GeoCatalog" } + ,"microsoft.orbital/globalcommunicationssites": { "SingularDisplayName": "Microsoft.Orbital global communications site" } + ,"microsoft.orbital/groundstations": { "SingularDisplayName": "Ground Station" } + ,"microsoft.orbital/l2connections": { "SingularDisplayName": "L2 Connection" } + ,"microsoft.orbital/sdwancontrollers": { "SingularDisplayName": "SDWAN Controller" } + ,"microsoft.orbital/spacecrafts": { "SingularDisplayName": "Spacecraft" } + ,"microsoft.orbital/spacecrafts/contacts": { "SingularDisplayName": "Contact" } + ,"microsoft.orbital/terminals": { "SingularDisplayName": "Cloud Access Terminal" } + ,"microsoft.partnermanagedconsumerrecurrence/recurrences": { "SingularDisplayName": "Microsoft.PartnerManagedConsumerRecurrence recurrence" } + ,"microsoft.partnermanagedconsumerrecurrence/recurrences/operationresult": { "SingularDisplayName": "Microsoft.PartnerManagedConsumerRecurrence recurrences operation result" } + ,"microsoft.peering/peerasns": { "SingularDisplayName": "Microsoft.Peering peer asn" } + ,"microsoft.peering/peerings": { "SingularDisplayName": "Peering" } + ,"microsoft.peering/peerings/registeredasns": { "SingularDisplayName": "Registered ASN" } + ,"microsoft.peering/peerings/registeredprefixes": { "SingularDisplayName": "Registered prefix" } + ,"microsoft.peering/peeringservices": { "SingularDisplayName": "Peering Service" } + ,"microsoft.peering/peeringservices/prefixes": { "SingularDisplayName": "Peering Service Prefix" } + ,"microsoft.pki/pkis": { "SingularDisplayName": "Microsoft.Pki PKI" } + ,"microsoft.pki/pkis/certificateauthorities": { "SingularDisplayName": "Microsoft.Pki pkis certificate authority" } + ,"microsoft.pki/pkis/enrollmentpolicies": { "SingularDisplayName": "Microsoft.Pki pkis enrollment policy" } + ,"microsoft.policyinsights/attestations": { "SingularDisplayName": "Microsoft.PolicyInsights attestation" } + ,"microsoft.policyinsights/policymetadata": { "SingularDisplayName": "Microsoft.PolicyInsights policy metadata" } + ,"microsoft.policyinsights/remediations": { "SingularDisplayName": "Microsoft.PolicyInsights remediation" } + ,"microsoft.portal/consoles": { "SingularDisplayName": "Microsoft.Portal console" } + ,"microsoft.portal/dashboards": { "SingularDisplayName": "Shared dashboard" } + ,"microsoft.portal/tenantconfigurations": { "SingularDisplayName": "Microsoft.Portal tenant configuration" } + ,"microsoft.portal/usersettings": { "SingularDisplayName": "Microsoft.Portal user setting" } + ,"microsoft.portal/virtual-privatedashboards": { "SingularDisplayName": "Private dashboard" } + ,"microsoft.portalservices/copilotsettings": { "SingularDisplayName": "Microsoft.PortalServices copilot setting" } + ,"microsoft.portalservices/dashboards": { "SingularDisplayName": "Shared dashboard" } + ,"microsoft.portalservices/extensions": { "SingularDisplayName": "Portal Extension" } + ,"microsoft.portalservices/extensions/deployments": { "SingularDisplayName": "Extension Deployment" } + ,"microsoft.portalservices/extensions/slots": { "SingularDisplayName": "Extension Slot" } + ,"microsoft.portalservices/extensions/versions": { "SingularDisplayName": "Extension Version" } + ,"microsoft.portalservices/settings": { "SingularDisplayName": "Microsoft.PortalServices setting" } + ,"microsoft.powerbi/privatelinkservicesforpowerbi": { "SingularDisplayName": "Microsoft.PowerBI private link services for power bi" } + ,"microsoft.powerbi/privatelinkservicesforpowerbi/privateendpointconnections": { "SingularDisplayName": "Microsoft.PowerBI private link services for power bi private endpoint connection" } + ,"microsoft.powerbi/privatelinkservicesforpowerbi/privatelinkresources": { "SingularDisplayName": "Microsoft.PowerBI private link services for power bi private link resource" } + ,"microsoft.powerbi/workspacecollections": { "SingularDisplayName": "Microsoft.PowerBI workspace collection" } + ,"microsoft.powerbidedicated/autoscalevcores": { "SingularDisplayName": "Microsoft.PowerBIDedicated auto scale vcore" } + ,"microsoft.powerbidedicated/capacities": { "SingularDisplayName": "Power BI Embedded" } + ,"microsoft.powerplatform/accounts": { "SingularDisplayName": "Microsoft.PowerPlatform account" } + ,"microsoft.professionalservice/resources": { "SingularDisplayName": "Professional Service" } + ,"microsoft.programmableconnectivity/gateways": { "SingularDisplayName": "APC Gateway" } + ,"microsoft.programmableconnectivity/operatorapiconnections": { "SingularDisplayName": "APC Operator API Connection" } + ,"microsoft.programmableconnectivity/operatorapiplans": { "SingularDisplayName": "APC Operator API Plan" } + ,"microsoft.proposal/proposals": { "SingularDisplayName": "Microsoft.Proposal proposal" } + ,"microsoft.providerhub/providerregistrations": { "SingularDisplayName": "Resource Provider as a Service" } + ,"microsoft.providerhub/providerregistrations/customrollouts": { "SingularDisplayName": "Rollout" } + ,"microsoft.providerhub/providerregistrations/defaultrollouts": { "SingularDisplayName": "Rollout" } + ,"microsoft.providerhub/providerregistrations/resourcetyperegistrations": { "SingularDisplayName": "Resource Type" } + ,"microsoft.providerhub/providerregistrations/resourcetyperegistrations/resourcetyperegistrations": { "SingularDisplayName": "Resource Type" } + ,"microsoft.providerhubdevtest/regionalstresstests": { "SingularDisplayName": "Microsoft.ProviderHubDevTest regional stresstest" } + ,"microsoft.providerhubdevtest/stresstests": { "SingularDisplayName": "Microsoft.ProviderHubDevTest stresstest" } + ,"microsoft.purview/accounts": { "SingularDisplayName": "Microsoft Purview account" } + ,"microsoft.quantum/workspaces": { "SingularDisplayName": "Quantum Workspace" } + ,"microsoft.quota/groupquotas": { "SingularDisplayName": "Microsoft.Quota group quota" } + ,"microsoft.quota/groupquotas/groupquotarequests": { "SingularDisplayName": "Microsoft.Quota group quotas group quota request" } + ,"microsoft.quota/groupquotas/quotaallocationrequests": { "SingularDisplayName": "Microsoft.Quota group quotas quota allocation request" } + ,"microsoft.quota/groupquotas/quotaallocations": { "SingularDisplayName": "Microsoft.Quota group quotas quota allocation" } + ,"microsoft.quota/groupquotas/subscriptionrequests": { "SingularDisplayName": "Microsoft.Quota group quotas subscription request" } + ,"microsoft.quota/groupquotas/subscriptions": { "SingularDisplayName": "Microsoft.Quota group quotas subscription" } + ,"microsoft.quota/quotarequests": { "SingularDisplayName": "Microsoft.Quota quota request" } + ,"microsoft.quota/quotas": { "SingularDisplayName": "Microsoft.Quota quota" } + ,"microsoft.quota/usages": { "SingularDisplayName": "Microsoft.Quota usage" } + ,"microsoft.recommendationsservice/accounts": { "SingularDisplayName": "Intelligent Recommendations Account" } + ,"microsoft.recommendationsservice/accounts/modeling": { "SingularDisplayName": "Modeling" } + ,"microsoft.recommendationsservice/accounts/serviceendpoints": { "SingularDisplayName": "Service Endpoint" } + ,"microsoft.recoveryservices/replicationeligibilityresults": { "SingularDisplayName": "Microsoft.RecoveryServices replication eligibility result" } + ,"microsoft.recoveryservices/vaults": { "SingularDisplayName": "Recovery Services vault" } + ,"microsoft.recoveryservices/vaults/backupfabrics/protectioncontainers/protecteditems": { "SingularDisplayName": "Backup Item" } + ,"microsoft.recoveryservicesbvtd/vaults": { "SingularDisplayName": "Recovery Services BVTD" } + ,"microsoft.recoveryservicesbvtd2/vaults": { "SingularDisplayName": "Recovery Services BVTD2" } + ,"microsoft.recoveryservicesintd/vaults": { "SingularDisplayName": "Recovery Services INTD" } + ,"microsoft.recoveryservicesintd2/vaults": { "SingularDisplayName": "Recovery Services INTD2" } + ,"microsoft.redhatopenshift/openshiftclusters": { "SingularDisplayName": "Azure Red Hat OpenShift cluster" } + ,"microsoft.relationships/dependencyof": { "SingularDisplayName": "Dependency Relationship" } + ,"microsoft.relationships/servicegroupmember": { "SingularDisplayName": "Service group member relationship" } + ,"microsoft.relay/namespaces": { "SingularDisplayName": "Relay" } + ,"microsoft.relay/namespaces/hybridconnections": { "SingularDisplayName": "Hybrid connection" } + ,"microsoft.relay/namespaces/wcfrelays": { "SingularDisplayName": "WCF relay" } + ,"microsoft.resilience/resiliencestates": { "SingularDisplayName": "Microsoft.Resilience resilience state" } + ,"microsoft.resourceconnector/appliances": { "SingularDisplayName": "Resource bridge" } + ,"microsoft.resourcegraph/queries": { "SingularDisplayName": "Resource Graph query" } ,"microsoft.resourcehealth/availabilitystatuses": { "SingularDisplayName": "Microsoft.ResourceHealth availability statuse" } ,"microsoft.resourcehealth/childavailabilitystatuses": { "SingularDisplayName": "Microsoft.ResourceHealth child availability statuse" } ,"microsoft.resourcehealth/emergingissues": { "SingularDisplayName": "Microsoft.ResourceHealth emerging issue" } @@ -34,9 +124,9 @@ _resource_type_4(id: string) { ,"microsoft.saas/applications": { "SingularDisplayName": "Software as a Service (classic)" } ,"microsoft.saas/resources": { "SingularDisplayName": "SaaS" } ,"microsoft.saas/saasresources": { "SingularDisplayName": "SaaS (classic)" } + ,"microsoft.saashub/cloudservices": { "SingularDisplayName": "Microsoft.SaaSHub cloud service" } ,"microsoft.saashub/cloudservices/hidden": { "SingularDisplayName": "Microsoft SaaS" } ,"microsoft.salescopilot/conversationintelligencerecordingaccounts": { "SingularDisplayName": "Microsoft.SalesCopilot conversation intelligence recording account" } - ,"microsoft.samplepartner/organizations": { "SingularDisplayName": "Sample Partner Resource" } ,"microsoft.scheduler/jobcollections": { "SingularDisplayName": "Scheduler job collection" } ,"microsoft.scheduler/jobcollections/jobs": { "SingularDisplayName": "Scheduler job" } ,"microsoft.scom/managedinstances": { "SingularDisplayName": "SCOM managed instance" } @@ -163,6 +253,7 @@ _resource_type_4(id: string) { ,"microsoft.storageactions/storagetasks": { "SingularDisplayName": "Storage task - Azure Storage Actions" } ,"microsoft.storagecache/amlfilesystems": { "SingularDisplayName": "Azure Managed Lustre" } ,"microsoft.storagecache/caches": { "SingularDisplayName": "HPC cache" } + ,"microsoft.storagediscovery/storagediscoveryworkspaces": { "SingularDisplayName": "Storage Discovery workspace" } ,"microsoft.storageinsights/storagecollectionrules": { "SingularDisplayName": "Microsoft.StorageInsights storage collection rule" } ,"microsoft.storagemover/storagemovers": { "SingularDisplayName": "Storage mover" } ,"microsoft.storagepool/diskpools": { "SingularDisplayName": "Microsoft.StoragePool disk pool" } @@ -206,7 +297,7 @@ _resource_type_4(id: string) { ,"microsoft.support/services": { "SingularDisplayName": "Microsoft.Support service" } ,"microsoft.support/services/problemclassifications": { "SingularDisplayName": "Microsoft.Support services problem classification" } ,"microsoft.support/supporttickets": { "SingularDisplayName": "Support Request" } - ,"microsoft.sustainabilityservices/calculations": { "SingularDisplayName": "Microsoft.SustainabilityServices calculation" } + ,"microsoft.sustainabilityservices/calculations": { "SingularDisplayName": "Project Sustainability Calculator" } ,"microsoft.symphony/instances": { "SingularDisplayName": "Microsoft.Symphony instance" } ,"microsoft.symphony/solutions": { "SingularDisplayName": "Microsoft.Symphony solution" } ,"microsoft.symphony/targets": { "SingularDisplayName": "Microsoft.Symphony target" } @@ -229,6 +320,7 @@ _resource_type_4(id: string) { ,"microsoft.toolchainorchestrator/campaigns/versions": { "SingularDisplayName": "Microsoft.ToolchainOrchestrator campaigns version" } ,"microsoft.toolchainorchestrator/catalogs": { "SingularDisplayName": "Microsoft.ToolchainOrchestrator catalog" } ,"microsoft.toolchainorchestrator/catalogs/versions": { "SingularDisplayName": "Microsoft.ToolchainOrchestrator catalogs version" } + ,"microsoft.toolchainorchestrator/diagnostics": { "SingularDisplayName": "Microsoft.ToolchainOrchestrator diagnostic" } ,"microsoft.toolchainorchestrator/instances": { "SingularDisplayName": "Microsoft.ToolchainOrchestrator instance" } ,"microsoft.toolchainorchestrator/instances/versions": { "SingularDisplayName": "Microsoft.ToolchainOrchestrator instances version" } ,"microsoft.toolchainorchestrator/solutions": { "SingularDisplayName": "Microsoft.ToolchainOrchestrator solution" } @@ -284,15 +376,20 @@ _resource_type_4(id: string) { ,"microsoft.windows365/cloudpcdelegatedmsis": { "SingularDisplayName": "Microsoft.Windows365 cloud pc delegated msi" } ,"microsoft.windowsesu/multipleactivationkeys": { "SingularDisplayName": "Microsoft.WindowsESU multiple activation key" } ,"microsoft.windowsiot/deviceservices": { "SingularDisplayName": "Microsoft.WindowsIoT device service" } - ,"microsoft.windowspushnotificationservices/registrations": { "SingularDisplayName": "Microsoft.WindowsPushNotificationServices registration" } + ,"microsoft.windowspushnotificationservices/registrations": { "SingularDisplayName": "Windows Push Notification Service" } ,"microsoft.workloadmonitor/monitors": { "SingularDisplayName": "Microsoft.WorkloadMonitor monitor" } ,"microsoft.workloadmonitor/monitors/history": { "SingularDisplayName": "Microsoft.WorkloadMonitor monitors history" } + ,"microsoft.workloads/configurationvalidationresults": { "SingularDisplayName": "Microsoft.Workloads configuration validation result" } ,"microsoft.workloads/connectors": { "SingularDisplayName": "Microsoft.Workloads connector" } ,"microsoft.workloads/connectors/acssbackups": { "SingularDisplayName": "Microsoft.Workloads connectors acss backup" } ,"microsoft.workloads/connectors/amsinsights": { "SingularDisplayName": "Microsoft.Workloads connectors ams insight" } ,"microsoft.workloads/connectors/sapvirtualinstancemonitors": { "SingularDisplayName": "Microsoft.Workloads connectors sap virtual instance monitor" } ,"microsoft.workloads/epicvirtualinstances": { "SingularDisplayName": "Virtual Instance for Epic solution" } ,"microsoft.workloads/insights": { "SingularDisplayName": "Microsoft.Workloads insight" } + ,"microsoft.workloads/instancegroupmonitors": { "SingularDisplayName": "Microsoft.Workloads instance group monitor" } + ,"microsoft.workloads/instancehealthdefinitions": { "SingularDisplayName": "Microsoft.Workloads instance health definition" } + ,"microsoft.workloads/instancehealthdefinitions/signaldefinitions": { "SingularDisplayName": "Microsoft.Workloads instance health definitions signal definition" } + ,"microsoft.workloads/instancemonitors": { "SingularDisplayName": "Microsoft.Workloads instance monitor" } ,"microsoft.workloads/monitors": { "SingularDisplayName": "Azure Monitor for SAP solutions" } ,"microsoft.workloads/oraclevirtualinstances": { "SingularDisplayName": "Microsoft.Workloads oracle virtual instance" } ,"microsoft.workloads/oraclevirtualinstances/databaseinstances": { "SingularDisplayName": "Microsoft.Workloads oracle virtual instances database instance" } @@ -305,12 +402,18 @@ _resource_type_4(id: string) { ,"microsoft.workloads/sapvirtualinstances/applicationinstances": { "SingularDisplayName": "App server instance for SAP solutions" } ,"microsoft.workloads/sapvirtualinstances/centralinstances": { "SingularDisplayName": "Central service instance for SAP solutions" } ,"microsoft.workloads/sapvirtualinstances/databaseinstances": { "SingularDisplayName": "Database for SAP solutions" } - ,"neon.postgres/organizations": { "SingularDisplayName": "Neon Serverless Postgres Resource" } + ,"microsoft.workloads/virtualinstances": { "SingularDisplayName": "Microsoft.Workloads virtual instance" } + ,"microsoft.workloads/virtualinstances/components": { "SingularDisplayName": "Microsoft.Workloads virtual instances component" } + ,"microsoft.zerotrustsegmentation/segmentationmanagers": { "SingularDisplayName": "Segmentation Manager" } + ,"mongodb.atlas/organizations": { "SingularDisplayName": "MongoDB Atlas Organization" } + ,"neon.postgres/organizations": { "SingularDisplayName": "Neon Serverless Postgres Organization" } ,"newrelic.observability/monitors": { "SingularDisplayName": "New Relic" } ,"nginx.nginxplus/nginxdeployments": { "SingularDisplayName": "NGINXaaS" } ,"oracle.database/autonomousdatabases": { "SingularDisplayName": "Autonomous Database" } ,"oracle.database/cloudexadatainfrastructures": { "SingularDisplayName": "Oracle Exadata Infrastructure" } ,"oracle.database/cloudvmclusters": { "SingularDisplayName": "Oracle Exadata VM Cluster" } + ,"oracle.database/exadbvmclusters": { "SingularDisplayName": "Oracle Exascale VM Cluster" } + ,"oracle.database/exascaledbstoragevaults": { "SingularDisplayName": "Oracle Exascale DB Storage Vault" } ,"oracle.database/oraclesubscriptions": { "SingularDisplayName": "OracleSubscription" } ,"paloaltonetworks.cloudngfw/firewalls": { "SingularDisplayName": "Cloud NGFW by Palo Alto Networks" } ,"paloaltonetworks.cloudngfw/globalrulestacks": { "SingularDisplayName": "Global Rulestack" } diff --git a/src/templates/finops-hub/modules/storage.bicep b/src/templates/finops-hub/modules/storage.bicep index 0841ef149..2f6d5d2fb 100644 --- a/src/templates/finops-hub/modules/storage.bicep +++ b/src/templates/finops-hub/modules/storage.bicep @@ -81,13 +81,12 @@ var schemaFiles = { 'reservationtransactions_2023-05-01_mca': loadTextContent('../schemas/reservationtransactions_2023-05-01_mca.json') } -// Roles needed to auto-start triggers +// Roles needed to upload files // Storage Blob Data Contributor - used by deployment scripts to write data to blob storage // Storage File Data Privileged Contributor - used by deployment scripts to write data to blob storage // https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/deployment-script-template#use-existing-storage-account var blobUploadRbacRoles = [ 'ba92f5b4-2d11-453d-a403-e96b0029c9fe' // Storage Blob Data Contributor - https://learn.microsoft.com/azure/role-based-access-control/built-in-roles#storage-blob-data-contributor - 'e40ec5ca-96e0-45a2-b4ff-59039f2c2b59' // Managed Identity Contributor - https://learn.microsoft.com/azure/role-based-access-control/built-in-roles#managed-identity-contributor '69566ab7-960f-475b-8e7c-b3118f30c6bd' // Storage File Data Privileged Contributor - https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles/storage#storage-file-data-privileged-contributor ] diff --git a/src/templates/finops-hub/schemas/reservationrecommendations_2023-05-01_mca.json b/src/templates/finops-hub/schemas/reservationrecommendations_2023-05-01_mca.json index a4abafda2..9b7794ea3 100644 --- a/src/templates/finops-hub/schemas/reservationrecommendations_2023-05-01_mca.json +++ b/src/templates/finops-hub/schemas/reservationrecommendations_2023-05-01_mca.json @@ -5,19 +5,19 @@ "mappings": [ { "source": { "name": "Cost With No ReservedInstances", "type": "String" }, - "sink": { "name": "Cost With No ReservedInstances" } + "sink": { "name": "CostWithNoReservedInstancesJson" } }, { "source": { "name": "First UsageDate", "type": "DateTimeOffset" }, - "sink": { "name": "First UsageDate" } + "sink": { "name": "FirstUsageDate" } }, { "source": { "name": "Instance Flexibility Ratio", "type": "Decimal" }, - "sink": { "name": "Instance Flexibility Ratio" } + "sink": { "name": "InstanceFlexibilityRatio" } }, { "source": { "name": "Instance Flexibility Group", "type": "String" }, - "sink": { "name": "Instance Flexibility Group" } + "sink": { "name": "InstanceFlexibilityGroup" } }, { "source": { "name": "Location", "type": "String" }, @@ -29,23 +29,23 @@ }, { "source": { "name": "MeterID", "type": "String" }, - "sink": { "name": "MeterID" } + "sink": { "name": "MeterId" } }, { - "source": { "name": "Net Savings", "type": "Decimal" }, - "sink": { "name": "Net Savings" } + "source": { "name": "Net Savings", "type": "String" }, + "sink": { "name": "NetSavingsJson" } }, { "source": { "name": "Normalized Size", "type": "String" }, - "sink": { "name": "Normalized Size" } + "sink": { "name": "NormalizedSize" } }, { "source": { "name": "Recommended Quantity", "type": "Decimal" }, - "sink": { "name": "Recommended Quantity" } + "sink": { "name": "RecommendedQuantity" } }, { "source": { "name": "Recommended Quantity Normalized", "type": "Decimal" }, - "sink": { "name": "Recommended Quantity Normalized" } + "sink": { "name": "RecommendedQuantityNormalized" } }, { "source": { "name": "ResourceType", "type": "String" }, @@ -53,7 +53,7 @@ }, { "source": { "name": "scope", "type": "String" }, - "sink": { "name": "scope" } + "sink": { "name": "Scope" } }, { "source": { "name": "SkuName", "type": "String" }, @@ -61,7 +61,7 @@ }, { "source": { "name": "Sku Properties", "type": "String" }, - "sink": { "name": "Sku Properties" } + "sink": { "name": "SkuProperties" } }, { "source": { "name": "Term", "type": "String" }, @@ -69,7 +69,7 @@ }, { "source": { "name": "Total Cost With ReservedInstances", "type": "String" }, - "sink": { "name": "Total Cost With ReservedInstances" } + "sink": { "name": "TotalCostWithReservedInstancesJson" } } ] } diff --git a/src/templates/finops-workbooks/ftkver.txt b/src/templates/finops-workbooks/ftkver.txt index ce609caf8..9a7d84f2a 100644 --- a/src/templates/finops-workbooks/ftkver.txt +++ b/src/templates/finops-workbooks/ftkver.txt @@ -1 +1 @@ -0.8 \ No newline at end of file +0.9 \ No newline at end of file diff --git a/src/web/FinOpsToolkitTheme.ts b/src/web/FinOpsToolkitTheme.ts new file mode 100644 index 000000000..d18304346 --- /dev/null +++ b/src/web/FinOpsToolkitTheme.ts @@ -0,0 +1,29 @@ +const ftk: BrandVariants = { + 10: '#030205', + 20: '#1A1423', + 30: '#2A1E3E', + 40: '#382755', + 50: '#46316D', + 60: '#553A86', + 70: '#6444A0', + 80: '#734FB4', + 90: '#815FBC', + 100: '#8F6FC3', + 110: '#9C7ECA', + 120: '#A98FD1', + 130: '#B69FD8', + 140: '#C3AFDF', + 150: '#D0C0E6', + 160: '#DDD1ED', +}; + +const lightTheme: Theme = { + ...createLightTheme(ftk), +}; + +const darkTheme: Theme = { + ...createDarkTheme(ftk), +}; + +darkTheme.colorBrandForeground1 = ftk[110]; +darkTheme.colorBrandForeground2 = ftk[120]; diff --git a/src/web/ftk-dark.json b/src/web/ftk-dark.json new file mode 100644 index 000000000..c9594c420 --- /dev/null +++ b/src/web/ftk-dark.json @@ -0,0 +1,438 @@ +{ + "borderRadiusNone": "0", + "borderRadiusSmall": "2px", + "borderRadiusMedium": "4px", + "borderRadiusLarge": "6px", + "borderRadiusXLarge": "8px", + "borderRadiusCircular": "10000px", + "fontSizeBase100": "10px", + "fontSizeBase200": "12px", + "fontSizeBase300": "14px", + "fontSizeBase400": "16px", + "fontSizeBase500": "20px", + "fontSizeBase600": "24px", + "fontSizeHero700": "28px", + "fontSizeHero800": "32px", + "fontSizeHero900": "40px", + "fontSizeHero1000": "68px", + "lineHeightBase100": "14px", + "lineHeightBase200": "16px", + "lineHeightBase300": "20px", + "lineHeightBase400": "22px", + "lineHeightBase500": "28px", + "lineHeightBase600": "32px", + "lineHeightHero700": "36px", + "lineHeightHero800": "40px", + "lineHeightHero900": "52px", + "lineHeightHero1000": "92px", + "fontFamilyBase": "'Segoe UI', 'Segoe UI Web (West European)', -apple-system, BlinkMacSystemFont, Roboto, 'Helvetica Neue', sans-serif", + "fontFamilyMonospace": "Consolas, 'Courier New', Courier, monospace", + "fontFamilyNumeric": "Bahnschrift, 'Segoe UI', 'Segoe UI Web (West European)', -apple-system, BlinkMacSystemFont, Roboto, 'Helvetica Neue', sans-serif", + "fontWeightRegular": 400, + "fontWeightMedium": 500, + "fontWeightSemibold": 600, + "fontWeightBold": 700, + "strokeWidthThin": "1px", + "strokeWidthThick": "2px", + "strokeWidthThicker": "3px", + "strokeWidthThickest": "4px", + "spacingHorizontalNone": "0", + "spacingHorizontalXXS": "2px", + "spacingHorizontalXS": "4px", + "spacingHorizontalSNudge": "6px", + "spacingHorizontalS": "8px", + "spacingHorizontalMNudge": "10px", + "spacingHorizontalM": "12px", + "spacingHorizontalL": "16px", + "spacingHorizontalXL": "20px", + "spacingHorizontalXXL": "24px", + "spacingHorizontalXXXL": "32px", + "spacingVerticalNone": "0", + "spacingVerticalXXS": "2px", + "spacingVerticalXS": "4px", + "spacingVerticalSNudge": "6px", + "spacingVerticalS": "8px", + "spacingVerticalMNudge": "10px", + "spacingVerticalM": "12px", + "spacingVerticalL": "16px", + "spacingVerticalXL": "20px", + "spacingVerticalXXL": "24px", + "spacingVerticalXXXL": "32px", + "durationUltraFast": "50ms", + "durationFaster": "100ms", + "durationFast": "150ms", + "durationNormal": "200ms", + "durationGentle": "250ms", + "durationSlow": "300ms", + "durationSlower": "400ms", + "durationUltraSlow": "500ms", + "curveAccelerateMax": "cubic-bezier(0.9,0.1,1,0.2)", + "curveAccelerateMid": "cubic-bezier(1,0,1,1)", + "curveAccelerateMin": "cubic-bezier(0.8,0,0.78,1)", + "curveDecelerateMax": "cubic-bezier(0.1,0.9,0.2,1)", + "curveDecelerateMid": "cubic-bezier(0,0,0,1)", + "curveDecelerateMin": "cubic-bezier(0.33,0,0.1,1)", + "curveEasyEaseMax": "cubic-bezier(0.8,0,0.2,1)", + "curveEasyEase": "cubic-bezier(0.33,0,0.67,1)", + "curveLinear": "cubic-bezier(0,0,1,1)", + "colorNeutralForeground1": "#ffffff", + "colorNeutralForeground1Hover": "#ffffff", + "colorNeutralForeground1Pressed": "#ffffff", + "colorNeutralForeground1Selected": "#ffffff", + "colorNeutralForeground2": "#d6d6d6", + "colorNeutralForeground2Hover": "#ffffff", + "colorNeutralForeground2Pressed": "#ffffff", + "colorNeutralForeground2Selected": "#ffffff", + "colorNeutralForeground2BrandHover": "#8f6fc3", + "colorNeutralForeground2BrandPressed": "#815fbc", + "colorNeutralForeground2BrandSelected": "#8f6fc3", + "colorNeutralForeground3": "#adadad", + "colorNeutralForeground3Hover": "#d6d6d6", + "colorNeutralForeground3Pressed": "#d6d6d6", + "colorNeutralForeground3Selected": "#d6d6d6", + "colorNeutralForeground3BrandHover": "#8f6fc3", + "colorNeutralForeground3BrandPressed": "#815fbc", + "colorNeutralForeground3BrandSelected": "#8f6fc3", + "colorNeutralForeground4": "#999999", + "colorNeutralForegroundDisabled": "#5c5c5c", + "colorNeutralForegroundInvertedDisabled": "rgba(255, 255, 255, 0.4)", + "colorBrandForegroundLink": "#8f6fc3", + "colorBrandForegroundLinkHover": "#9c7eca", + "colorBrandForegroundLinkPressed": "#815fbc", + "colorBrandForegroundLinkSelected": "#8f6fc3", + "colorNeutralForeground2Link": "#d6d6d6", + "colorNeutralForeground2LinkHover": "#ffffff", + "colorNeutralForeground2LinkPressed": "#ffffff", + "colorNeutralForeground2LinkSelected": "#ffffff", + "colorCompoundBrandForeground1": "#8f6fc3", + "colorCompoundBrandForeground1Hover": "#9c7eca", + "colorCompoundBrandForeground1Pressed": "#815fbc", + "colorBrandForeground1": "#9c7eca", + "colorBrandForeground2": "#a98fd1", + "colorBrandForeground2Hover": "#b69fd8", + "colorBrandForeground2Pressed": "#ddd1ed", + "colorNeutralForeground1Static": "#242424", + "colorNeutralForegroundStaticInverted": "#ffffff", + "colorNeutralForegroundInverted": "#242424", + "colorNeutralForegroundInvertedHover": "#242424", + "colorNeutralForegroundInvertedPressed": "#242424", + "colorNeutralForegroundInvertedSelected": "#242424", + "colorNeutralForegroundInverted2": "#242424", + "colorNeutralForegroundOnBrand": "#ffffff", + "colorNeutralForegroundInvertedLink": "#ffffff", + "colorNeutralForegroundInvertedLinkHover": "#ffffff", + "colorNeutralForegroundInvertedLinkPressed": "#ffffff", + "colorNeutralForegroundInvertedLinkSelected": "#ffffff", + "colorBrandForegroundInverted": "#734fb4", + "colorBrandForegroundInvertedHover": "#6444a0", + "colorBrandForegroundInvertedPressed": "#553a86", + "colorBrandForegroundOnLight": "#734fb4", + "colorBrandForegroundOnLightHover": "#6444a0", + "colorBrandForegroundOnLightPressed": "#46316d", + "colorBrandForegroundOnLightSelected": "#553a86", + "colorNeutralBackground1": "#292929", + "colorNeutralBackground1Hover": "#3d3d3d", + "colorNeutralBackground1Pressed": "#1f1f1f", + "colorNeutralBackground1Selected": "#383838", + "colorNeutralBackground2": "#1f1f1f", + "colorNeutralBackground2Hover": "#333333", + "colorNeutralBackground2Pressed": "#141414", + "colorNeutralBackground2Selected": "#2e2e2e", + "colorNeutralBackground3": "#141414", + "colorNeutralBackground3Hover": "#292929", + "colorNeutralBackground3Pressed": "#0a0a0a", + "colorNeutralBackground3Selected": "#242424", + "colorNeutralBackground4": "#0a0a0a", + "colorNeutralBackground4Hover": "#1f1f1f", + "colorNeutralBackground4Pressed": "#000000", + "colorNeutralBackground4Selected": "#1a1a1a", + "colorNeutralBackground5": "#000000", + "colorNeutralBackground5Hover": "#141414", + "colorNeutralBackground5Pressed": "#050505", + "colorNeutralBackground5Selected": "#0f0f0f", + "colorNeutralBackground6": "#333333", + "colorNeutralBackgroundInverted": "#ffffff", + "colorNeutralBackgroundStatic": "#3d3d3d", + "colorNeutralBackgroundAlpha": "rgba(26, 26, 26, 0.5)", + "colorNeutralBackgroundAlpha2": "rgba(31, 31, 31, 0.7)", + "colorSubtleBackground": "transparent", + "colorSubtleBackgroundHover": "#383838", + "colorSubtleBackgroundPressed": "#2e2e2e", + "colorSubtleBackgroundSelected": "#333333", + "colorSubtleBackgroundLightAlphaHover": "rgba(36, 36, 36, 0.8)", + "colorSubtleBackgroundLightAlphaPressed": "rgba(36, 36, 36, 0.5)", + "colorSubtleBackgroundLightAlphaSelected": "transparent", + "colorSubtleBackgroundInverted": "transparent", + "colorSubtleBackgroundInvertedHover": "rgba(0, 0, 0, 0.1)", + "colorSubtleBackgroundInvertedPressed": "rgba(0, 0, 0, 0.3)", + "colorSubtleBackgroundInvertedSelected": "rgba(0, 0, 0, 0.2)", + "colorTransparentBackground": "transparent", + "colorTransparentBackgroundHover": "transparent", + "colorTransparentBackgroundPressed": "transparent", + "colorTransparentBackgroundSelected": "transparent", + "colorNeutralBackgroundDisabled": "#141414", + "colorNeutralBackgroundInvertedDisabled": "rgba(255, 255, 255, 0.1)", + "colorNeutralStencil1": "#575757", + "colorNeutralStencil2": "#333333", + "colorNeutralStencil1Alpha": "rgba(255, 255, 255, 0.1)", + "colorNeutralStencil2Alpha": "rgba(255, 255, 255, 0.05)", + "colorBackgroundOverlay": "rgba(0, 0, 0, 0.5)", + "colorScrollbarOverlay": "rgba(255, 255, 255, 0.6)", + "colorBrandBackground": "#6444a0", + "colorBrandBackgroundHover": "#734fb4", + "colorBrandBackgroundPressed": "#382755", + "colorBrandBackgroundSelected": "#553a86", + "colorCompoundBrandBackground": "#8f6fc3", + "colorCompoundBrandBackgroundHover": "#9c7eca", + "colorCompoundBrandBackgroundPressed": "#815fbc", + "colorBrandBackgroundStatic": "#734fb4", + "colorBrandBackground2": "#1a1423", + "colorBrandBackground2Hover": "#382755", + "colorBrandBackground2Pressed": "#030205", + "colorBrandBackground3Static": "#553a86", + "colorBrandBackground4Static": "#382755", + "colorBrandBackgroundInverted": "#ffffff", + "colorBrandBackgroundInvertedHover": "#ddd1ed", + "colorBrandBackgroundInvertedPressed": "#c3afdf", + "colorBrandBackgroundInvertedSelected": "#d0c0e6", + "colorNeutralCardBackground": "#333333", + "colorNeutralCardBackgroundHover": "#3d3d3d", + "colorNeutralCardBackgroundPressed": "#2e2e2e", + "colorNeutralCardBackgroundSelected": "#383838", + "colorNeutralCardBackgroundDisabled": "#141414", + "colorNeutralStrokeAccessible": "#adadad", + "colorNeutralStrokeAccessibleHover": "#bdbdbd", + "colorNeutralStrokeAccessiblePressed": "#b3b3b3", + "colorNeutralStrokeAccessibleSelected": "#8f6fc3", + "colorNeutralStroke1": "#666666", + "colorNeutralStroke1Hover": "#757575", + "colorNeutralStroke1Pressed": "#6b6b6b", + "colorNeutralStroke1Selected": "#707070", + "colorNeutralStroke2": "#525252", + "colorNeutralStroke3": "#3d3d3d", + "colorNeutralStrokeSubtle": "#0a0a0a", + "colorNeutralStrokeOnBrand": "#292929", + "colorNeutralStrokeOnBrand2": "#ffffff", + "colorNeutralStrokeOnBrand2Hover": "#ffffff", + "colorNeutralStrokeOnBrand2Pressed": "#ffffff", + "colorNeutralStrokeOnBrand2Selected": "#ffffff", + "colorBrandStroke1": "#8f6fc3", + "colorBrandStroke2": "#46316d", + "colorBrandStroke2Hover": "#46316d", + "colorBrandStroke2Pressed": "#2a1e3e", + "colorBrandStroke2Contrast": "#46316d", + "colorCompoundBrandStroke": "#8f6fc3", + "colorCompoundBrandStrokeHover": "#9c7eca", + "colorCompoundBrandStrokePressed": "#815fbc", + "colorNeutralStrokeDisabled": "#424242", + "colorNeutralStrokeInvertedDisabled": "rgba(255, 255, 255, 0.4)", + "colorTransparentStroke": "transparent", + "colorTransparentStrokeInteractive": "transparent", + "colorTransparentStrokeDisabled": "transparent", + "colorNeutralStrokeAlpha": "rgba(255, 255, 255, 0.1)", + "colorNeutralStrokeAlpha2": "rgba(255, 255, 255, 0.2)", + "colorStrokeFocus1": "#000000", + "colorStrokeFocus2": "#ffffff", + "colorNeutralShadowAmbient": "rgba(0,0,0,0.24)", + "colorNeutralShadowKey": "rgba(0,0,0,0.28)", + "colorNeutralShadowAmbientLighter": "rgba(0,0,0,0.12)", + "colorNeutralShadowKeyLighter": "rgba(0,0,0,0.14)", + "colorNeutralShadowAmbientDarker": "rgba(0,0,0,0.40)", + "colorNeutralShadowKeyDarker": "rgba(0,0,0,0.48)", + "colorBrandShadowAmbient": "rgba(0,0,0,0.30)", + "colorBrandShadowKey": "rgba(0,0,0,0.25)", + "colorPaletteRedBackground1": "#3f1011", + "colorPaletteRedBackground2": "#751d1f", + "colorPaletteRedBackground3": "#d13438", + "colorPaletteRedForeground1": "#e37d80", + "colorPaletteRedForeground2": "#f1bbbc", + "colorPaletteRedForeground3": "#e37d80", + "colorPaletteRedBorderActive": "#e37d80", + "colorPaletteRedBorder1": "#d13438", + "colorPaletteRedBorder2": "#e37d80", + "colorPaletteGreenBackground1": "#052505", + "colorPaletteGreenBackground2": "#094509", + "colorPaletteGreenBackground3": "#107c10", + "colorPaletteGreenForeground1": "#54b054", + "colorPaletteGreenForeground2": "#9fd89f", + "colorPaletteGreenForeground3": "#9fd89f", + "colorPaletteGreenBorderActive": "#54b054", + "colorPaletteGreenBorder1": "#107c10", + "colorPaletteGreenBorder2": "#9fd89f", + "colorPaletteDarkOrangeBackground1": "#411200", + "colorPaletteDarkOrangeBackground2": "#7a2101", + "colorPaletteDarkOrangeBackground3": "#da3b01", + "colorPaletteDarkOrangeForeground1": "#e9835e", + "colorPaletteDarkOrangeForeground2": "#f4bfab", + "colorPaletteDarkOrangeForeground3": "#e9835e", + "colorPaletteDarkOrangeBorderActive": "#e9835e", + "colorPaletteDarkOrangeBorder1": "#da3b01", + "colorPaletteDarkOrangeBorder2": "#e9835e", + "colorPaletteYellowBackground1": "#4c4400", + "colorPaletteYellowBackground2": "#817400", + "colorPaletteYellowBackground3": "#fde300", + "colorPaletteYellowForeground1": "#feee66", + "colorPaletteYellowForeground2": "#fef7b2", + "colorPaletteYellowForeground3": "#fdea3d", + "colorPaletteYellowBorderActive": "#feee66", + "colorPaletteYellowBorder1": "#fde300", + "colorPaletteYellowBorder2": "#fdea3d", + "colorPaletteBerryBackground1": "#3a1136", + "colorPaletteBerryBackground2": "#6d2064", + "colorPaletteBerryBackground3": "#c239b3", + "colorPaletteBerryForeground1": "#da7ed0", + "colorPaletteBerryForeground2": "#edbbe7", + "colorPaletteBerryForeground3": "#d161c4", + "colorPaletteBerryBorderActive": "#da7ed0", + "colorPaletteBerryBorder1": "#c239b3", + "colorPaletteBerryBorder2": "#d161c4", + "colorPaletteLightGreenBackground1": "#063004", + "colorPaletteLightGreenBackground2": "#0b5a08", + "colorPaletteLightGreenBackground3": "#13a10e", + "colorPaletteLightGreenForeground1": "#5ec75a", + "colorPaletteLightGreenForeground2": "#a7e3a5", + "colorPaletteLightGreenForeground3": "#3db838", + "colorPaletteLightGreenBorderActive": "#5ec75a", + "colorPaletteLightGreenBorder1": "#13a10e", + "colorPaletteLightGreenBorder2": "#3db838", + "colorPaletteMarigoldBackground1": "#463100", + "colorPaletteMarigoldBackground2": "#835b00", + "colorPaletteMarigoldBackground3": "#eaa300", + "colorPaletteMarigoldForeground1": "#f2c661", + "colorPaletteMarigoldForeground2": "#f9e2ae", + "colorPaletteMarigoldForeground3": "#efb839", + "colorPaletteMarigoldBorderActive": "#f2c661", + "colorPaletteMarigoldBorder1": "#eaa300", + "colorPaletteMarigoldBorder2": "#efb839", + "colorPaletteRedForegroundInverted": "#d13438", + "colorPaletteGreenForegroundInverted": "#107c10", + "colorPaletteYellowForegroundInverted": "#817400", + "colorPaletteDarkRedBackground2": "#590815", + "colorPaletteDarkRedForeground2": "#d69ca5", + "colorPaletteDarkRedBorderActive": "#ac4f5e", + "colorPaletteCranberryBackground2": "#6e0811", + "colorPaletteCranberryForeground2": "#eeacb2", + "colorPaletteCranberryBorderActive": "#dc626d", + "colorPalettePumpkinBackground2": "#712d09", + "colorPalettePumpkinForeground2": "#efc4ad", + "colorPalettePumpkinBorderActive": "#df8e64", + "colorPalettePeachBackground2": "#8f4e00", + "colorPalettePeachForeground2": "#ffddb3", + "colorPalettePeachBorderActive": "#ffba66", + "colorPaletteGoldBackground2": "#6c5700", + "colorPaletteGoldForeground2": "#ecdfa5", + "colorPaletteGoldBorderActive": "#dac157", + "colorPaletteBrassBackground2": "#553e06", + "colorPaletteBrassForeground2": "#e0cea2", + "colorPaletteBrassBorderActive": "#c1a256", + "colorPaletteBrownBackground2": "#50301a", + "colorPaletteBrownForeground2": "#ddc3b0", + "colorPaletteBrownBorderActive": "#bb8f6f", + "colorPaletteForestBackground2": "#294903", + "colorPaletteForestForeground2": "#bdd99b", + "colorPaletteForestBorderActive": "#85b44c", + "colorPaletteSeafoamBackground2": "#00723b", + "colorPaletteSeafoamForeground2": "#a8f0cd", + "colorPaletteSeafoamBorderActive": "#5ae0a0", + "colorPaletteDarkGreenBackground2": "#063b06", + "colorPaletteDarkGreenForeground2": "#9ad29a", + "colorPaletteDarkGreenBorderActive": "#4da64d", + "colorPaletteLightTealBackground2": "#00666d", + "colorPaletteLightTealForeground2": "#a6e9ed", + "colorPaletteLightTealBorderActive": "#58d3db", + "colorPaletteTealBackground2": "#02494c", + "colorPaletteTealForeground2": "#9bd9db", + "colorPaletteTealBorderActive": "#4cb4b7", + "colorPaletteSteelBackground2": "#00333f", + "colorPaletteSteelForeground2": "#94c8d4", + "colorPaletteSteelBorderActive": "#4496a9", + "colorPaletteBlueBackground2": "#004377", + "colorPaletteBlueForeground2": "#a9d3f2", + "colorPaletteBlueBorderActive": "#5caae5", + "colorPaletteRoyalBlueBackground2": "#002c4e", + "colorPaletteRoyalBlueForeground2": "#9abfdc", + "colorPaletteRoyalBlueBorderActive": "#4a89ba", + "colorPaletteCornflowerBackground2": "#2c3c85", + "colorPaletteCornflowerForeground2": "#c8d1fa", + "colorPaletteCornflowerBorderActive": "#93a4f4", + "colorPaletteNavyBackground2": "#001665", + "colorPaletteNavyForeground2": "#a3b2e8", + "colorPaletteNavyBorderActive": "#546fd2", + "colorPaletteLavenderBackground2": "#3f3682", + "colorPaletteLavenderForeground2": "#d2ccf8", + "colorPaletteLavenderBorderActive": "#a79cf1", + "colorPalettePurpleBackground2": "#341a51", + "colorPalettePurpleForeground2": "#c6b1de", + "colorPalettePurpleBorderActive": "#9470bd", + "colorPaletteGrapeBackground2": "#4c0d55", + "colorPaletteGrapeForeground2": "#d9a7e0", + "colorPaletteGrapeBorderActive": "#b55fc1", + "colorPaletteLilacBackground2": "#63276d", + "colorPaletteLilacForeground2": "#e6bfed", + "colorPaletteLilacBorderActive": "#cf87da", + "colorPalettePinkBackground2": "#80215d", + "colorPalettePinkForeground2": "#f7c0e3", + "colorPalettePinkBorderActive": "#ef85c8", + "colorPaletteMagentaBackground2": "#6b0043", + "colorPaletteMagentaForeground2": "#eca5d1", + "colorPaletteMagentaBorderActive": "#d957a8", + "colorPalettePlumBackground2": "#5a003b", + "colorPalettePlumForeground2": "#d696c0", + "colorPalettePlumBorderActive": "#ad4589", + "colorPaletteBeigeBackground2": "#444241", + "colorPaletteBeigeForeground2": "#d7d4d4", + "colorPaletteBeigeBorderActive": "#afabaa", + "colorPaletteMinkBackground2": "#343231", + "colorPaletteMinkForeground2": "#cecccb", + "colorPaletteMinkBorderActive": "#9e9b99", + "colorPalettePlatinumBackground2": "#3b4447", + "colorPalettePlatinumForeground2": "#cdd6d8", + "colorPalettePlatinumBorderActive": "#a0adb2", + "colorPaletteAnchorBackground2": "#202427", + "colorPaletteAnchorForeground2": "#bcc3c7", + "colorPaletteAnchorBorderActive": "#808a90", + "colorStatusSuccessBackground1": "#052505", + "colorStatusSuccessBackground2": "#094509", + "colorStatusSuccessBackground3": "#107c10", + "colorStatusSuccessForeground1": "#54b054", + "colorStatusSuccessForeground2": "#9fd89f", + "colorStatusSuccessForeground3": "#9fd89f", + "colorStatusSuccessBorderActive": "#54b054", + "colorStatusSuccessForegroundInverted": "#0e700e", + "colorStatusSuccessBorder1": "#107c10", + "colorStatusSuccessBorder2": "#9fd89f", + "colorStatusWarningBackground1": "#4a1e04", + "colorStatusWarningBackground2": "#8a3707", + "colorStatusWarningBackground3": "#f7630c", + "colorStatusWarningForeground1": "#faa06b", + "colorStatusWarningForeground2": "#fdcfb4", + "colorStatusWarningForeground3": "#f98845", + "colorStatusWarningBorderActive": "#faa06b", + "colorStatusWarningForegroundInverted": "#bc4b09", + "colorStatusWarningBorder1": "#f7630c", + "colorStatusWarningBorder2": "#f98845", + "colorStatusDangerBackground1": "#3b0509", + "colorStatusDangerBackground2": "#6e0811", + "colorStatusDangerBackground3": "#c50f1f", + "colorStatusDangerForeground1": "#dc626d", + "colorStatusDangerForeground2": "#eeacb2", + "colorStatusDangerForeground3": "#eeacb2", + "colorStatusDangerBorderActive": "#dc626d", + "colorStatusDangerForegroundInverted": "#b10e1c", + "colorStatusDangerBorder1": "#c50f1f", + "colorStatusDangerBorder2": "#dc626d", + "colorStatusDangerBackground3Hover": "#b10e1c", + "colorStatusDangerBackground3Pressed": "#960b18", + "shadow2": "0 0 2px rgba(0,0,0,0.24), 0 1px 2px rgba(0,0,0,0.28)", + "shadow4": "0 0 2px rgba(0,0,0,0.24), 0 2px 4px rgba(0,0,0,0.28)", + "shadow8": "0 0 2px rgba(0,0,0,0.24), 0 4px 8px rgba(0,0,0,0.28)", + "shadow16": "0 0 2px rgba(0,0,0,0.24), 0 8px 16px rgba(0,0,0,0.28)", + "shadow28": "0 0 8px rgba(0,0,0,0.24), 0 14px 28px rgba(0,0,0,0.28)", + "shadow64": "0 0 8px rgba(0,0,0,0.24), 0 32px 64px rgba(0,0,0,0.28)", + "shadow2Brand": "0 0 2px rgba(0,0,0,0.30), 0 1px 2px rgba(0,0,0,0.25)", + "shadow4Brand": "0 0 2px rgba(0,0,0,0.30), 0 2px 4px rgba(0,0,0,0.25)", + "shadow8Brand": "0 0 2px rgba(0,0,0,0.30), 0 4px 8px rgba(0,0,0,0.25)", + "shadow16Brand": "0 0 2px rgba(0,0,0,0.30), 0 8px 16px rgba(0,0,0,0.25)", + "shadow28Brand": "0 0 8px rgba(0,0,0,0.30), 0 14px 28px rgba(0,0,0,0.25)", + "shadow64Brand": "0 0 8px rgba(0,0,0,0.30), 0 32px 64px rgba(0,0,0,0.25)" +} diff --git a/src/web/ftk-light.json b/src/web/ftk-light.json new file mode 100644 index 000000000..ce0de7ec2 --- /dev/null +++ b/src/web/ftk-light.json @@ -0,0 +1,438 @@ +{ + "borderRadiusNone": "0", + "borderRadiusSmall": "2px", + "borderRadiusMedium": "4px", + "borderRadiusLarge": "6px", + "borderRadiusXLarge": "8px", + "borderRadiusCircular": "10000px", + "fontSizeBase100": "10px", + "fontSizeBase200": "12px", + "fontSizeBase300": "14px", + "fontSizeBase400": "16px", + "fontSizeBase500": "20px", + "fontSizeBase600": "24px", + "fontSizeHero700": "28px", + "fontSizeHero800": "32px", + "fontSizeHero900": "40px", + "fontSizeHero1000": "68px", + "lineHeightBase100": "14px", + "lineHeightBase200": "16px", + "lineHeightBase300": "20px", + "lineHeightBase400": "22px", + "lineHeightBase500": "28px", + "lineHeightBase600": "32px", + "lineHeightHero700": "36px", + "lineHeightHero800": "40px", + "lineHeightHero900": "52px", + "lineHeightHero1000": "92px", + "fontFamilyBase": "'Segoe UI', 'Segoe UI Web (West European)', -apple-system, BlinkMacSystemFont, Roboto, 'Helvetica Neue', sans-serif", + "fontFamilyMonospace": "Consolas, 'Courier New', Courier, monospace", + "fontFamilyNumeric": "Bahnschrift, 'Segoe UI', 'Segoe UI Web (West European)', -apple-system, BlinkMacSystemFont, Roboto, 'Helvetica Neue', sans-serif", + "fontWeightRegular": 400, + "fontWeightMedium": 500, + "fontWeightSemibold": 600, + "fontWeightBold": 700, + "strokeWidthThin": "1px", + "strokeWidthThick": "2px", + "strokeWidthThicker": "3px", + "strokeWidthThickest": "4px", + "spacingHorizontalNone": "0", + "spacingHorizontalXXS": "2px", + "spacingHorizontalXS": "4px", + "spacingHorizontalSNudge": "6px", + "spacingHorizontalS": "8px", + "spacingHorizontalMNudge": "10px", + "spacingHorizontalM": "12px", + "spacingHorizontalL": "16px", + "spacingHorizontalXL": "20px", + "spacingHorizontalXXL": "24px", + "spacingHorizontalXXXL": "32px", + "spacingVerticalNone": "0", + "spacingVerticalXXS": "2px", + "spacingVerticalXS": "4px", + "spacingVerticalSNudge": "6px", + "spacingVerticalS": "8px", + "spacingVerticalMNudge": "10px", + "spacingVerticalM": "12px", + "spacingVerticalL": "16px", + "spacingVerticalXL": "20px", + "spacingVerticalXXL": "24px", + "spacingVerticalXXXL": "32px", + "durationUltraFast": "50ms", + "durationFaster": "100ms", + "durationFast": "150ms", + "durationNormal": "200ms", + "durationGentle": "250ms", + "durationSlow": "300ms", + "durationSlower": "400ms", + "durationUltraSlow": "500ms", + "curveAccelerateMax": "cubic-bezier(0.9,0.1,1,0.2)", + "curveAccelerateMid": "cubic-bezier(1,0,1,1)", + "curveAccelerateMin": "cubic-bezier(0.8,0,0.78,1)", + "curveDecelerateMax": "cubic-bezier(0.1,0.9,0.2,1)", + "curveDecelerateMid": "cubic-bezier(0,0,0,1)", + "curveDecelerateMin": "cubic-bezier(0.33,0,0.1,1)", + "curveEasyEaseMax": "cubic-bezier(0.8,0,0.2,1)", + "curveEasyEase": "cubic-bezier(0.33,0,0.67,1)", + "curveLinear": "cubic-bezier(0,0,1,1)", + "colorNeutralForeground1": "#242424", + "colorNeutralForeground1Hover": "#242424", + "colorNeutralForeground1Pressed": "#242424", + "colorNeutralForeground1Selected": "#242424", + "colorNeutralForeground2": "#424242", + "colorNeutralForeground2Hover": "#242424", + "colorNeutralForeground2Pressed": "#242424", + "colorNeutralForeground2Selected": "#242424", + "colorNeutralForeground2BrandHover": "#734fb4", + "colorNeutralForeground2BrandPressed": "#6444a0", + "colorNeutralForeground2BrandSelected": "#734fb4", + "colorNeutralForeground3": "#616161", + "colorNeutralForeground3Hover": "#424242", + "colorNeutralForeground3Pressed": "#424242", + "colorNeutralForeground3Selected": "#424242", + "colorNeutralForeground3BrandHover": "#734fb4", + "colorNeutralForeground3BrandPressed": "#6444a0", + "colorNeutralForeground3BrandSelected": "#734fb4", + "colorNeutralForeground4": "#707070", + "colorNeutralForegroundDisabled": "#bdbdbd", + "colorNeutralForegroundInvertedDisabled": "rgba(255, 255, 255, 0.4)", + "colorBrandForegroundLink": "#6444a0", + "colorBrandForegroundLinkHover": "#553a86", + "colorBrandForegroundLinkPressed": "#382755", + "colorBrandForegroundLinkSelected": "#6444a0", + "colorNeutralForeground2Link": "#424242", + "colorNeutralForeground2LinkHover": "#242424", + "colorNeutralForeground2LinkPressed": "#242424", + "colorNeutralForeground2LinkSelected": "#242424", + "colorCompoundBrandForeground1": "#734fb4", + "colorCompoundBrandForeground1Hover": "#6444a0", + "colorCompoundBrandForeground1Pressed": "#553a86", + "colorBrandForeground1": "#734fb4", + "colorBrandForeground2": "#6444a0", + "colorBrandForeground2Hover": "#553a86", + "colorBrandForeground2Pressed": "#2a1e3e", + "colorNeutralForeground1Static": "#242424", + "colorNeutralForegroundStaticInverted": "#ffffff", + "colorNeutralForegroundInverted": "#ffffff", + "colorNeutralForegroundInvertedHover": "#ffffff", + "colorNeutralForegroundInvertedPressed": "#ffffff", + "colorNeutralForegroundInvertedSelected": "#ffffff", + "colorNeutralForegroundInverted2": "#ffffff", + "colorNeutralForegroundOnBrand": "#ffffff", + "colorNeutralForegroundInvertedLink": "#ffffff", + "colorNeutralForegroundInvertedLinkHover": "#ffffff", + "colorNeutralForegroundInvertedLinkPressed": "#ffffff", + "colorNeutralForegroundInvertedLinkSelected": "#ffffff", + "colorBrandForegroundInverted": "#8f6fc3", + "colorBrandForegroundInvertedHover": "#9c7eca", + "colorBrandForegroundInvertedPressed": "#8f6fc3", + "colorBrandForegroundOnLight": "#734fb4", + "colorBrandForegroundOnLightHover": "#6444a0", + "colorBrandForegroundOnLightPressed": "#46316d", + "colorBrandForegroundOnLightSelected": "#553a86", + "colorNeutralBackground1": "#ffffff", + "colorNeutralBackground1Hover": "#f5f5f5", + "colorNeutralBackground1Pressed": "#e0e0e0", + "colorNeutralBackground1Selected": "#ebebeb", + "colorNeutralBackground2": "#fafafa", + "colorNeutralBackground2Hover": "#f0f0f0", + "colorNeutralBackground2Pressed": "#dbdbdb", + "colorNeutralBackground2Selected": "#e6e6e6", + "colorNeutralBackground3": "#f5f5f5", + "colorNeutralBackground3Hover": "#ebebeb", + "colorNeutralBackground3Pressed": "#d6d6d6", + "colorNeutralBackground3Selected": "#e0e0e0", + "colorNeutralBackground4": "#f0f0f0", + "colorNeutralBackground4Hover": "#fafafa", + "colorNeutralBackground4Pressed": "#f5f5f5", + "colorNeutralBackground4Selected": "#ffffff", + "colorNeutralBackground5": "#ebebeb", + "colorNeutralBackground5Hover": "#f5f5f5", + "colorNeutralBackground5Pressed": "#f0f0f0", + "colorNeutralBackground5Selected": "#fafafa", + "colorNeutralBackground6": "#e6e6e6", + "colorNeutralBackgroundInverted": "#292929", + "colorNeutralBackgroundStatic": "#333333", + "colorNeutralBackgroundAlpha": "rgba(255, 255, 255, 0.5)", + "colorNeutralBackgroundAlpha2": "rgba(255, 255, 255, 0.8)", + "colorSubtleBackground": "transparent", + "colorSubtleBackgroundHover": "#f5f5f5", + "colorSubtleBackgroundPressed": "#e0e0e0", + "colorSubtleBackgroundSelected": "#ebebeb", + "colorSubtleBackgroundLightAlphaHover": "rgba(255, 255, 255, 0.7)", + "colorSubtleBackgroundLightAlphaPressed": "rgba(255, 255, 255, 0.5)", + "colorSubtleBackgroundLightAlphaSelected": "transparent", + "colorSubtleBackgroundInverted": "transparent", + "colorSubtleBackgroundInvertedHover": "rgba(0, 0, 0, 0.1)", + "colorSubtleBackgroundInvertedPressed": "rgba(0, 0, 0, 0.3)", + "colorSubtleBackgroundInvertedSelected": "rgba(0, 0, 0, 0.2)", + "colorTransparentBackground": "transparent", + "colorTransparentBackgroundHover": "transparent", + "colorTransparentBackgroundPressed": "transparent", + "colorTransparentBackgroundSelected": "transparent", + "colorNeutralBackgroundDisabled": "#f0f0f0", + "colorNeutralBackgroundInvertedDisabled": "rgba(255, 255, 255, 0.1)", + "colorNeutralStencil1": "#e6e6e6", + "colorNeutralStencil2": "#fafafa", + "colorNeutralStencil1Alpha": "rgba(0, 0, 0, 0.1)", + "colorNeutralStencil2Alpha": "rgba(0, 0, 0, 0.05)", + "colorBackgroundOverlay": "rgba(0, 0, 0, 0.4)", + "colorScrollbarOverlay": "rgba(0, 0, 0, 0.5)", + "colorBrandBackground": "#734fb4", + "colorBrandBackgroundHover": "#6444a0", + "colorBrandBackgroundPressed": "#382755", + "colorBrandBackgroundSelected": "#553a86", + "colorCompoundBrandBackground": "#734fb4", + "colorCompoundBrandBackgroundHover": "#6444a0", + "colorCompoundBrandBackgroundPressed": "#553a86", + "colorBrandBackgroundStatic": "#734fb4", + "colorBrandBackground2": "#ddd1ed", + "colorBrandBackground2Hover": "#d0c0e6", + "colorBrandBackground2Pressed": "#b69fd8", + "colorBrandBackground3Static": "#553a86", + "colorBrandBackground4Static": "#382755", + "colorBrandBackgroundInverted": "#ffffff", + "colorBrandBackgroundInvertedHover": "#ddd1ed", + "colorBrandBackgroundInvertedPressed": "#c3afdf", + "colorBrandBackgroundInvertedSelected": "#d0c0e6", + "colorNeutralCardBackground": "#fafafa", + "colorNeutralCardBackgroundHover": "#ffffff", + "colorNeutralCardBackgroundPressed": "#f5f5f5", + "colorNeutralCardBackgroundSelected": "#ebebeb", + "colorNeutralCardBackgroundDisabled": "#f0f0f0", + "colorNeutralStrokeAccessible": "#616161", + "colorNeutralStrokeAccessibleHover": "#575757", + "colorNeutralStrokeAccessiblePressed": "#4d4d4d", + "colorNeutralStrokeAccessibleSelected": "#734fb4", + "colorNeutralStroke1": "#d1d1d1", + "colorNeutralStroke1Hover": "#c7c7c7", + "colorNeutralStroke1Pressed": "#b3b3b3", + "colorNeutralStroke1Selected": "#bdbdbd", + "colorNeutralStroke2": "#e0e0e0", + "colorNeutralStroke3": "#f0f0f0", + "colorNeutralStrokeSubtle": "#e0e0e0", + "colorNeutralStrokeOnBrand": "#ffffff", + "colorNeutralStrokeOnBrand2": "#ffffff", + "colorNeutralStrokeOnBrand2Hover": "#ffffff", + "colorNeutralStrokeOnBrand2Pressed": "#ffffff", + "colorNeutralStrokeOnBrand2Selected": "#ffffff", + "colorBrandStroke1": "#734fb4", + "colorBrandStroke2": "#c3afdf", + "colorBrandStroke2Hover": "#a98fd1", + "colorBrandStroke2Pressed": "#734fb4", + "colorBrandStroke2Contrast": "#c3afdf", + "colorCompoundBrandStroke": "#734fb4", + "colorCompoundBrandStrokeHover": "#6444a0", + "colorCompoundBrandStrokePressed": "#553a86", + "colorNeutralStrokeDisabled": "#e0e0e0", + "colorNeutralStrokeInvertedDisabled": "rgba(255, 255, 255, 0.4)", + "colorTransparentStroke": "transparent", + "colorTransparentStrokeInteractive": "transparent", + "colorTransparentStrokeDisabled": "transparent", + "colorNeutralStrokeAlpha": "rgba(0, 0, 0, 0.05)", + "colorNeutralStrokeAlpha2": "rgba(255, 255, 255, 0.2)", + "colorStrokeFocus1": "#ffffff", + "colorStrokeFocus2": "#000000", + "colorNeutralShadowAmbient": "rgba(0,0,0,0.12)", + "colorNeutralShadowKey": "rgba(0,0,0,0.14)", + "colorNeutralShadowAmbientLighter": "rgba(0,0,0,0.06)", + "colorNeutralShadowKeyLighter": "rgba(0,0,0,0.07)", + "colorNeutralShadowAmbientDarker": "rgba(0,0,0,0.20)", + "colorNeutralShadowKeyDarker": "rgba(0,0,0,0.24)", + "colorBrandShadowAmbient": "rgba(0,0,0,0.30)", + "colorBrandShadowKey": "rgba(0,0,0,0.25)", + "colorPaletteRedBackground1": "#fdf6f6", + "colorPaletteRedBackground2": "#f1bbbc", + "colorPaletteRedBackground3": "#d13438", + "colorPaletteRedForeground1": "#bc2f32", + "colorPaletteRedForeground2": "#751d1f", + "colorPaletteRedForeground3": "#d13438", + "colorPaletteRedBorderActive": "#d13438", + "colorPaletteRedBorder1": "#f1bbbc", + "colorPaletteRedBorder2": "#d13438", + "colorPaletteGreenBackground1": "#f1faf1", + "colorPaletteGreenBackground2": "#9fd89f", + "colorPaletteGreenBackground3": "#107c10", + "colorPaletteGreenForeground1": "#0e700e", + "colorPaletteGreenForeground2": "#094509", + "colorPaletteGreenForeground3": "#107c10", + "colorPaletteGreenBorderActive": "#107c10", + "colorPaletteGreenBorder1": "#9fd89f", + "colorPaletteGreenBorder2": "#107c10", + "colorPaletteDarkOrangeBackground1": "#fdf6f3", + "colorPaletteDarkOrangeBackground2": "#f4bfab", + "colorPaletteDarkOrangeBackground3": "#da3b01", + "colorPaletteDarkOrangeForeground1": "#c43501", + "colorPaletteDarkOrangeForeground2": "#7a2101", + "colorPaletteDarkOrangeForeground3": "#da3b01", + "colorPaletteDarkOrangeBorderActive": "#da3b01", + "colorPaletteDarkOrangeBorder1": "#f4bfab", + "colorPaletteDarkOrangeBorder2": "#da3b01", + "colorPaletteYellowBackground1": "#fffef5", + "colorPaletteYellowBackground2": "#fef7b2", + "colorPaletteYellowBackground3": "#fde300", + "colorPaletteYellowForeground1": "#817400", + "colorPaletteYellowForeground2": "#817400", + "colorPaletteYellowForeground3": "#fde300", + "colorPaletteYellowBorderActive": "#fde300", + "colorPaletteYellowBorder1": "#fef7b2", + "colorPaletteYellowBorder2": "#fde300", + "colorPaletteBerryBackground1": "#fdf5fc", + "colorPaletteBerryBackground2": "#edbbe7", + "colorPaletteBerryBackground3": "#c239b3", + "colorPaletteBerryForeground1": "#af33a1", + "colorPaletteBerryForeground2": "#6d2064", + "colorPaletteBerryForeground3": "#c239b3", + "colorPaletteBerryBorderActive": "#c239b3", + "colorPaletteBerryBorder1": "#edbbe7", + "colorPaletteBerryBorder2": "#c239b3", + "colorPaletteLightGreenBackground1": "#f2fbf2", + "colorPaletteLightGreenBackground2": "#a7e3a5", + "colorPaletteLightGreenBackground3": "#13a10e", + "colorPaletteLightGreenForeground1": "#11910d", + "colorPaletteLightGreenForeground2": "#0b5a08", + "colorPaletteLightGreenForeground3": "#13a10e", + "colorPaletteLightGreenBorderActive": "#13a10e", + "colorPaletteLightGreenBorder1": "#a7e3a5", + "colorPaletteLightGreenBorder2": "#13a10e", + "colorPaletteMarigoldBackground1": "#fefbf4", + "colorPaletteMarigoldBackground2": "#f9e2ae", + "colorPaletteMarigoldBackground3": "#eaa300", + "colorPaletteMarigoldForeground1": "#d39300", + "colorPaletteMarigoldForeground2": "#835b00", + "colorPaletteMarigoldForeground3": "#eaa300", + "colorPaletteMarigoldBorderActive": "#eaa300", + "colorPaletteMarigoldBorder1": "#f9e2ae", + "colorPaletteMarigoldBorder2": "#eaa300", + "colorPaletteRedForegroundInverted": "#dc5e62", + "colorPaletteGreenForegroundInverted": "#359b35", + "colorPaletteYellowForegroundInverted": "#fef7b2", + "colorPaletteDarkRedBackground2": "#d69ca5", + "colorPaletteDarkRedForeground2": "#420610", + "colorPaletteDarkRedBorderActive": "#750b1c", + "colorPaletteCranberryBackground2": "#eeacb2", + "colorPaletteCranberryForeground2": "#6e0811", + "colorPaletteCranberryBorderActive": "#c50f1f", + "colorPalettePumpkinBackground2": "#efc4ad", + "colorPalettePumpkinForeground2": "#712d09", + "colorPalettePumpkinBorderActive": "#ca5010", + "colorPalettePeachBackground2": "#ffddb3", + "colorPalettePeachForeground2": "#8f4e00", + "colorPalettePeachBorderActive": "#ff8c00", + "colorPaletteGoldBackground2": "#ecdfa5", + "colorPaletteGoldForeground2": "#6c5700", + "colorPaletteGoldBorderActive": "#c19c00", + "colorPaletteBrassBackground2": "#e0cea2", + "colorPaletteBrassForeground2": "#553e06", + "colorPaletteBrassBorderActive": "#986f0b", + "colorPaletteBrownBackground2": "#ddc3b0", + "colorPaletteBrownForeground2": "#50301a", + "colorPaletteBrownBorderActive": "#8e562e", + "colorPaletteForestBackground2": "#bdd99b", + "colorPaletteForestForeground2": "#294903", + "colorPaletteForestBorderActive": "#498205", + "colorPaletteSeafoamBackground2": "#a8f0cd", + "colorPaletteSeafoamForeground2": "#00723b", + "colorPaletteSeafoamBorderActive": "#00cc6a", + "colorPaletteDarkGreenBackground2": "#9ad29a", + "colorPaletteDarkGreenForeground2": "#063b06", + "colorPaletteDarkGreenBorderActive": "#0b6a0b", + "colorPaletteLightTealBackground2": "#a6e9ed", + "colorPaletteLightTealForeground2": "#00666d", + "colorPaletteLightTealBorderActive": "#00b7c3", + "colorPaletteTealBackground2": "#9bd9db", + "colorPaletteTealForeground2": "#02494c", + "colorPaletteTealBorderActive": "#038387", + "colorPaletteSteelBackground2": "#94c8d4", + "colorPaletteSteelForeground2": "#00333f", + "colorPaletteSteelBorderActive": "#005b70", + "colorPaletteBlueBackground2": "#a9d3f2", + "colorPaletteBlueForeground2": "#004377", + "colorPaletteBlueBorderActive": "#0078d4", + "colorPaletteRoyalBlueBackground2": "#9abfdc", + "colorPaletteRoyalBlueForeground2": "#002c4e", + "colorPaletteRoyalBlueBorderActive": "#004e8c", + "colorPaletteCornflowerBackground2": "#c8d1fa", + "colorPaletteCornflowerForeground2": "#2c3c85", + "colorPaletteCornflowerBorderActive": "#4f6bed", + "colorPaletteNavyBackground2": "#a3b2e8", + "colorPaletteNavyForeground2": "#001665", + "colorPaletteNavyBorderActive": "#0027b4", + "colorPaletteLavenderBackground2": "#d2ccf8", + "colorPaletteLavenderForeground2": "#3f3682", + "colorPaletteLavenderBorderActive": "#7160e8", + "colorPalettePurpleBackground2": "#c6b1de", + "colorPalettePurpleForeground2": "#341a51", + "colorPalettePurpleBorderActive": "#5c2e91", + "colorPaletteGrapeBackground2": "#d9a7e0", + "colorPaletteGrapeForeground2": "#4c0d55", + "colorPaletteGrapeBorderActive": "#881798", + "colorPaletteLilacBackground2": "#e6bfed", + "colorPaletteLilacForeground2": "#63276d", + "colorPaletteLilacBorderActive": "#b146c2", + "colorPalettePinkBackground2": "#f7c0e3", + "colorPalettePinkForeground2": "#80215d", + "colorPalettePinkBorderActive": "#e43ba6", + "colorPaletteMagentaBackground2": "#eca5d1", + "colorPaletteMagentaForeground2": "#6b0043", + "colorPaletteMagentaBorderActive": "#bf0077", + "colorPalettePlumBackground2": "#d696c0", + "colorPalettePlumForeground2": "#43002b", + "colorPalettePlumBorderActive": "#77004d", + "colorPaletteBeigeBackground2": "#d7d4d4", + "colorPaletteBeigeForeground2": "#444241", + "colorPaletteBeigeBorderActive": "#7a7574", + "colorPaletteMinkBackground2": "#cecccb", + "colorPaletteMinkForeground2": "#343231", + "colorPaletteMinkBorderActive": "#5d5a58", + "colorPalettePlatinumBackground2": "#cdd6d8", + "colorPalettePlatinumForeground2": "#3b4447", + "colorPalettePlatinumBorderActive": "#69797e", + "colorPaletteAnchorBackground2": "#bcc3c7", + "colorPaletteAnchorForeground2": "#202427", + "colorPaletteAnchorBorderActive": "#394146", + "colorStatusSuccessBackground1": "#f1faf1", + "colorStatusSuccessBackground2": "#9fd89f", + "colorStatusSuccessBackground3": "#107c10", + "colorStatusSuccessForeground1": "#0e700e", + "colorStatusSuccessForeground2": "#094509", + "colorStatusSuccessForeground3": "#107c10", + "colorStatusSuccessForegroundInverted": "#54b054", + "colorStatusSuccessBorderActive": "#107c10", + "colorStatusSuccessBorder1": "#9fd89f", + "colorStatusSuccessBorder2": "#107c10", + "colorStatusWarningBackground1": "#fff9f5", + "colorStatusWarningBackground2": "#fdcfb4", + "colorStatusWarningBackground3": "#f7630c", + "colorStatusWarningForeground1": "#bc4b09", + "colorStatusWarningForeground2": "#8a3707", + "colorStatusWarningForeground3": "#bc4b09", + "colorStatusWarningForegroundInverted": "#faa06b", + "colorStatusWarningBorderActive": "#f7630c", + "colorStatusWarningBorder1": "#fdcfb4", + "colorStatusWarningBorder2": "#bc4b09", + "colorStatusDangerBackground1": "#fdf3f4", + "colorStatusDangerBackground2": "#eeacb2", + "colorStatusDangerBackground3": "#c50f1f", + "colorStatusDangerForeground1": "#b10e1c", + "colorStatusDangerForeground2": "#6e0811", + "colorStatusDangerForeground3": "#c50f1f", + "colorStatusDangerForegroundInverted": "#dc626d", + "colorStatusDangerBorderActive": "#c50f1f", + "colorStatusDangerBorder1": "#eeacb2", + "colorStatusDangerBorder2": "#c50f1f", + "colorStatusDangerBackground3Hover": "#b10e1c", + "colorStatusDangerBackground3Pressed": "#960b18", + "shadow2": "0 0 2px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.14)", + "shadow4": "0 0 2px rgba(0,0,0,0.12), 0 2px 4px rgba(0,0,0,0.14)", + "shadow8": "0 0 2px rgba(0,0,0,0.12), 0 4px 8px rgba(0,0,0,0.14)", + "shadow16": "0 0 2px rgba(0,0,0,0.12), 0 8px 16px rgba(0,0,0,0.14)", + "shadow28": "0 0 8px rgba(0,0,0,0.12), 0 14px 28px rgba(0,0,0,0.14)", + "shadow64": "0 0 8px rgba(0,0,0,0.12), 0 32px 64px rgba(0,0,0,0.14)", + "shadow2Brand": "0 0 2px rgba(0,0,0,0.30), 0 1px 2px rgba(0,0,0,0.25)", + "shadow4Brand": "0 0 2px rgba(0,0,0,0.30), 0 2px 4px rgba(0,0,0,0.25)", + "shadow8Brand": "0 0 2px rgba(0,0,0,0.30), 0 4px 8px rgba(0,0,0,0.25)", + "shadow16Brand": "0 0 2px rgba(0,0,0,0.30), 0 8px 16px rgba(0,0,0,0.25)", + "shadow28Brand": "0 0 8px rgba(0,0,0,0.30), 0 14px 28px rgba(0,0,0,0.25)", + "shadow64Brand": "0 0 8px rgba(0,0,0,0.30), 0 32px 64px rgba(0,0,0,0.25)" +} diff --git a/src/workbooks/.scaffold/ftkver.txt b/src/workbooks/.scaffold/ftkver.txt index ce609caf8..9a7d84f2a 100644 --- a/src/workbooks/.scaffold/ftkver.txt +++ b/src/workbooks/.scaffold/ftkver.txt @@ -1 +1 @@ -0.8 \ No newline at end of file +0.9 \ No newline at end of file
NameResource GroupSubscription