# Kosten zu einem eigenen Anbieter hochladen

Ein eigener Anbieter enthält Kosten, die Costfluent nicht selbst erfasst: ein Cloud-Konto, mit dem
es sich nicht verbinden kann, eine SaaS-Rechnung oder jede andere Quelle, die Sie als FOCUS-CSV
exportieren können. Sie legen ihn mit einem Namen an, laden Dateien zu ihm hoch, und seine Kosten
erscheinen in Cost Reports unter diesem Namen. Es gibt keine Zugangsdaten und nichts zu
synchronisieren.

## Wie Costfluent einen Upload liest

Ein Upload ist ein Lauf eines Exports: alle Dateien dieses Laufs, zusammen hochgeladen. Costfluent
prüft jede Zeile, bevor es eine importiert. Ist auch nur eine Zeile ungültig, wird nichts importiert
und der Upload schlägt mit einem Bericht seiner Fehler fehl.

Ein abgeschlossener Upload ersetzt die Kosten des Anbieters für jeden Tag von seiner ersten bis zu
seiner letzten Belastung, auch für Tage in diesem Bereich, für die er keine Zeilen enthält. Ein
erneuter Upload desselben Monats korrigiert ihn daher, statt etwas hinzuzufügen, und ein Upload, der
nur einen Teil eines Monats abdeckt, lässt den Rest des Monats unverändert.

## Voraussetzungen

- Die Berechtigung **Integrationen verwalten**, die Inhaber und Integrationsinhaber haben, um einen
  eigenen Anbieter anzulegen und Dateien hochzuladen oder zu löschen. Wer **Integrationen anzeigen**
  hat, sieht die Uploads.
- Kosten in FOCUS-Spalten, wie unter **Dateiformat** beschrieben. Azure, AWS und Google Cloud bieten
  alle einen FOCUS-Export an.

## Verbinden

### Anbieter anlegen

1. Öffnen Sie **Einstellungen**, dann **Integrationen**, und wählen Sie **Custom provider**.
2. Wählen Sie **New custom provider**.
3. Geben Sie einen **Name** ein, etwa das Konto oder den Tenant, aus dem die Kosten stammen, und
   optional eine **Beschreibung**, und wählen Sie dann **Anbieter erstellen**.

Die Seite des Anbieters öffnet sich. Ein eigener Anbieter zählt wie jede andere Verbindung zu den
Verbindungen Ihres Tarifs.

### Einen Lauf hochladen

1. Wählen Sie auf der Seite des Anbieters unter **Uploads** die Option **Dateien auswählen** und
   wählen Sie alle Dateien eines Exportlaufs, als `.csv` oder `.csv.gz`.
2. Wählen Sie **Hochladen**.

Der Upload erscheint als **Ausstehend**, dann **In Verarbeitung**, und endet als **Abgeschlossen**
oder **Fehlgeschlagen**. Ein abgeschlossener Upload zeigt die Tage, die er abdeckt, und was er je
Währung abgerechnet hat. Wählen Sie **Vorlage herunterladen** für eine CSV mit den Spalten und zwei
Beispielzeilen.

## Dateiformat

Die erste Zeile ist die Kopfzeile. Spalten werden nach Namen zugeordnet, in beliebiger Reihenfolge;
Spalten, die Costfluent nicht liest, einschließlich aller `x_`-Erweiterungsspalten, werden
ignoriert.

| Spalte | Pflicht | Hinweise |
|---|---|---|
| `ChargePeriodStart` | ja | `YYYY-MM-DD` oder ein ISO-8601-Zeitstempel. |
| `ChargeCategory` | ja | `Usage`, `Purchase`, `Tax`, `Credit` oder `Adjustment`; `Fee`, `Refund` und `Discount` werden ebenfalls angenommen. |
| `ServiceName` | ja | |
| `BilledCost` | ja | |
| `BillingCurrency` | ja | Ein ISO-4217-Code, in jeder Zeile. |
| `ChargePeriodEnd` | nein | Exklusiv, wie in FOCUS: Eine Belastung für den 1. September endet am 2. September. Ohne sie dauert eine Belastung einen Tag. |
| `EffectiveCost` | nein | Standardmäßig `BilledCost`. |
| `ListCost` | nein | Standardmäßig `BilledCost`. |
| `ConsumedQuantity`, `ConsumedUnit` | nein | Eine Menge braucht ihre Einheit. |
| `ServiceCategory`, `ServiceSubcategory` | nein | |
| `ResourceId`, `ResourceName`, `ResourceType` | nein | |
| `RegionId`, `RegionName` | nein | |
| `BillingAccountId`, `SubAccountId`, `SubAccountName` | nein | |
| `SkuId`, `ChargeDescription` | nein | |
| `CommitmentDiscountId`, `CommitmentDiscountType` | nein | |
| `LineItemId` | nein | Kennzeichnet eine Zeile über Uploads hinweg. |
| `Tags` | nein | Ein JSON-Objekt mit Zeichenkettenwerten, etwa `{"team":"platform"}`. |

Beträge sind einfache Zahlen mit Punkt als Dezimaltrennzeichen und dürfen wissenschaftliche
Schreibweise wie `1.2E-05` verwenden. Ein Währungssymbol, ein Tausendertrennzeichen oder eine Einheit
macht die Zeile ungültig. Ein Zeitstempel ohne Zeitzone wird als UTC gelesen, einer mit Versatz wird
nach UTC umgerechnet, sodass jede Belastung auf ihren UTC-Tag fällt. Eine Belastung über mehrere
Tage wird gleichmäßig auf sie verteilt.

Kosten bleiben in der Währung, in der jede Zeile abrechnet; Berichte rechnen sie um wie alle anderen
Kosten.

## Daten und Aktualität

Die Verarbeitung beginnt, sobald ein Upload eingegangen ist, und dauert meist Minuten; die Seite des
Anbieters aktualisiert sich, bis sie endet. In Cost Reports erscheinen die Kosten unter dem Namen,
den Sie dem Anbieter gegeben haben.

### Grenzen

- Die Dateien eines Uploads zusammen: 90 MB wie gesendet, 2 GB entpackt und 2.000.000 Zeilen.
- Höchstens 50 Dateien in einem Upload.
- Der Fehlerbericht enthält die ersten 1.000 Fehler und zählt die übrigen.

### Einen Azure-Export hochladen

Für einen Azure-Tenant, mit dem sich Costfluent nicht verbinden kann, exportieren Sie seine Kosten im
FOCUS-Format und laden sie hoch:

1. Legen Sie in der Kostenverwaltung dieses Tenants einen Export aus der Vorlage **Cost and usage
   (FOCUS)** an. Wählen Sie CSV mit gzip-Komprimierung, einen monatlichen oder einen täglichen
   Zeitplan für den laufenden Monat und ein Speicherkonto im selben Tenant.
2. Laden Sie nach einem Lauf alle `part_*.csv.gz`-Dateien dieses Laufs herunter. Die
   `manifest.json` des Laufs listet sie auf.
3. Laden Sie alle zusammen als einen Upload hoch.

Azure kann einen Lauf in mehrere Teile aufteilen, und ein Teil kann eine einzelne Anschaffung an
einem Tag enthalten. Laden Sie die Teile einzeln hoch, ersetzt der zweite die Tage des ersten, und
diese Anschaffung fällt weg. Ein Upload für den laufenden Monat ersetzt die Tage, die er abdeckt;
laden Sie den abgeschlossenen Monat erneut hoch, sobald Azure ihn festgeschrieben hat.

### Doppelzählung vermeiden

Hier hochgeladene Kosten werden zusätzlich zu dem gezählt, was Ihre Verbindungen erfassen. Laden Sie
keine Kosten hoch, die ein verbundenes Konto bereits meldet.

## Die Public API verwenden

Ein Token mit **Integrationen verwalten** kann dasselbe über die Public API tun, wie die
[API-Referenz](/api) beschreibt:

1. `POST /v1/providers` mit `key` gleich `custom`, einem `name` und leeren `credentials` legt den
   Anbieter an.
2. `POST /v1/custom-providers/{providerId}/uploads` nimmt die Dateien eines Laufs als wiederholte
   Multipart-Felder namens `file` entgegen und antwortet mit dem ausstehenden Upload.
3. `GET /v1/custom-providers/{providerId}/uploads` listet die Uploads auf, und
   `GET /v1/custom-providers/{providerId}/uploads/{uploadId}` liest einen, mit seinen ersten Fehlern,
   wenn er fehlgeschlagen ist. Lesen erfordert **Integrationen anzeigen**.
4. `DELETE /v1/custom-providers/{providerId}/uploads/{uploadId}` löscht einen Upload.

`POST /v1/custom-providers/{providerId}/costs` ist ein anderer Modus: Er nimmt JSON-Einträge
entgegen, die nach denselben Regeln geprüft werden, mit der Berechtigung **Integrationen
synchronisieren**. Er fügt Zeilen hinzu und korrigiert sie, entfernt aber keine, und eignet sich
daher für einen Strom neuer Belastungen statt für einen vollständigen Export.

## Aktualisieren oder trennen

Löschen Sie einen Upload in seiner Zeile unter **Uploads**. Seine Kosten werden aus den Berichten
entfernt, außer an Tagen, die ein späterer Upload ersetzt hat; diese behalten dessen Kosten. Wenn
Sie den Anbieter auf der Seite **Custom provider** entfernen, werden alle seine Kosten entfernt.

## Fehlerbehebung

### Upload-Status

| Status | Bedeutung |
|---|---|
| **Ausstehend** | Eingegangen und wartet auf die Verarbeitung. |
| **In Verarbeitung** | Wird geprüft und importiert. |
| **Abgeschlossen** | Jede Zeile wurde importiert. |
| **Teilweise importiert** | Zeilen mit derselben Kennung, die sich widersprechen, wurden ausgelassen; der Fehlerbericht nennt sie. |
| **Fehlgeschlagen** | Nichts wurde importiert. Laden Sie den Fehlerbericht herunter, korrigieren Sie die Datei und laden Sie sie erneut hoch. |

### Häufige Fehler

- **Eine Datei wird beim Hochladen abgelehnt.** Sie ist keine `.csv` oder `.csv.gz`, die Dateien
  sind zusammen zu groß, oder die Teile haben nicht dieselbe Kopfzeile. Laden Sie nur die Teile eines
  Laufs hoch.
- **Pflichtspalten fehlen.** Der Kopfzeile fehlt eine der fünf Pflichtspalten.
- **Ein Betrag ist keine Zahl.** Entfernen Sie Währungssymbole und Tausendertrennzeichen.
- **Ein Tag enthält zu viele Zeilen.** Ein Tag eines Uploads ist in seiner Größe begrenzt; teilen Sie
  einen sehr großen Export nach Tagen auf.

## Verwandte Themen

- [Verbindungen verwalten](/de/connect/manage-connections)
- [Währung](/de/currency)
