Add FOCUS 1.4 hub functions (HubSetup_v1_4.kql)#2128
Conversation
Adds HubSetup_v1_3.kql with Costs_v1_3, Prices_v1_3, CommitmentDiscountUsage_v1_3, Recommendations_v1_3, and Transactions_v1_3 that union the new Costs_final_v1_3 with the existing Costs_final_v1_2 and Costs_final_v1_0 tables. For v1_2 data unioned into the v1_3 view, the 8 new FOCUS 1.3 columns default to null/empty and ServiceProviderName/HostProviderName are populated from the deprecated ProviderName/PublisherName for back compat. The same defaults apply to the v1_0 union arm on top of the existing v1_0 -> v1_2 conversion. HubSetup_Latest.kql aliases now point to *_v1_3 functions so the unversioned Costs(), Prices(), etc. return the latest schema. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…cus14-phase2-hubs-1.3
Renames HubSetup_v1_3.kql to HubSetup_v1_4.kql, consolidating all hub functions (including ContractCommitment) for FOCUS 1.4 GA. Updates HubSetup_Latest.kql to alias all unversioned functions to v1_4. Updates app.bicep and .build.config to reference v1_4. Co-Authored-By: Claude <noreply@anthropic.com>
…cus14-phase2-hubs-1.3
- Rename ContractCommitment_v1_4() -> ContractCommitments_v1_4() (and update folder label) - Add BillingPeriods_v1_4() and InvoiceDetails_v1_4() hub functions - Add BillingPeriods(), ContractCommitments() (renamed), and InvoiceDetails() unversioned aliases in HubSetup_Latest.kql - Add CommitmentProgramEligibilityDetails + 12 ContractCommitment* + InvoiceDetailId column defaults to Costs_final_v1_0 and Costs_final_v1_2 union arms (back-compat shims) and add them to the project list 🤖 Generated with [Claude Code](https://claude.ai/claude-code) Co-Authored-By: Michael Flanakin <flanakin@users.noreply.github.com> Co-Authored-By: Claude <noreply@anthropic.com>
|
🤖 [AI][Claude Code] PR Update Summary Cascade of PR #2126 feedback (#2126 review threads 1, 4, 5, 6):
Depends on PR #2126 (ingestion side). |
There was a problem hiding this comment.
Should this be in this PR? It's already in PR #2127
There was a problem hiding this comment.
Same comment: This is already in PR @2126
Do we want to review it here or there?
| // BillingPeriods_final_v1_4 | ||
| .create-or-alter function | ||
| with (docstring = 'Gets all billing periods aligned to FOCUS 1.4.', folder = 'BillingPeriods') | ||
| BillingPeriods_v1_4() |
There was a problem hiding this comment.
Sort this list alphabetically. BillingPeriods should be before CommitmentDiscountUsage and InvoiceDetails should be after Costs.
There was a problem hiding this comment.
We're missing the updates to the HubSetup_v1_0.kql and HubSetup_v1_2.kql functions to backport v1_4 data to those schemas.
| PricingCurrency, | ||
| PricingQuantity, | ||
| PricingUnit, | ||
| // ProviderName and PublisherName removed in FOCUS 1.4. Use ServiceProviderName / HostProviderName. |
There was a problem hiding this comment.
| // ProviderName and PublisherName removed in FOCUS 1.4. Use ServiceProviderName / HostProviderName. |
|
|
||
|
|
||
| //====================================================================================================================== | ||
| // Latest FOCUS version |
There was a problem hiding this comment.
This section doesn't belong in this file. It's in the HubSetup_Latest.kql file already
| with (docstring = 'Gets all commitment discount usage records aligned to FOCUS 1.4.', folder = 'CommitmentDiscountUsage') | ||
| CommitmentDiscountUsage_v1_4() | ||
| { | ||
| database('Ingestion').CommitmentDiscountUsage_final_v1_4 |
There was a problem hiding this comment.
| database('Ingestion').CommitmentDiscountUsage_final_v1_4 | |
| database('Ingestion').CommitmentDiscountUsage_final_v1_4 | |
| | union (database('Ingestion').CommitmentDiscountUsage_final_v1_2) |
| with (docstring = 'Gets all prices aligned to FOCUS 1.4.', folder = 'Prices') | ||
| Prices_v1_4() | ||
| { | ||
| database('Ingestion').Prices_final_v1_4 |
There was a problem hiding this comment.
| database('Ingestion').Prices_final_v1_4 | |
| database('Ingestion').Prices_final_v1_4 | |
| | union (database('Ingestion').Prices_final_v1_2) |
| with (docstring = 'Gets all recommendations aligned to FOCUS 1.4.', folder = 'Recommendations') | ||
| Recommendations_v1_4() | ||
| { | ||
| database('Ingestion').Recommendations_final_v1_4 |
There was a problem hiding this comment.
| database('Ingestion').Recommendations_final_v1_4 | |
| database('Ingestion').Recommendations_final_v1_4 | |
| | union (database('Ingestion').Recommendations_final_v1_2) |
| with (docstring = 'Gets all transactions aligned to FOCUS 1.4.', folder = 'Transactions') | ||
| Transactions_v1_4() | ||
| { | ||
| database('Ingestion').Transactions_final_v1_4 |
There was a problem hiding this comment.
| database('Ingestion').Transactions_final_v1_4 | |
| database('Ingestion').Transactions_final_v1_4 | |
| | union (database('Ingestion').Transactions_final_v1_2) |
…n-1.3' into flanakin/focus14-phase2-hubs-1.3
- Union _final_v1_2 tables into CommitmentDiscountUsage/Prices/Recommendations/Transactions_v1_4() to avoid data loss for existing hubs - Add _final_v1_4 down-convert arms to all 5 dataset functions in HubSetup_v1_0.kql and HubSetup_v1_2.kql for back compat with reports pinned to older schemas - Fix swapped HostProviderName/ServiceProviderName up-converts in Costs_v1_4() to mirror ingestion mapping - Remove duplicated unversioned function tails from HubSetup_v1_4.kql and HubSetup_v1_2.kql (HubSetup_Latest.kql is the single owner) - Repoint dashboard.json from Costs_v1_2 to Costs_v1_4 - Harden CommitmentDiscountUsage_v1_4() Services lookup with take_any to prevent row fan-out - Alphabetize function order, remove stale comment, and fix trailing whitespace in HubSetup_v1_4.kql Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Pushed 7181c9a addressing all review feedback (after merging in the #2126 round-2 fixes, cd2873b). Mapping to review comments:
Also in this push (same class as prior review findings):
Verification: |
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Synced with phase 1 (which now carries the dev merge, the v1_2→v1_4 fix ports, and the Q4 ContractCommitments spec alignment). Clean merge, no conflicts. No hub-function changes were needed: Verified: |
🛠️ Description
Adds FOCUS 1.4 hub database functions with full cross-version compatibility. Part 2 of the FOCUS 1.4 PR stack; based on #2126 (phase 1, ingestion), so all
IngestionSetup_*content in this diff comes from that PR — review onlyHubSetup_*,dashboard.json, and the hub-sideapp.bicep/.build.configentries here.HubSetup_v1_4.kqlwith{ds}_v1_4()functions for all 8 datasets: BillingPeriods, CommitmentDiscountUsage, ContractCommitments, Costs, InvoiceDetails, Prices, Recommendations, Transactions._final_v1_4 ∪ _final_v1_2 ∪ _final_v1_0, up-converting older rows (decimal→real, column renames, FOCUS 1.4 column defaults).Costs_v1_4()derivesHostProviderName/ServiceProviderNamefrom deprecatedProviderName/PublisherName, mirroring the ingestion mapping (non-empty guaranteed per FOCUS)._final_v1_4only; they remain empty until Cost Management ships an export.HubSetup_v1_0.kql/HubSetup_v1_2.kql: all 5 existing dataset functions now also union_final_v1_4down-converted (ProviderName = HostProviderName,PublisherName = ServiceProviderName, FOCUS 1.3/1.4-only columns removed, real→decimal for v1_0), so existing Power BI reports and dashboards pinned to_v1_0()/_v1_2()keep working after ingestion switches to 1.4.HubSetup_Latest.kqlaliases all 8 unversioned functions (Costs(),Prices(), etc.) to_v1_4(); unversioned tails removed from versioned files (Latest is the single owner).dashboard.jsonrepointed fromCosts_v1_2toCosts_v1_4.CommitmentDiscountUsage_v1_4()Services lookup usestake_anyto prevent row fan-out (same class as Fix Costs_v1_2 duplicate records from Services table join #1907).app.bicepand.build.configregister the v1_4 hub script.Verification
pwsh -Command ./src/scripts/Build-Toolkit finops-hubpasses (Bicep compiles; KQL underloadTextContent()size limits).{ds}_v1_4()functions references_final_v1_0,_final_v1_2, and_final_v1_4.HubSetup_v1_0.kqlandHubSetup_v1_2.kqlreferences_final_v1_4.HubSetup_Latest.kqlaliases all 8 unversioned functions to_v1_4(); no unversioned definitions remain inHubSetup_v1_2.kql/HubSetup_v1_4.kql.dashboard.jsonhas zeroCosts_v1_2references._final_v1_4table schemas match_final_v1_2for CommitmentDiscountUsage/Prices/Recommendations/Transactions (plain unions safe); Costs delta (23 new columns, 2 removed) handled explicitly.📋 Checklist
🔬 How did you test this change?
📦 Deploy to test?
🙋♀️ Do any of the following that apply?
🤖 Generated with Claude Code