> ## Documentation Index
> Fetch the complete documentation index at: https://www.twicecommerce.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Miten tuot datasi BI-työkaluun

> Hae rivitason myynti-, maksu- ja raporttidata TWICE Commercesta API:n kautta, jotta Power BI, Excel, Google Sheets, Tableau tai Looker Studio voi rakentaa sen päälle omat näkymänsä.

<Frame caption="Raportit > Myyntinäkymä > Vie">
  <img src="https://mintcdn.com/twicecommerce/Ab7tx7ih94KQsi0k/images/reports-export.webp?fit=max&auto=format&n=Ab7tx7ih94KQsi0k&q=85&s=5b8746adc8bb592f174ae9f8130924e2" alt="Raportin Vie-välilehti, jossa ovat latauspainikkeet ja REST API -päätepisteet" width="1920" height="1080" data-path="images/reports-export.webp" />
</Frame>

<Card title="Avaa TWICE Adminissa" icon="external-link" href="https://admin.twicecommerce.com/reports" horizontal>
  reports
</Card>

Hae liikevaihto- ja maksupääkirjat API:n kautta ja rakenna niiden päälle omat näkymäsi. Nämä kaksi pääkirjaa ovat rivitason data jokaisen TWICE Commercen myynti- ja talousluvun takana: yksi rivi tilausriviä kohden ja yksi rivi maksuriviä kohden, päivämäärineen, sijainteineen, summineen ja maksutiloineen.

## Edellytykset

<Warning>
  **Vaaditut oikeudet:** API-avain. Jokaisella avaimella on tilisi omistajatason oikeudet, joten anna avain vain raporttinäkymiä rakentavalle henkilölle, älä koskaan liitä sitä jaettuun tiedostoon, ja poista se kun työ on valmis. Katso [API-avaimet](/docs/fi/concepts/integrations/api-keys).
</Warning>

<Info>
  **Päätä ennen aloittamista:**

  * **Valuutta.** Jokainen pääkirjakutsu palauttaa yhden valuutan. Tee yksi kutsu jokaista valuuttaa kohden, jolla myyt.
  * **Tarvitsemasi historia.** Yksi kutsu palauttaa enintään 100 000 riviä. Jaa pidempi historia yhteen kutsuun vuotta kohden.
</Info>

<Note>
  Edistynyt raportointi on käytettävissä **Standard**- ja **Enterprise**-paketeissa. Katso [paketit](/docs/fi/twice-commerce-overview#hinnoittelu).
</Note>

## Valitse päätepiste tarvitsemallesi datalle

Käytä kahta pääkirjaa tauluina, joiden päälle tietomallisi rakentuu. Valmis raportti palauttaa luvut, jotka yksi hallintapaneelin näkymä näyttää, enintään 1 000 riviä, joten se sopii yhteen kaavioon mutta ei tietomalliin.

| Data                                                                           | Päätepiste                                        | Rivejä kutsua kohden |
| ------------------------------------------------------------------------------ | ------------------------------------------------- | -------------------- |
| Jokainen tilausrivi päivämäärineen, sijainteineen, summineen ja maksutiloineen | `GET /internal/reporting/revenue/export`          | 100 000              |
| Jokainen maksu, hyvitys ja alustamaksu                                         | `GET /internal/reporting/payments/export`         | 100 000              |
| Yksi valmis raportti sellaisena kuin hallintapaneeli sen näyttää               | `GET /internal/reporting/reports/{reportId}/data` | 1 000                |
| Asiakkaat, varastoartikkelit, listaukset                                       | [Admin API:n](/docs/api-reference) listapäätepisteet   | Sivutettu            |

Kaikki polut osoittavat osoitteeseen `https://server.twicecommerce.com`. Raporttidata on versioidun Admin API:n ulkopuolella, joten näillä poluilla ei ole sivua **API**-välilehdellä ja ne voivat muuttua. Tarkista tämä sivu, jos yhteys lakkaa palauttamasta dataa.

## Vaiheittainen ohje

<Steps>
  <Step title="Luo API-avain">
    Luo avain kohdassa **Asetukset → Integraatiot ja API** osiossa **API-avaimet**, ja kopioi se. Koko avain näytetään vain kerran.
  </Step>

  <Step title="Muodosta pääkirjan URL-osoite">
    Lisää jakso ja valuutta pääkirjan polkuun:

    | Parametri  | Arvo                                                | Pakollinen |
    | ---------- | --------------------------------------------------- | ---------- |
    | `from`     | Jakson ensimmäinen päivä, `YYYY-MM-DD`              | Kyllä      |
    | `to`       | Jakson viimeinen päivä, `YYYY-MM-DD`, mukaan lukien | Kyllä      |
    | `currency` | ISO 4217 -koodi, esimerkiksi `EUR`                  | Kyllä      |

    Päivämäärät luetaan tilisi aikavyöhykkeellä, jonka asetat kohdassa [Tilin tiedot](/docs/fi/settings/account). Pääkirja sisältää kaikki sijainnit, joten suodata sen `Location`-sarakkeella työkalussasi.

    ```text theme={null}
    https://server.twicecommerce.com/internal/reporting/revenue/export?from=2026-01-01&to=2026-09-30&currency=EUR
    ```
  </Step>

  <Step title="Testaa URL-osoite avaimella">
    Lähetä avain `X-API-KEY`-otsakkeessa. Toimiva kutsu palauttaa pääkirjan CSV-muodossa.

    <CodeGroup>
      ```bash cURL theme={null}
      curl "https://server.twicecommerce.com/internal/reporting/revenue/export?from=2026-01-01&to=2026-09-30&currency=EUR" \
        -H "X-API-KEY: {key}" \
        -o revenue-2026.csv
      ```
    </CodeGroup>
  </Step>

  <Step title="Yhdistä työkalusi">
    Osoita työkalusi URL-osoitteeseen niin, että avain on otsakkeessa. Seuraa oman työkalusi opasta: [Power BI](/docs/fi/guides/reports/connect-power-bi), [Excel](/docs/fi/guides/reports/connect-excel), [Google Sheets](/docs/fi/guides/reports/connect-google-sheets), [Tableau](/docs/fi/guides/reports/connect-tableau) tai [Looker Studio](/docs/fi/guides/reports/connect-looker-studio).
  </Step>
</Steps>

## Lue pääkirjatiedostot

Avaa testissä tallentamasi tiedosto ja tarkista, että se alkaa näin:

```text Revenue ledger, first rows theme={null}
Create_Date;Start_Date;End_Date;Created_In_Period;Started_In_Period;Ended_In_Period;Document_Type;Revenue_Category;Order_Number;Item_Name;Quantity;Account;Location;Cost_Center;Timezone;Currency;Amount_Excl_Tax;Tax_Rate_1;Tax_Amount_1;Amount_Total;Payment_Status;Amount_Paid;Amount_Refunded;Amount_Outstanding;First_Payment_Date;Order_ID;Order_Line_Item_ID;Row_ID
2026-03-02;2026-03-14;2026-03-15;Yes;Yes;Yes;sale;booking;#1042;Meeting room A;1;Northwind Spaces;Helsinki;HEL-01;Europe/Helsinki;EUR;161.29;25.5;41.13;202.42;paid;202.42;0.00;0.00;2026-03-02;7d1c9e4a-3b2f-4c8e-9a61-5f0e2b7c4d13;a3e8f0b2-6c41-4d9a-8e27-1b5c9f3d2e60;a3e8f0b2-6c41-4d9a-8e27-1b5c9f3d2e60
2026-03-05;2026-03-05;2026-03-05;Yes;Yes;Yes;sale;sale;#1043;Used road bike, size M;1;Northwind Spaces;Helsinki;HEL-01;Europe/Helsinki;EUR;318.73;25.5;81.27;400.00;paid;400.00;0.00;0.00;2026-03-05;2f6b8d10-9e3c-4a57-b1d4-6c8e0a2f7b95;c9d2a7e4-1f38-4b6c-a5e0-3d7b9c1f8a42;c9d2a7e4-1f38-4b6c-a5e0-3d7b9c1f8a42
```

Aseta nämä neljä asetusta jokaisessa työkalussa, joka lukee tiedostoja:

| Asetus          | Arvo                                    |
| --------------- | --------------------------------------- |
| Erotin          | Puolipiste (`;`)                        |
| Merkistö        | UTF-8, BOM-merkillä                     |
| Desimaalierotin | Piste, kahdella desimaalilla (`202.42`) |
| Päivämäärät     | `YYYY-MM-DD`, tilisi aikavyöhykkeellä   |

Lue summat valuutan pääyksikössä. Hyvitykset ja alustamaksut ovat negatiivisia, joten laske `Amount_Total` yhteen saadaksesi nettoliikevaihdon tai nettotuoton.

Verosarakkeiden määrä seuraa jaksolla käytettyjä verokantoja: `Tax_Rate_1` ja `Tax_Amount_1`, sitten `_2` ja niin edelleen. Uusi verokanta jaksolla lisää sarakkeen. Viittaa sarakkeisiin nimellä, älä koskaan sijainnilla.

[Talousraportit](/docs/fi/concepts/reports/finance-reports#csv-vienti) kuvaa jokaisen sarakkeen ja sen, minkä päivämääräsarakkeen mukaan lasket myydyn, toimitetun ja palautetun liikevaihdon.

## Rakenna tietomalli pääkirjoista

Lataa kaksi pääkirjaa faktatauluiksi ja yhdistä ne liikevaihtoavaimella:

| Taulu               | Avain    | Yhdistyy                                 |
| ------------------- | -------- | ---------------------------------------- |
| Liikevaihtopääkirja | `Row_ID` |                                          |
| Maksupääkirja       | `Row_ID` | `Revenue_Row_ID` → liikevaihdon `Row_ID` |

Ryhmittele tilaukset `Order_ID`:n mukaan ja sijainnit `Location`- ja `Cost_Center`-sarakkeiden mukaan. Alustamaksuilla ja maksuilla, joilla ei ole tilausriviä, `Revenue_Row_ID` on tyhjä, joten pidä yhdistys vasempana liitoksena maksuista.

`Row_ID` pysyy samana kutsusta toiseen. Poista sen avulla kaksoiskappaleet, kun kaksi kutsua kattaa päällekkäiset jaksot.

## Lue valmis raportti

Kopioi **JSON-päätepiste** minkä tahansa raportin **Vie**-välilehdeltä haluamillasi suodattimilla. Vastaus sisältää raportin `columns`- ja `rows`-kentät:

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://server.twicecommerce.com/internal/reporting/reports/sales-overview/data?from=2026-08-28T21%3A00%3A00.000Z&to=2026-09-28T20%3A59%3A59.999Z" \
    -H "X-API-KEY: {key}"
  ```

  ```json Response (trimmed) theme={null}
  {
    "reportId": "sales-overview",
    "columns": [
      { "field": "id", "headerName": "Order ID" },
      { "field": "date", "headerName": "Date", "type": "date" },
      { "field": "customer", "headerName": "Customer" },
      { "field": "location", "headerName": "Location" },
      { "field": "total", "headerName": "Total", "type": "currency", "currency": "EUR" },
      { "field": "status", "headerName": "Status" }
    ],
    "rows": [
      { "id": "7d1c9e4a-3b2f-4c8e-9a61-5f0e2b7c4d13", "date": "2026-09-01", "customer": "Aino Virtanen", "location": "Helsinki", "total": 20242, "status": "open" },
      { "id": "2f6b8d10-9e3c-4a57-b1d4-6c8e0a2f7b95", "date": "2026-09-02", "customer": "Lumo Events Oy", "location": "Tampere", "total": 40000, "status": "closed" }
    ],
    "totalCount": 212,
    "truncated": false
  }
  ```
</CodeGroup>

`currency`-tyyppiset sarakkeet ovat pienimmissä yksiköissä (senteissä): jaa sadalla saadaksesi euroja. `truncated: true` tarkoittaa, että raportti osui 1 000 rivin rajaan, joten rajaa päivämääriä tai käytä pääkirjaa.

Hae valmis raportti CSV-muodossa kutsumalla `/internal/reporting/reports/{reportId}/export` parametreilla `from` ja `to`. Se palauttaa samat rivit pääkirjojen tiedostomuodossa.

## Pysy kutsurajojen sisällä

Suunnittele päivitys kutsurajojen mukaan. Päivitys, joka tekee monta kutsua kerralla, osuu rajoihin ennen kuin data valmistuu.

| Kutsu                                 | Raja IP-osoitetta kohden | Raja tiliä kohden |
| ------------------------------------- | ------------------------ | ----------------- |
| Pääkirjojen ja raporttien CSV-viennit | 5 minuutissa             | 10 minuutissa     |
| Raporttien JSON-data                  | 30 minuutissa            | 60 minuutissa     |

Pidä yksi päivitys enintään viidessä vientikutsussa. Jokainen kutsu lasketaan myös API-avaimesi kiintiöön, joka on kuvattu kohdassa [API-avaimet](/docs/fi/concepts/integrations/api-keys#kutsurajat).

## Mistä tiedän, että se onnistui?

* Testikutsu tallentaa CSV-tiedoston, jonka ensimmäinen rivi alkaa `Create_Date;Start_Date;End_Date`.
* `Amount_Total`-summa riveistä, joilla `Started_In_Period` on `Yes`, vastaa hallintapaneelin **Liikevaihtoraporttia** samalla jaksolla, valuutalla ja kirjaustavalla **Aloitettu jaksolla**.
* Tiedoston viimeinen rivi on datarivi eikä ilmoitus.

## Vianetsintä ja yleiset sudenkuopat

<AccordionGroup>
  <Accordion title="Kutsu palauttaa 401 Unauthorized">
    Avain puuttuu, on kirjoitettu väärin tai on poistettu. Lähetä se `X-API-KEY`-nimisessä otsakkeessa eikä URL-osoitteessa, ja tarkista, että avain on yhä olemassa kohdassa **Asetukset → Integraatiot ja API**.
  </Accordion>

  <Accordion title="Kutsu palauttaa 400 Bad Request">
    Pakollinen parametri puuttuu tai on väärässä muodossa. Pääkirjat tarvitsevat parametrit `from`, `to` ja `currency`, ja päivämäärien on oltava pelkkää `YYYY-MM-DD`-muotoa ilman kellonaikaa.
  </Accordion>

  <Accordion title="Viimeinen rivi on &#x22;Export truncated at 100,000 rows&#x22;">
    Jaksolla on enemmän rivejä kuin yksi kutsu palauttaa. Jaa jakso, esimerkiksi yhteen kutsuun vuotta kohden, ja liitä tulokset peräkkäin. `Row_ID` pitää yhdistetyn taulun vapaana kaksoiskappaleista.
  </Accordion>

  <Accordion title="Kutsu palauttaa 429 Too Many Requests">
    Päivitys teki liian monta kutsua minuutissa. Odota `Retry-After`-otsakkeen kertoma määrä sekunteja ja vähennä vientikutsut enintään viiteen päivitystä kohden.
  </Accordion>

  <Accordion title="Vie-välilehden CSV-päätepiste palauttaa JSONia">
    Raportin **Vie**-välilehdellä näkyvä **CSV-päätepiste** palauttaa saman JSONin kuin **JSON-päätepiste**. Saat CSV:n, kun korvaat polun `/data`-osan `/export`-osalla ja poistat `compareTo`-parametrin.
  </Accordion>

  <Accordion title="Summat ovat sata kertaa liian suuria">
    Data tulee valmiin raportin JSON-päätepisteestä, joka palauttaa rahasummat sentteinä. Jaa `currency`-sarakkeet sadalla. Pääkirjatiedostot ovat valmiiksi euroissa.
  </Accordion>

  <Accordion title="Sarake katosi tai uusi sarake ilmestyi">
    Verosarakkeet seuraavat jaksolla käytettyjä verokantoja. Viittaa sarakkeisiin nimellä, ja käsittele sarakkeita `Tax_Rate_n` ja `Tax_Amount_n` valinnaisina.
  </Accordion>
</AccordionGroup>

## Aiheeseen liittyvät artikkelit

<CardGroup cols={2} className="doc-rows-condensed">
  <Card title="Yhdistä Power BI" href="/docs/fi/guides/reports/connect-power-bi">
    Lataa pääkirjat Power BI:hin ja päivitä ne ajastetusti.
  </Card>

  <Card title="Yhdistä Google Sheets" href="/docs/fi/guides/reports/connect-google-sheets">
    Lataa pääkirjat taulukkoon Apps Scriptillä.
  </Card>

  <Card title="Talousraportit" href="/docs/fi/concepts/reports/finance-reports">
    Kahden pääkirjan jokainen sarake, ja miten kukin luku muodostuu.
  </Card>

  <Card title="API-avaimet" href="/docs/fi/concepts/integrations/api-keys">
    Avainten luonti, ja kutsurajat jotka kaikki avaimet jakavat.
  </Card>

  <Card title="Raportit" href="/docs/fi/reports">
    Jokainen valmis raportti ja sen Vie-välilehti.
  </Card>
</CardGroup>
