Costfluent Docs
  • Pricing
  • Changelog
  • costfluent.com
  • Documentation
  • Guides
  • API Reference
Product
  • Pricing
  • Security
  • Changelog
Developers
  • API reference
  • Terraform
  • llms.txt
Legal
  • Privacy
  • Terms
  • Imprint
Erste Schritte
Konzepte
Quelle verbinden
Berichte
Zuordnung
Planung
Optimierung
Verwaltung
Entwickler
    Authentifizierung bei der Public APIVersionierung der Public APIPaginierung der Public APIObjekte mit der Public API ändernFehler der Public APIRate Limits der Public APIDatenformate der Public APIWebhook-BenachrichtigungenTerraformMCP-ServerPower BI und Excel
Entwickler

Power BI und Excel

Deine Costfluent-Kosten nach Monat, Dienst und Unterkonto mit einer Power-Query-Abfrage über die Public API und einem Workspace-API-Token mit Leserechten in Power BI Desktop oder Excel laden.

Die Costfluent-Abfrage für Power Query liest die Kosten eines Workspaces aus der Public API in eine Tabelle: eine Zeile je Monat, Dienst und Unterkonto über die letzten 12 Monate, oder weniger, wenn der Plan weniger Verlauf aufbewahrt, mit Kosten, amortisierten Kosten, Listenkosten und Währung. Power BI Desktop und Excel führen beide Power Query aus, daher funktioniert dieselbe Abfrage in beiden, und Aktualisieren liest die neuesten Kosten erneut. Um die Zahlen eines Berichts einmalig in eine Tabellenkalkulation zu holen, exportiere ihn stattdessen; siehe Als CSV oder Excel exportieren.

Bevor du beginnst

Verfügbar im Pro-, Business- und Custom-Tarif. Tarife vergleichen

  • Das Token zu erstellen erfordert die Organisationsrolle Eigentümer, Integrationsverantwortliche Person oder Bearbeiter; siehe API-Authentifizierung.
  • Power BI Desktop oder Excel für Microsoft 365.
  • Die ID des Workspaces: Einstellungen, dann Arbeitsbereiche, listet sie in der Spalte ID mit einer Kopierschaltfläche. Seine Währungseinstellungen bestimmen, wie die Beträge dargestellt werden; siehe Währungseinstellungen.

Token erstellen

  1. Öffne Einstellungen, dann API-Token, und wähle API-Token erstellen.
  2. Gib einen Name ein, der sagt, wo das Token genutzt wird, etwa Power-BI-Finanzbericht.
  3. Wähle unter Zugriff den Arbeitsbereich, den der Bericht liest.
  4. Wähle unter Vorlage die Vorlage Nur lesen und entferne dann jede Berechtigung außer Kosten anzeigen, der einzigen, die die Abfrage braucht.
  5. Wähle den Ablauf, etwa 90 Tage, und wähle API-Token erstellen.
  6. Kopiere das Token aus Ihr API-Token. Es wird nur einmal angezeigt.

Die Abfrage

Kopiere die Abfrage unten oder lade costfluent-costs.pq herunter. Ersetze die drei Werte oben: ApiToken durch dein Token, WorkspaceId durch die ID des Workspaces und Months, wenn du mehr oder weniger als 12 Monate willst. Months nimmt eine ganze Zahl ab 1; jeder andere Wert hält die Abfrage mit einem Fehler an, der das sagt.

Code
// Costfluent costs by month, service and sub-account, read from the Costfluent Public API. // Paste this into a blank query in Power BI Desktop or Excel, then fill in the three values below. // https://docs.costfluent.com/developers/power-bi let // A workspace API token made from the "Read only" preset. Anyone holding this file can read // your costs with it, so remove it before you share the file. ApiToken = "cf_ws_paste_your_token_here", // The workspace's ID, from Settings, then Workspaces. Its currency settings present the amounts. WorkspaceId = "wsp_paste_the_workspace_id_here", // How many months to read, this month included. When the plan keeps less history, the table // starts at the first whole month the plan keeps. Months = 12, BaseUrl = "https://api.costfluent.com", PageSize = 5000, // Paging reaches 100,000 rows (page x limit); a longer read is split into one window per month. MaxRowsPerWindow = 100000, Today = Date.From(DateTimeZone.UtcNow()), RequestedStart = if Months < 1 or Number.RoundDown(Months) <> Months then error "Months must be a whole number of 1 or more." else Date.StartOfMonth(Date.AddMonths(Today, 1 - Months)), IsoDate = (value as date) as text => Date.ToText(value, [Format = "yyyy-MM-dd", Culture = "en-US"]), ReadPage = (startDate as date, endDate as date, page as number) as record => Json.Document( Web.Contents( BaseUrl, [ RelativePath = "v1/costs", Query = [ startDate = IsoDate(startDate), endDate = IsoDate(endDate), workspaceId = WorkspaceId, granularity = "month", groupBy = {"serviceName", "subAccount"}, page = Number.ToText(page), limit = Number.ToText(PageSize) ], Headers = [Authorization = "Bearer " & ApiToken, Accept = "application/json"] ] ) ), // Reads every page of one window, following links.next until it is null. ReadWindow = (startDate as date, endDate as date) as list => List.Combine( List.Generate( () => [Page = 1, Response = ReadPage(startDate, endDate, 1)], each [Response] <> null, each [ Page = [Page] + 1, Response = if [Response][links][next]? = null then null else ReadPage(startDate, endDate, [Page] + 1) ], each [Response][data] ) ), // The whole window's first page tells how many rows it holds, and its meta.historyFloor the // earliest day the plan keeps when that is later than the requested start. The table then starts // at the first whole month from that day, so no month shows only part of its cost. When the start // stays, ReadWindow's first page is the same request, which Power Query may answer from its cache. WholeWindow = ReadPage(RequestedStart, Today, 1), HistoryFloor = WholeWindow[meta][historyFloor]?, FloorDay = if HistoryFloor = null then null else Date.FromText(HistoryFloor, [Format = "yyyy-MM-dd", Culture = "en-US"]), FirstDay = if FloorDay = null then RequestedStart else if Date.Day(FloorDay) = 1 then FloorDay else Date.AddMonths(Date.StartOfMonth(FloorDay), 1), MonthCount = (Date.Year(Today) - Date.Year(FirstDay)) * 12 + Date.Month(Today) - Date.Month(FirstDay) + 1, Windows = if WholeWindow[meta][totalRecords] <= MaxRowsPerWindow then {[Start = FirstDay, End = Today]} else List.Transform( {0 .. MonthCount - 1}, each [ Start = Date.AddMonths(FirstDay, _), End = List.Min({Date.EndOfMonth(Date.AddMonths(FirstDay, _)), Today}) ] ), Rows = List.Combine(List.Transform(Windows, each ReadWindow([Start], [End]))), // Amounts arrive as decimal strings so that no digit is lost on the way. Costs = Table.FromRecords( List.Transform( Rows, each [ Month = Date.FromText([date], [Format = "yyyy-MM-dd", Culture = "en-US"]), Service = [dimensions][ServiceName]?, #"Sub-account" = [dimensions][SubAccount]?, Cost = Decimal.From([cost], "en-US"), #"Amortized cost" = Decimal.From([amortizedCost], "en-US"), #"List cost" = Decimal.From([listCost], "en-US"), Currency = [currency] ] ), type table [ Month = date, Service = nullable text, #"Sub-account" = nullable text, Cost = number, #"Amortized cost" = number, #"List cost" = number, Currency = text ] ) in Costs

In Power BI Desktop laden

  1. Öffne auf Start die Schaltfläche Daten abrufen und wähle Leere Abfrage. Der Power Query-Editor öffnet sich.
  2. Wähle Erweiterter Editor, ersetze den Inhalt durch die Abfrage und wähle Fertig.
  3. Wenn Power BI fragt, wie es sich mit https://api.costfluent.com verbinden soll, wähle Anonym und dann Verbinden. Das Token reist im eigenen Authorization-Header der Abfrage, den Power Query nur für eine anonyme Quelle sendet.
  4. Benenne die Abfrage um, etwa Costfluent-Kosten, und wähle Schließen und übernehmen.

In Excel laden

  1. Öffne auf Daten die Schaltfläche Daten abrufen, dann Aus anderen Quellen, und wähle Leere Abfrage.
  2. Wähle Erweiterter Editor, ersetze den Inhalt durch die Abfrage und wähle Fertig.
  3. Wenn Excel fragt, wie es sich mit https://api.costfluent.com verbinden soll, wähle Anonym und dann Verbinden.
  4. Wähle Schließen und laden. Die Kosten landen in einer Tabelle auf einem neuen Blatt; Alle aktualisieren auf Daten liest sie erneut.

Das Token steht im Klartext in der Abfrage, daher kann jede Person, die die .pbix-Datei oder die Arbeitsmappe öffnet, damit deine Kosten lesen. Bevor du die Datei teilst oder den Bericht veröffentlichst, ersetze das Token durch einen Platzhalter oder lege die Datei dort ab, wo nur Personen sie öffnen können, die diese Kosten sehen dürfen. Wenn jemand, der die Datei hatte, das Unternehmen verlässt oder das Token nach außen gelangt sein könnte, widerrufe es unter API-Token mit Token widerrufen und erstelle ein neues.

Wie es sich verhält

  • Jede Zeile ist ein Monat, ein Dienst und ein Unterkonto, mit Cost, Amortized cost und List cost als Zahlen und Currency daneben. Die Abfrage liest mit den Voreinstellungen der Public API: amortisiert, Erstattungen und Steuern einbezogen, Gutschriften ausgelassen; siehe Kostenbeträge. Ein Monat, Dienst und Unterkonto ohne Kostendaten hat keine Zeile: Eine fehlende Zeile bedeutet, dass Costfluent dafür keine Daten hat, nicht Kosten von null. Der laufende Monat reicht nur bis zum letzten Tag, den die Anbieter geliefert haben.
  • Das Verlaufslimit des Plans gilt; die Planmarkierung oben verlinkt die Limits jedes Plans. Bewahrt der Plan weniger Monate auf, als Months verlangt, meldet die API den frühesten Tag, den er aufbewahrt, und die Abfrage beginnt mit dem ersten ganzen Monat ab diesem Tag, damit kein Monat nur einen Teil seiner Kosten zeigt. Der früheste Monat in der Spalte Month zeigt, wo der Verlauf des Plans beginnt.
  • Die API sendet jeden Betrag als exakte Dezimalzahl. Power BI und Excel halten eine Zahl mit 15 signifikanten Stellen, daher wird ein Betrag mit mehr Stellen in seinen letzten Stellen gerundet; der CSV-Export ist exakt.
  • Ein Lesevorgang reicht bis 100.000 Zeilen, 20 Seiten zu 5.000. Hält der ganze Zeitraum mehr, liest die Abfrage ihn Monat für Monat. Ein einzelner Monat mit mehr als 100.000 Zeilen scheitert mit dem Fehler der API; entferne "subAccount" aus groupBy, um weniger Zeilen zu brauchen, wodurch die Spalte Sub-account leer bleibt.
  • Jede Aktualisierung sendet eine Anfrage, um zu erfahren, wie viele Zeilen der Zeitraum hält, dann eine je Seite mit bis zu 5.000 Zeilen, mindestens eine für den ganzen Zeitraum oder mindestens eine je Monat, wenn der Zeitraum geteilt wird. Verschiebt der Verlauf des Plans den Beginn nicht, wiederholt die erste Seite diese erste Anfrage, die Power Query aus seinem Cache beantworten kann. Jede Anfrage zählt gegen die Limits des Tokens; siehe Rate Limits.
  • Antwortet die API mit 429, weil das Token sein Rate Limit erreicht hat, versucht Power Query die Anfrage bis zu dreimal erneut, jeweils nach den Sekunden, die der Header Retry-After der API nennt, wie Microsoft es für Web.Contents dokumentiert (Statuscodes mit Web.Contents behandeln). Eine Aktualisierung, die das Rate Limit erreicht, wird dadurch langsamer. Eine Anfrage, die die API danach weiter ablehnt oder mit einem anderen Fehler beantwortet, lässt die Aktualisierung mit dem Fehler der API scheitern, und die nächste Aktualisierung versucht es erneut.
  • Bei einem abgelaufenen oder widerrufenen Token antwortet die API mit 401. Power Query meldet das als Fehler bei den Anmeldeinformationen und fragt unter Umständen nach Anmeldeinformationen. Andere Anmeldeinformationen helfen dort nicht, weil das Token in der Abfrage steht: Erstelle ein neues Token und ersetze es in der Abfrage.
  • Microsoft begrenzt Aktualisierungen im Power BI-Dienst: bis zu 8 geplante Aktualisierungen am Tag mit Power BI Pro und 48 mit Premium-, Premium-pro-Benutzer- oder Fabric-Kapazität, jede in höchstens zwei Stunden auf gemeinsam genutzter Kapazität, und ein Zeitplan pausiert nach zwei Monaten ohne Besuch des Berichts (Datenaktualisierung in Power BI).

Die Aktualisierung im Power BI-Dienst ist von Costfluent nicht getestet. Microsoft dokumentiert, dass eine Webquelle, die mit fester Basis-URL und ihren Optionen RelativePath und Query aufgerufen wird, wie diese Abfrage es tut, im Dienst aktualisiert werden kann, eine zur Laufzeit gebaute URL dagegen nicht. Welche Anmeldeinformationen eine solche Abfrage dort braucht, dokumentiert Microsoft nicht. Setze nach dem Veröffentlichen die Quelle https://api.costfluent.com unter den Anmeldeinformationen der Datenquelle des semantischen Modells auf Anonym und wähle Testverbindung überspringen; scheitert die Aktualisierung trotzdem, aktualisiere in Power BI Desktop und veröffentliche erneut.

Verwandte Seiten

  • API-Authentifizierung
  • Paginierung der Public API
  • Als CSV oder Excel exportieren
  • MCP-Server
MCP-Server
On this page
  • Bevor du beginnst
  • Token erstellen
  • Die Abfrage
  • In Power BI Desktop laden
  • In Excel laden
  • Wie es sich verhält
  • Verwandte Seiten