Skip to content

Commit 25a8c27

Browse files
authored
Release 0.7 tweaks (#1172)
1 parent 2d77b51 commit 25a8c27

File tree

14 files changed

+616
-322
lines changed

14 files changed

+616
-322
lines changed

docs/_reporting/hubs/configure-scopes.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ If you cannot grant permissions for your scope, you can create Cost Management e
4343
1. [Create a new FOCUS cost export](https://learn.microsoft.com/azure/cost-management-billing/costs/tutorial-export-acm-data?tabs=azure-portal) using the following settings:
4444

4545
- **Type of data** = `Cost and usage details (FOCUS)`<sup>1</sup>
46-
- **Dataset version** = `1.0`<sup>2</sup>
46+
- **Dataset version** = `1.0` or `1.0r2`<sup>2</sup>
4747
- **Frequency** = `Daily export of month-to-date costs`<sup>3</sup>
4848
- **Storage account** = (Use subscription/resource deployed with your hub)
4949
- **Container** = `msexports`
@@ -77,7 +77,7 @@ If you cannot grant permissions for your scope, you can create Cost Management e
7777
5. Repeat steps 1-4 for each scope you want to monitor.
7878

7979
_<sup>1) FinOps hubs 0.2 and beyond 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 do not see this option, please search for or navigate to [Cost Management Exports](https://portal.azure.com/#blade/Microsoft_Azure_CostManagement/Menu/open/exports).</sup>_
80-
_<sup>2) FinOps hubs 0.4 supports both FOCUS 1.0 and FOCUS 1.0 preview. Power BI reports in 0.4 are aligned to FOCUS 1.0 regardless of whether data was ingested as FOCUS 1.0 preview. If you need 1.0 preview data and reports, please use FinOps hubs 0.3.</sup>_
80+
_<sup>2) FinOps hubs 0.4 supports FOCUS 1.0r2, 1.0, 1.0 preview. Power BI reports in 0.4 are aligned to FOCUS 1.0 regardless of whether data was ingested as FOCUS 1.0 preview. If you need 1.0 preview data and reports, please use FinOps hubs 0.3. The only difference in FOCUS 1.0r2 is the inclusion of seconds in date columns.</sup>_
8181
_<sup>3) Configuring a daily export starts in the current month. If you want to backfill historical data, create a one-time export and set the start/end dates to the desired date range.</sup>_
8282
_<sup>4) While most settings are required, overwriting is optional. We recommend **not** overwriting files so you can monitor your ingestion pipeline using the [Data ingestion](../power-bi/data-ingestion.md) report. If you do not plan to use that report, please enable overwriting.</sup>_
8383
_<sup>5) Export paths can be any value but must be unique per scope. We recommended using a path that identifies the source scope (e.g., subscription or billing account). If 2 scopes share the same path, there could be ingestion errors.</sup>_

docs/_resources/changelog.md

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -129,10 +129,6 @@ Legend:
129129
🏦 FinOps hubs
130130
{: .fs-5 .fw-500 .mt-4 mb-0 }
131131

132-
> ➕ Added:
133-
>
134-
> 1. Infrastructure encryption - Added an optional enableInfrastructureEncryption template parameter to support storage account infrastructure encryption.
135-
136132
<small>**Breaking change**</small>
137133
{: .label .label-red .pt-0 .pl-3 .pr-3 .m-0 }
138134

@@ -151,6 +147,7 @@ Legend:
151147
> - Added param to disable external access to Azure Data Lake and Azure Data Explorer.
152148
> - Added param to specify subnet range of virtual network - minimum size = /26
153149
> 1. Support for storage account infrastructure encryption.
150+
> 1. Published a [schema file](https://aka.ms/finops/hubs/settings-schema) for the hub settings.json file.
154151
>
155152
> ✏️ Changed:
156153
>
@@ -176,7 +173,7 @@ Legend:
176173
> ➕ Added:
177174
>
178175
> - [Optimization workbook](../_optimize/workbooks/optimization/README.md)
179-
> 1. On the Storagetab, included the **RSVaultBackup** tag in the list of non-idle disks.
176+
> 1. On the Storage tab, included the **RSVaultBackup** tag in the list of non-idle disks.
180177
>
181178
> 🛠️ Fixed:
182179
>

src/power-bi/kql/CostSummary.Report/report.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@
154154
"z": 1000.00
155155
},
156156
{
157-
"config": "{\"name\":\"907968064288c59539c5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":15.562310030395137,\"y\":16,\"z\":0,\"width\":1264.0000000000002,\"height\":96,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Cost summary report\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"42pt\"}},{\"value\":\" v24.11.28\",\"textStyle\":{\"color\":\"#808080\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}",
157+
"config": "{\"name\":\"907968064288c59539c5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":15.562310030395137,\"y\":16,\"z\":0,\"width\":1264.0000000000002,\"height\":96,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Cost summary report\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"42pt\"}},{\"value\":\" v24.11.30\",\"textStyle\":{\"color\":\"#808080\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}",
158158
"filters": "[]",
159159
"height": 96.00,
160160
"width": 1264.00,

src/power-bi/kql/CostSummary.SemanticModel/definition/cultures/en-US.tmdl

Lines changed: 0 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -19844,82 +19844,6 @@ cultureInfo en-US
1984419844
}
1984519845
]
1984619846
},
19847-
"tag_cost.tag": {
19848-
"Definition": {
19849-
"Binding": {
19850-
"ConceptualEntity": "TagCosts",
19851-
"ConceptualProperty": "Tags"
19852-
}
19853-
},
19854-
"State": "Generated",
19855-
"Terms": [
19856-
{
19857-
"tag": {
19858-
"State": "Generated"
19859-
}
19860-
},
19861-
{
19862-
"device": {
19863-
"Type": "Noun",
19864-
"State": "Suggested",
19865-
"Source": {
19866-
"Agent": "Thesaurus"
19867-
},
19868-
"Weight": 0.491
19869-
}
19870-
},
19871-
{
19872-
"ticket": {
19873-
"Type": "Noun",
19874-
"State": "Suggested",
19875-
"Source": {
19876-
"Agent": "Thesaurus"
19877-
},
19878-
"Weight": 0.476
19879-
}
19880-
},
19881-
{
19882-
"tab": {
19883-
"Type": "Noun",
19884-
"State": "Suggested",
19885-
"Source": {
19886-
"Agent": "Thesaurus"
19887-
},
19888-
"Weight": 0.476
19889-
}
19890-
},
19891-
{
19892-
"docket": {
19893-
"Type": "Noun",
19894-
"State": "Suggested",
19895-
"Source": {
19896-
"Agent": "Thesaurus"
19897-
},
19898-
"Weight": 0.476
19899-
}
19900-
},
19901-
{
19902-
"chip": {
19903-
"Type": "Noun",
19904-
"State": "Suggested",
19905-
"Source": {
19906-
"Agent": "Thesaurus"
19907-
},
19908-
"Weight": 0.476
19909-
}
19910-
},
19911-
{
19912-
"mark": {
19913-
"Type": "Noun",
19914-
"State": "Suggested",
19915-
"Source": {
19916-
"Agent": "Thesaurus"
19917-
},
19918-
"Weight": 0.476
19919-
}
19920-
}
19921-
]
19922-
},
1992319847
"tag_cost.x_commitment_discount_savings": {
1992419848
"Definition": {
1992519849
"Binding": {

src/power-bi/kql/CostSummary.SemanticModel/definition/tables/ChargeBreakdown.tmdl

Lines changed: 78 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,24 @@ table ChargeBreakdown
299299

300300
annotation PBI_FormatHint = {"isGeneralNumber":true}
301301

302+
column x_ChargePeriodMonth
303+
dataType: dateTime
304+
formatString: General Date
305+
lineageTag: 487aae09-ebbf-43b1-baa2-5220b477575d
306+
summarizeBy: none
307+
sourceColumn: x_ChargePeriodMonth
308+
309+
annotation SummarizationSetBy = Automatic
310+
311+
column x_ReportingDate
312+
dataType: dateTime
313+
formatString: General Date
314+
lineageTag: 1c5359f9-6c85-4157-9274-8a4bb4f040b9
315+
summarizeBy: none
316+
sourceColumn: x_ReportingDate
317+
318+
annotation SummarizationSetBy = Automatic
319+
302320
partition ChargeBreakdown = m
303321
mode: import
304322
queryGroup: 'Data Explorer'
@@ -307,18 +325,20 @@ table ChargeBreakdown
307325
lookback = Text.From(if #"Number of Months" = "" or #"Number of Months" = null then 999 else #"Number of Months"),
308326
Source = AzureDataExplorer.Contents(#"Cluster URI", "Hub", "
309327

328+
let numberOfMonths = " & lookback & ";
329+
let monthlyGranularity = " & Text.From(#"Daily or Monthly" = "Monthly") & ";
330+
let allowCostManagementAllocationRules = false;
331+
let summarizeAfterRowCount = 400000;
310332
Costs_v1_0
311-
| where ChargePeriodStart >= monthsago(" & lookback & ")
312-
//
313-
// Filter out cost allocation changes
314-
| where isempty(x_CostAllocationRuleName)
315-
//
316-
// Fix missing costs
317-
| extend ContractedCost = iff(isempty(ContractedCost) or ContractedCost == 0, EffectiveCost, ContractedCost)
318-
| extend ListCost = iff(isempty(ListCost) or ListCost == 0, ContractedCost, ListCost)
333+
| where ChargePeriodStart >= monthsago(numberOfMonths)
334+
| where allowCostManagementAllocationRules or isempty(x_CostAllocationRuleName)
335+
| extend x_ChargePeriodMonth = startofmonth(ChargePeriodStart)
336+
| extend x_ReportingDate = iff(monthlyGranularity, x_ChargePeriodMonth, startofday(ChargePeriodStart))
319337
//
320338
| summarize
321339
BilledCost = sum(BilledCost),
340+
ChargePeriodEnd = max(ChargePeriodEnd),
341+
ChargePeriodStart = min(ChargePeriodStart),
322342
ContractedCost = sum(ContractedCost),
323343
EffectiveCost = sum(EffectiveCost),
324344
ListCost = sum(ListCost)
@@ -328,8 +348,6 @@ table ChargeBreakdown
328348
BillingCurrency,
329349
ChargeCategory,
330350
ChargeClass,
331-
ChargePeriodEnd,
332-
ChargePeriodStart,
333351
CommitmentDiscountCategory,
334352
CommitmentDiscountStatus,
335353
CommitmentDiscountType,
@@ -340,9 +358,11 @@ table ChargeBreakdown
340358
ServiceCategory,
341359
ServiceName,
342360
SubAccountName,
361+
x_ChargePeriodMonth,
343362
x_Operation,
344363
x_PricingSubcategory,
345364
x_PublisherCategory,
365+
x_ReportingDate,
346366
x_SkuMeterCategory,
347367
x_SkuMeterName,
348368
x_SkuMeterSubcategory,
@@ -373,11 +393,13 @@ table ChargeBreakdown
373393
ServiceCategory,
374394
ServiceName,
375395
SubAccountName,
396+
x_ChargePeriodMonth,
376397
x_CommitmentDiscountSavings = ContractedCost - EffectiveCost,
377398
x_NegotiatedDiscountSavings = ListCost - ContractedCost,
378399
x_Operation,
379400
x_PricingSubcategory,
380401
x_PublisherCategory,
402+
x_ReportingDate,
381403
x_SkuMeterCategory,
382404
x_SkuMeterName,
383405
x_SkuMeterSubcategory,
@@ -387,8 +409,53 @@ table ChargeBreakdown
387409
x_SkuTier,
388410
x_TotalSavings = ListCost - EffectiveCost,
389411
x_UsageType
412+
| serialize
413+
| extend ROW = row_number()
414+
| as allData
415+
| limit summarizeAfterRowCount
416+
| union (
417+
allData
418+
| where ROW > summarizeAfterRowCount
419+
| summarize
420+
BilledCost = sum(BilledCost),
421+
ChargePeriodEnd = max(ChargePeriodEnd),
422+
ChargePeriodStart = min(ChargePeriodStart),
423+
ContractedCost = sum(ContractedCost),
424+
EffectiveCost = sum(EffectiveCost),
425+
ListCost = sum(ListCost)
426+
by
427+
BillingAccountId,
428+
BillingAccountName,
429+
BillingCurrency,
430+
ChargeCategory,
431+
ChargeClass,
432+
CommitmentDiscountCategory,
433+
CommitmentDiscountStatus,
434+
CommitmentDiscountType,
435+
PricingCategory,
436+
ProviderName,
437+
PublisherName,
438+
ResourceType = '(multiple)',
439+
ServiceCategory,
440+
ServiceName,
441+
SubAccountName = '(multiple)',
442+
x_ChargePeriodMonth,
443+
x_Operation = '(multiple)',
444+
x_PricingSubcategory,
445+
x_PublisherCategory,
446+
x_ReportingDate,
447+
x_SkuMeterCategory = '(multiple)',
448+
x_SkuMeterName = '(multiple)',
449+
x_SkuMeterSubcategory = '(multiple)',
450+
x_SkuPartNumber = '(multiple)',
451+
x_SkuServiceFamily = '(multiple)',
452+
x_SkuTerm,
453+
x_SkuTier = '(multiple)',
454+
x_UsageType = '(multiple)'
455+
)
456+
| project-away ROW
390457

391-
", [MaxRows=null, MaxSize=null, NoTruncate=false, AdditionalSetStatements=null, ClientRequestIdPrefix="ftk-Resources-PurchaseCosts"])
458+
", [MaxRows=null, MaxSize=1073741824, NoTruncate=false, AdditionalSetStatements=null, ClientRequestIdPrefix="ftk-CostSummary-ChargeBreakdown"])
392459
in
393460
Source
394461

0 commit comments

Comments
 (0)