From 52e0c02a8dfcd6dbb8959a90cb8258fc5a47586f Mon Sep 17 00:00:00 2001 From: msbrett Date: Wed, 11 Feb 2026 07:13:46 -0800 Subject: [PATCH 1/3] - TOC: Add configure-remote-hubs and data-lake-storage-connectivity entries - errors.md: Convert numbered lists to bullets for nonsequential lists - configure-remote-hubs.md: Replace Azure China with Azure operated by 21Vianet, numbered list to bullets - cost-summary.md: Remove extra period in alt-text - conformance-full-report.md: Fix contractions, spelling, and consistency to improve Acrolinx score - CLAUDE.md: Document Microsoft Learn docs publishing workflow - Publish-Toolkit.ps1: Fix Find-Repo to return first match --- docs-mslearn/TOC.yml | 4 +++ docs-mslearn/focus/conformance-full-report.md | 32 +++++++++---------- docs-mslearn/toolkit/help/errors.md | 24 +++++++------- .../toolkit/hubs/configure-remote-hubs.md | 6 ++-- docs-mslearn/toolkit/power-bi/cost-summary.md | 2 +- src/scripts/Publish-Toolkit.ps1 | 2 +- 6 files changed, 37 insertions(+), 33 deletions(-) diff --git a/docs-mslearn/TOC.yml b/docs-mslearn/TOC.yml index 8126a2bcf..4c3e7af9a 100644 --- a/docs-mslearn/TOC.yml +++ b/docs-mslearn/TOC.yml @@ -138,6 +138,8 @@ href: toolkit/hubs/configure-dashboards.md - name: Configure AI agents href: toolkit/hubs/configure-ai.md + - name: Configure remote hubs + href: toolkit/hubs/configure-remote-hubs.md - name: Savings calculations href: toolkit/hubs/savings-calculations.md - name: Deployment template @@ -268,6 +270,8 @@ href: toolkit/bicep-registry/modules.md - name: Scheduled actions href: toolkit/bicep-registry/scheduled-actions.md + - name: Data Lake Storage connectivity + href: toolkit/data-lake-storage-connectivity.md - name: Help + support items: - name: Help options diff --git a/docs-mslearn/focus/conformance-full-report.md b/docs-mslearn/focus/conformance-full-report.md index ee3d9f0c9..1502d5978 100644 --- a/docs-mslearn/focus/conformance-full-report.md +++ b/docs-mslearn/focus/conformance-full-report.md @@ -68,7 +68,7 @@ Source: [attributes/column_handling.md](https://github.com/FinOps-Open-Cost-and- | CH2.8 | MUST | Columns with the `Category` suffix MUST be normalized. | Supports | | | CH3.1 | MUST | Custom (e.g., provider-defined) columns that are not defined by FOCUS but included in a FOCUS dataset MUST follow the following rules: | Supports | | | CH3.1.1 | MUST | Custom columns MUST be prefixed with a consistent `x_` prefix to identify them as external, custom columns and distinguish them from FOCUS columns to avoid conflicts in future releases. | Supports | | -| CH3.1.2 | SHOULD | Custom columns SHOULD follow the same rules listed above for FOCUS columns. | Partially Supports | `x_SkuMeterCategory` and `x_SkuMeterSubcategory` are not normalized. | +| CH3.1.2 | SHOULD | Custom columns SHOULD follow the same rules listed above for FOCUS columns. | Partially Supports | `x_SkuMeterCategory` and `x_SkuMeterSubcategory` aren't normalized. | | CH1.3 | SHOULD | All FOCUS columns SHOULD be first in the provided dataset. | Supports | | | CH1.4.1 | SHOULD | Custom columns SHOULD be listed after all FOCUS columns... | Supports | | | CH1.4.2 | SHOULD | ...\[Custom columns and FOCUS columns] SHOULD NOT be intermixed. | Supports | | @@ -156,10 +156,10 @@ Source: [attributes/null_handling.md](https://github.com/FinOps-Open-Cost-and-Us | ID | Type | Criteria | Status | Notes | | --- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------ | ------------------------------------------------------------------------------- | -| NH1 | MUST | All columns defined in the FOCUS specification MUST follow the null handling requirements listed below. | Partially Supports | Price and cost columns may use 0 when data is not available in Cost Management. | -| NH2 | SHOULD | Custom columns SHOULD also follow the same formatting requirements. | Partially Supports | Price and cost columns may use 0 when data is not available in Cost Management. | -| NH3 | MUST | Columns MUST use NULL when there isn't a value that can be specified for a nullable column. | Partially Supports | Price and cost columns may use 0 when data is not available in Cost Management. | -| NH4 | MUST | Columns MUST NOT use empty strings or placeholder values such as 0 for numeric columns or "Not Applicable" for string columns to represent a null or not having a value, regardless of whether the column allows nulls or not. | Partially Supports | Price and cost columns may use 0 when data is not available in Cost Management. | +| NH1 | MUST | All columns defined in the FOCUS specification MUST follow the null handling requirements listed below. | Partially Supports | Price and cost columns may use 0 when data isn't available in Cost Management. | +| NH2 | SHOULD | Custom columns SHOULD also follow the same formatting requirements. | Partially Supports | Price and cost columns may use 0 when data isn't available in Cost Management. | +| NH3 | MUST | Columns MUST use NULL when there isn't a value that can be specified for a nullable column. | Partially Supports | Price and cost columns may use 0 when data isn't available in Cost Management. | +| NH4 | MUST | Columns MUST NOT use empty strings or placeholder values such as 0 for numeric columns or "Not Applicable" for string columns to represent a null or not having a value, regardless of whether the column allows nulls or not. | Partially Supports | Price and cost columns may use 0 when data isn't available in Cost Management. | ### Numeric format @@ -219,8 +219,8 @@ Source: [attributes/unit_format.md](https://github.com/FinOps-Open-Cost-and-Usag | UF2.1 | MUST | Values that exceed 10^18 MUST use the abbreviation for exabit, exabyte, exbibit, and exbibyte... | Supports | | | UF2.2 | MUST | ...values smaller than a byte MUST use the abbreviation for bit or byte. | Supports | | | UF3 | MAY | If the following list of recommended values does not cover a count-based unit, a provider MAY introduce a new noun representing a count-based unit. | Supports | All supported unit values are documented in the [Pricing units](../toolkit/open-data.md#pricing-units) dataset in the FinOps toolkit. | -| UF3.1 | MUST | All nouns appearing in units that are not listed in the recommended values table will be considered count-based units. A new count-based unit value MUST be capitalized. | Supports | | -| UF3.2 | MUST | Time-based units can be used to measure consumption over a time interval or in combination with another unit to capture a rate of consumption. Time-based units MUST match one of the values listed in the following table. | Supports | | +| UF3.1 | MUST | All nouns appearing in units that are not listed in the recommended values table will be considered count-based units. A new count-based unit value MUST be capitalized. | Supports | | +| UF3.2 | MUST | Time-based units can be used to measure consumption over a time interval or in combination with another unit to capture a rate of consumption. Time-based units MUST match one of the values listed in the following table. | Supports | | | UF4 | MUST | If the unit value is a composite value made from combinations of one or more units, each component MUST also align with the set of recommended values. | Supports | | | UF5.1 | MUST | Instead of "per" or "-" to denote a Composite Unit, slash ("/") and space(" ") MUST be used as a common convention. | Supports | | | UF5.2 | SHOULD | Count-based units like requests, instances, and tokens SHOULD be expressed using a value listed in the count dimension. | Supports | | @@ -264,7 +264,7 @@ Source: [columns/billedcost.md](https://github.com/FinOps-Open-Cost-and-Usage-Sp The identifier assigned to a billing account by the provider. -FOCUS billing account represents the scope at which invoices are generated, which is an Enterprise Agreement billing account (also known as enrollment) or a Microsoft Customer Agreement billing profile. | +FOCUS billing account represents the scope at which invoices are generated, which is an Enterprise Agreement billing account (also known as enrollment) or a Microsoft Customer Agreement billing profile. Source: [columns/billingaccountid.md](https://github.com/FinOps-Open-Cost-and-Usage-Spec/FOCUS_Spec/blob/v1.2/specification/columns/billingaccountid.md) @@ -275,7 +275,7 @@ Source: [columns/billingaccountid.md](https://github.com/FinOps-Open-Cost-and-Us | BAI3 | MUST | BillingAccountId MUST conform to StringHandling requirements. | Supports | | | BAI4 | MUST | BillingAccountId MUST NOT be null. | Supports | | | BAI5 | MUST | BillingAccountId MUST be a unique identifier within a provider. | Supports | | -| BAI6 | SHOULD | BillingAccountId SHOULD be a fully-qualified identifier. | Supports | `BillingAccountId` uses the fully-qualified Azure Resource Manager ID and not the simple enrollment number or billing profile ID for consistency and to ensure the scope being identified is obvious and programmatically accessible via this identifier. | +| BAI6 | SHOULD | BillingAccountId SHOULD be a fully-qualified identifier. | Supports | `BillingAccountId` uses the fully qualified Azure Resource Manager ID instead of the simple enrollment number or billing profile ID. This ensures the scope is obvious and programmatically accessible. | ### Billing account name @@ -361,7 +361,7 @@ Source: [columns/capacityreservationid.md](https://github.com/FinOps-Open-Cost-a | ID | Type | Criteria | Status | Notes | | ------ | ------ | ------------------------------------------------------------------------------------------------------------- | ---------------- | ------------------------------------------------------------------------------------------ | -| CRI1 | MUST | CapacityReservationId MUST be present in a FOCUS dataset when the provider supports capacity reservations. | Does Not Support | `CapacityReservationId` is not specified in the Cost Management FOCUS 1.2-preview dataset. | +| CRI1 | MUST | CapacityReservationId MUST be present in a FOCUS dataset when the provider supports capacity reservations. | Does Not Support | `CapacityReservationId` isn't specified in the Cost Management FOCUS 1.2-preview dataset. | | CRI2 | MUST | CapacityReservationId MUST be of type String. | Not Applicable | | | CRI3 | MUST | CapacityReservationId MUST conform to StringHandling requirements. | Not Applicable | | | CRI3.1 | MUST | CapacityReservationId MUST be null when a charge is not related to a capacity reservation. | Not Applicable | | @@ -378,7 +378,7 @@ Source: [columns/capacityreservationstatus.md](https://github.com/FinOps-Open-Co | ID | Type | Criteria | Status | Notes | | ------ | ---- | ------------------------------------------------------------------------------------------------------------------- | ---------------- | ---------------------------------------------------------------------------------------------- | -| CRS1 | MUST | CapacityReservationStatus MUST be present in a FOCUS dataset when the provider supports capacity reservations. | Does Not Support | `CapacityReservationStatus` is not specified in the Cost Management FOCUS 1.2-preview dataset. | +| CRS1 | MUST | CapacityReservationStatus MUST be present in a FOCUS dataset when the provider supports capacity reservations. | Does Not Support | `CapacityReservationStatus` isn't specified in the Cost Management FOCUS 1.2-preview dataset. | | CRS2 | MUST | CapacityReservationStatus MUST be of type String. | Not Applicable | | | CRS2.1 | MUST | CapacityReservationStatus MUST be null when CapacityReservationId is null. | Not Applicable | | | CRS2.2 | MUST | CapacityReservationStatus MUST NOT be null when CapacityReservationId is not null and ChargeCategory is "Usage". | Not Applicable | | @@ -522,7 +522,7 @@ Source: [columns/commitmentdiscountquantity.md](https://github.com/FinOps-Open-C | ID | Type | Criteria | Status | Notes | | -------- | ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- | ----------------------------------------------------------------------------------------------- | -| CDQ1 | MUST | CommitmentDiscountQuantity MUST be present in a FOCUS dataset when the provider supports commitment discounts. | Does Not Support | `CommitmentDiscountQuantity` is not specified in the Cost Management FOCUS 1.2-preview dataset. | +| CDQ1 | MUST | CommitmentDiscountQuantity MUST be present in a FOCUS dataset when the provider supports commitment discounts. | Does Not Support | `CommitmentDiscountQuantity` isn't specified in the Cost Management FOCUS 1.2-preview dataset. | | CDQ2 | MUST | CommitmentDiscountQuantity MUST be of type Decimal. | Not Applicable | | | CDQ3 | MUST | CommitmentDiscountQuantity MUST conform to NumericFormat requirements. | Not Applicable | | | CDQ3.1 | MUST | CommitmentDiscountQuantity MUST NOT be null when ChargeClass is not "Correction". | Not Applicable | | @@ -570,7 +570,7 @@ Source: [columns/commitmentdiscountunit.md](https://github.com/FinOps-Open-Cost- | ID | Type | Criteria | Status | Notes | | ------ | ------ | ------------------------------------------------------------------------------------------------------------------------ | ---------------- | -------------------------------------------------------------------------------------------- | -| CDU1 | MUST | CommitmentDiscountUnit MUST be present in a FOCUS dataset when the provider supports commitment discounts. | Does Not Support | `CommitmentDiscountUnit` is not specified in the Cost Management FOCUS 1.2-preview dataset. | +| CDU1 | MUST | CommitmentDiscountUnit MUST be present in a FOCUS dataset when the provider supports commitment discounts. | Does Not Support | `CommitmentDiscountUnit` isn't specified in the Cost Management FOCUS 1.2-preview dataset. | | CDU2 | MUST | CommitmentDiscountUnit MUST be of type String. | Not Applicable | | | CDU3 | MUST | CommitmentDiscountUnit MUST conform to StringHandling requirements. | Not Applicable | | | CDU4 | SHOULD | CommitmentDiscountUnit SHOULD conform to UnitFormat requirements. | Not Applicable | | @@ -681,7 +681,7 @@ Source: [columns/invoiceid.md](https://github.com/FinOps-Open-Cost-and-Usage-Spe | II2 | MUST | InvoiceId MUST be of type String. | Supports | | | II3 | MUST | InvoiceId MUST conform to StringHandling requirements. | Supports | | | II4.1 | MUST | InvoiceId MUST be null when the charge is not associated either with an invoice or with a pre-generated provisional invoice. | Supports | | -| II4.2 | MUST | InvoiceId MUST NOT be null when the charge is associated with either an issued invoice or a pre-generated provisional invoice. | Partially Supports | Supported for Microsoft Customer Agreement accounts. Not supported for Enterprise Agreement accounts. | +| II4.2 | MUST | InvoiceId MUST NOT be null when the charge is associated with either an issued invoice or a pre-generated provisional invoice. | Partially Supports | Supported for Microsoft Customer Agreement accounts but not for Enterprise Agreement accounts. | | II5 | MAY | InvoiceId MAY be generated prior to an invoice being issued. | Not Applicable | | | II6 | MUST | InvoiceId MUST be associated with the related charge and BillingAccountId when a pre-generated invoice or provisional invoice exists. | Supports | | @@ -1056,7 +1056,7 @@ Source: [columns/skupricedetails.md](https://github.com/FinOps-Open-Cost-and-Usa | ID | Type | Criteria | Status | Notes | | --------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- | ------------------------------------------------------------------------------------ | -| SkPD1 | MUST | SkuPriceDetails MUST be present in a FOCUS dataset when the provider supports unit pricing concepts and publishes price lists, publicly or as part of contracting. | Does Not Support | `SkuPriceDetails` is not specified in the Cost Management FOCUS 1.2-preview dataset. | +| SkPD1 | MUST | SkuPriceDetails MUST be present in a FOCUS dataset when the provider supports unit pricing concepts and publishes price lists, publicly or as part of contracting. | Does Not Support | `SkuPriceDetails` isn't specified in the Cost Management FOCUS 1.2-preview dataset. | | SkPD2 | MUST | SkuPriceDetails MUST conform to KeyValueFormat requirements. | Not Applicable | | | SkPD3 | SHOULD | SkuPriceDetails property keys SHOULD conform to PascalCase format. | Not Applicable | | | SkPD3.1 | MUST | SkuPriceDetails MUST be null when SkuPriceId is null. | Not Applicable | | @@ -1096,7 +1096,7 @@ Source: [columns/skupriceid.md](https://github.com/FinOps-Open-Cost-and-Usage-Sp | SkPI5.3 | MUST | When SkuPriceId is not null... SkuPriceId MUST remain consistent across billing accounts or contracts. | Supports | | | SkPI5.4 | MAY | When SkuPriceId is not null... SkuPriceId MAY equal SkuId. | Supports | | | SkPI5.5 | MUST | When SkuPriceId is not null... SkuPriceId MUST be associated with a given resource or service when ChargeCategory is "Usage" or "Purchase". | Supports | | -| SkPI5.6 | MUST | When SkuPriceId is not null... SkuPriceId MUST reference a SKU Price in a provider-supplied price list, enabling the lookup of detailed information about the SKU Price. | Does Not Support | `SkuPriceId` cannot be directly mapped to a single SKU in the price sheet. For EA, `SkuPriceId` represents an individual SKU price but isn't available in the price sheet dataset. For MCA, `SkuPriceId` is a combination of the following price sheet columns: `{ProductId}_{SkuId}_{MeterType}`. | +| SkPI5.6 | MUST | When SkuPriceId is not null... SkuPriceId MUST reference a SKU Price in a provider-supplied price list, enabling the lookup of detailed information about the SKU Price. | Does Not Support | `SkuPriceId` can't be directly mapped to a single SKU in the price sheet. For EA, `SkuPriceId` represents an individual SKU price but isn't available in the price sheet dataset. For MCA, `SkuPriceId` is a combination of the following price sheet columns: `{ProductId}_{SkuId}_{MeterType}`. | | SkPI5.7 | MUST | When SkuPriceId is not null... SkuPriceId MUST support the lookup of the ListUnitPrice when the provider publishes unit prices exclusive of discounts. | Does Not Support | See SkPI5.6. | | SkPI5.8 | MUST | When SkuPriceId is not null... SkuPriceId MUST support the verification of the given ContractedUnitPrice when the provider supports negotiated pricing concepts. | Partially Supports | `ContractedUnitPrice` may not be set or may be 0 for some rows, like reservation usage. | diff --git a/docs-mslearn/toolkit/help/errors.md b/docs-mslearn/toolkit/help/errors.md index aa9b76cc3..77c4ff49f 100644 --- a/docs-mslearn/toolkit/help/errors.md +++ b/docs-mslearn/toolkit/help/errors.md @@ -135,23 +135,23 @@ This error indicates that the Data Explorer `.ingest` command detected errors du **Common root causes**: -1. **Empty parquet file**: The parquet file contains no data rows. This is the most common cause. - - Cost Management export generated an empty file (no data for the time period) - - ETL pipeline created an empty parquet file during transformation - - File was created but data write operation failed +- **Empty parquet file**: The parquet file contains no data rows. This is the most common cause. + - Cost Management export generated an empty file (no data for the time period) + - ETL pipeline created an empty parquet file during transformation + - File was created but data write operation failed -2. **Schema mismatch**: The parquet file schema doesn't match the ingestion mapping reference for the target table. - - Columns in the parquet file may have different names or data types than expected - - The ingestion mapping (e.g., `_mapping`) may be outdated or incorrect - - New columns were added to the export schema that aren't in the mapping +- **Schema mismatch**: The parquet file schema doesn't match the ingestion mapping reference for the target table. + - Columns in the parquet file may have different names or data types than expected + - The ingestion mapping (e.g., `
_mapping`) may be outdated or incorrect + - New columns were added to the export schema that aren't in the mapping -3. **Corrupted or invalid parquet files**: The source file may be malformed, corrupted, or not a valid parquet file. +- **Corrupted or invalid parquet files**: The source file may be malformed, corrupted, or not a valid parquet file. -4. **Missing or incorrect ingestion mapping**: The referenced mapping (e.g., `Costs_raw_mapping`) doesn't exist or has incorrect column definitions. +- **Missing or incorrect ingestion mapping**: The referenced mapping (e.g., `Costs_raw_mapping`) doesn't exist or has incorrect column definitions. -5. **Data type conversion errors**: Data in the parquet file can't be converted to the target column types defined in the table schema. +- **Data type conversion errors**: Data in the parquet file can't be converted to the target column types defined in the table schema. -6. **File access issues**: Data Explorer can't access the parquet file in storage due to permissions or network issues. +- **File access issues**: Data Explorer can't access the parquet file in storage due to permissions or network issues. **Mitigation steps**: diff --git a/docs-mslearn/toolkit/hubs/configure-remote-hubs.md b/docs-mslearn/toolkit/hubs/configure-remote-hubs.md index c5f8d2ce6..445f47792 100644 --- a/docs-mslearn/toolkit/hubs/configure-remote-hubs.md +++ b/docs-mslearn/toolkit/hubs/configure-remote-hubs.md @@ -15,7 +15,7 @@ Remote hubs enable cross-tenant cost data collection scenarios where a central t Remote hubs work across different Azure clouds, supporting: - Azure Commercial - Azure Government -- Azure China +- Azure operated by 21Vianet
@@ -35,8 +35,8 @@ Consider remote hubs when you have: In a remote hub configuration: -1. **Primary hub**: Central FinOps hub that receives and stores aggregated data from all tenants -2. **Remote (satellite) hubs**: FinOps hubs in remote tenants that process local cost data and send it to the primary hub +- **Primary hub**: Central FinOps hub that receives and stores aggregated data from all tenants +- **Remote (satellite) hubs**: FinOps hubs in remote tenants that process local cost data and send it to the primary hub
diff --git a/docs-mslearn/toolkit/power-bi/cost-summary.md b/docs-mslearn/toolkit/power-bi/cost-summary.md index 5016cb27f..c241ce3b5 100644 --- a/docs-mslearn/toolkit/power-bi/cost-summary.md +++ b/docs-mslearn/toolkit/power-bi/cost-summary.md @@ -98,7 +98,7 @@ The **Running total** page shows the running total (or accumulated cost) for the The page uses the standard layout with cost, negotiated discount savings, and commitment discount savings in the chart. The subscription hierarchy with resource groups and resources are shown in the table. -:::image type="content" source="./media/cost-summary/running-total.png" border="true" alt-text="Screenshot of the Running total page that shows the accumulated cost for the period.." lightbox="./media/cost-summary/running-total.png" ::: +:::image type="content" source="./media/cost-summary/running-total.png" border="true" alt-text="Screenshot of the Running total page that shows the accumulated cost for the period." lightbox="./media/cost-summary/running-total.png" :::
diff --git a/src/scripts/Publish-Toolkit.ps1 b/src/scripts/Publish-Toolkit.ps1 index 670600f62..8a06adcec 100644 --- a/src/scripts/Publish-Toolkit.ps1 +++ b/src/scripts/Publish-Toolkit.ps1 @@ -104,7 +104,7 @@ function Find-Repo($config, [string]$templateName) return $config } Write-Debug " Not @ $repoRootDir" - } + } | Select-Object -First 1 } # Create a new branch in the repo From cfe74801ed8c1b32bc406f0053e45ae81a191a38 Mon Sep 17 00:00:00 2001 From: msbrett Date: Wed, 11 Feb 2026 07:24:58 -0800 Subject: [PATCH 2/3] fix changelog typos --- docs-mslearn/toolkit/changelog.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs-mslearn/toolkit/changelog.md b/docs-mslearn/toolkit/changelog.md index 157184b0a..264ee66c4 100644 --- a/docs-mslearn/toolkit/changelog.md +++ b/docs-mslearn/toolkit/changelog.md @@ -96,7 +96,7 @@ _Released January 2026_ - Fixed tag expansion when tag names contain special characters like colons. - Fixed unattached disks count in the workload optimization report to show only truly unattached disks ([#1896](https://github.com/microsoft/finops-toolkit/issues/1896)). - Fixed "Number of Months" parameter calculation that was excluding the first 5 days of data ([#1833](https://github.com/microsoft/finops-toolkit/issues/1833)). - - Fixed EA department scope failing on pricesheet export by skipping unsupported scopes ([#1870](https://github.com/microsoft/finops-toolkit/issues/1870)). + - Fixed EA department scope failing on price sheet export by skipping unsupported scopes ([#1870](https://github.com/microsoft/finops-toolkit/issues/1870)). ### [Optimization engine](optimization-engine/overview.md) v13 @@ -165,7 +165,7 @@ _Released July 16, 2025_ - Added new properties to the [Recommendations managed dataset](hubs/data-model.md#recommendations-managed-dataset) to support custom recommendations. - Start Azure Data Explorer automatically if stopped when data is added to the ingestion container ([#1371](https://github.com/microsoft/finops-toolkit/issues/1371)). - Added a new **enableManagedExports** parameter to support disabling managed exports and not requiring the ability to assign the User Access Administrator role to a hub identity ([#1600](https://github.com/microsoft/finops-toolkit/issues/1600)). - - Document [how savings are calcultated](hubs/savings-calculations.md) and how to troubleshoot negative savings. + - Document [how savings are calculated](hubs/savings-calculations.md) and how to troubleshoot negative savings. - **Changed** - Changed all `decimal` columns to use `real` in raw and v1_2 tables and functions for improved performance. - Updated the Data Explorer dashboard to use the v1_2 schema. @@ -268,7 +268,7 @@ _Released June 2, 2025_ ### [Power BI reports](power-bi/reports.md) v0.11 - **Added** - - Added a new [Invoicing and charegback report](power-bi/invoicing.md) that shows billed cost breakdowns, chargeback, and invoice recon pages. + - Added a new [Invoicing and chargeback report](power-bi/invoicing.md) that shows billed cost breakdowns, chargeback, and invoice recon pages. - Added a new [Usage analysis page](power-bi/cost-summary.md#usage-analysis) that shows usage over time compared to cost for a specific unit. - Added a new [Commitment discount utilization page](power-bi/rate-optimization.md#commitment-discount-utilization) that shows commitment discount utilization over time. - Added a new [Commitment discount resources page](power-bi/rate-optimization.md#commitment-discount-resources) that shows the resources that were covered by a specific commitment discount. @@ -389,7 +389,7 @@ _Released May 4, 2025_ - **Added** - Top 10 request: Added support for connecting FinOps hubs to Microsoft Fabric Real-Time Intelligence. - - Added support for Azure Gov and Azure China. + - Added support for Azure Gov and Azure operated by 21Vianet. - Expand deployment steps into a dedicated [Create and update FinOps hubs tutorial](hubs/deploy.md). - Created new bicep modules to support extensibility: - The **hub-app** module creates resources and tracks telemetry when an app is deployed. @@ -409,7 +409,7 @@ _Released May 4, 2025_ ### [Power BI reports](power-bi/reports.md) v0.10 - **Added** - - Added support for Azure Gov and Azure China. + - Added support for Azure Gov and Azure operated by 21Vianet. - Documented that SAS tokens may require configuration at the storage account (and not a container) level ([#1418](https://github.com/microsoft/finops-toolkit/issues/1418#issuecomment-2834146702)). - Documented additional errors and mitigation steps. - **Changed** @@ -418,7 +418,7 @@ _Released May 4, 2025_ - Reduced data amount in the NetworkSecurityGroups query to avoid size limits ([#1540](https://github.com/microsoft/finops-toolkit/issues/1540)). - Disabled the PolicyDefinitions query due to size limits ([#1539](https://github.com/microsoft/finops-toolkit/issues/1539)). - Removed the Virtual machines page in the Workload optimization report ([#1519](https://github.com/microsoft/finops-toolkit/issues/1519)). - - Updated Resource Graph queries to support handle no results ([#1550](https://github.com/microsoft/finops-toolkit/issues/1550)). + - Updated Resource Graph queries to handle no results ([#1550](https://github.com/microsoft/finops-toolkit/issues/1550)). - Fixed reservation recommendation query for raw MCA exports ([#1530](https://github.com/microsoft/finops-toolkit/issues/1530)). - Fixed a parsing issue with the HubScopes query ([#1521](https://github.com/microsoft/finops-toolkit/issues/1521)). - Added a "Remove Duplicate Resource IDs" parameter to work around a bug in Azure Resource Graph ([#1541](https://github.com/microsoft/finops-toolkit/issues/1541)). @@ -764,7 +764,7 @@ _Released February 12, 2025_ - Deprecated the `monthsago()` KQL function. Please use `startofmonth(datetime, [offset])` instead. - **Fixed** - Improved performance and memory consumption in the `parse_resourceid()` function to address out of memory errors during cost data ingestion ([#1188](https://github.com/microsoft/finops-toolkit/issues/1188)). - - Fixed timezones for Data Factory triggers to resolve issue where triggers would not start due to unrecognized timezone. + - Fixed time zones for Data Factory triggers to resolve issue where triggers wouldn't start due to unrecognized time zone. - 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. @@ -1164,7 +1164,7 @@ _Released October 2, 2024_ - Deprecated - With the deprecation of the legacy Log Analytics agent in August 31, the `Setup-LogAnalyticsWorkspaces` script is no longer being maintained and will be removed in a future update. - The script was used to set up performance counters collection for machines connected to Log Analytics workspaces with the legacy agent. - - We recommend migrating to the [Azure Monitor Agent](/azure/azure-monitor/agents/azure-monitor-agent-migration) and use the `Setup-DataCollectionRules` script to [setup performance counters collection with Data Collection Rules](optimization-engine/configure-workspaces.md). + - We recommend migrating to the [Azure Monitor Agent](/azure/azure-monitor/agents/azure-monitor-agent-migration) and use the `Setup-DataCollectionRules` script to [set up performance counters collection with Data Collection Rules](optimization-engine/configure-workspaces.md). ### [PowerShell module](powershell/powershell-commands.md) v0.6 From 4e05f22375be94929d44590bf87792722024d437 Mon Sep 17 00:00:00 2001 From: msbrett Date: Wed, 11 Feb 2026 07:34:40 -0800 Subject: [PATCH 3/3] Update author --- docs-mslearn/toolkit/changelog.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs-mslearn/toolkit/changelog.md b/docs-mslearn/toolkit/changelog.md index 264ee66c4..eb6fc590e 100644 --- a/docs-mslearn/toolkit/changelog.md +++ b/docs-mslearn/toolkit/changelog.md @@ -1,13 +1,13 @@ --- 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: flanakin -ms.author: micflan +author: MSBrett +ms.author: brettwil ms.date: 02/11/2026 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit -ms.reviewer: micflan +ms.reviewer: brettwil #customer intent: As a FinOps user, I want to understand what changes were made in the latest FinOps toolkit releases. ---