> ## 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 yhdistät Power BI:n TWICE Commerceen

> Lataa liikevaihto- ja maksupääkirjat Power BI:hin API-avain otsakkeessa, rakenna niiden päälle oma mallisi ja päivitä se ajastetusti Power BI -palvelussa.

<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 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>

Lataa liikevaihto- ja maksupääkirjat Power BI:hin kahtena kyselynä, yhdistä ne toisiinsa ja rakenna riveistä omat raporttisivusi. Power BI päivittää sen jälkeen datan TWICE Commercesta asettamasi aikataulun mukaan.

## Edellytykset

<Warning>
  **Vaaditut oikeudet:** TWICE Commercen API-avain. Sillä on omistajatason oikeudet ja se tallentuu Power BI -tiedostoon, joten jaa tiedosto vain henkilöille, joille antaisit myös avaimen. Katso [API-avaimet](/docs/fi/concepts/integrations/api-keys).
</Warning>

<Info>
  **Ennen kuin aloitat:**

  * **Power BI Desktop**, ja Power BI -palvelun työtila, jos haluat ajastetun päivityksen.
  * **Pääkirjojen päätepisteet ja tiedostomuoto** oppaasta [Tuo datasi BI-työkaluun](/docs/fi/guides/reports/pull-report-data). Tämä opas käyttää niitä toistamatta niitä.
  * **Valuuttakoodisi** ja ensimmäinen päivä, josta haluat historiaa.

  Power BI:n ja Power Queryn nimikkeet on kirjoitettu tässä oppaassa sellaisina kuin ne näkyvät englanninkielisessä käyttöliittymässä.
</Info>

## Vaiheittainen ohje

<Steps>
  <Step title="Tallenna avain parametriin">
    Avaa Power BI Desktop ja valitse **Transform data** avataksesi Power Query -editorin. Valitse **Manage Parameters → New Parameter**, anna nimeksi `TwiceApiKey`, aseta **Type**-arvoksi **Text** ja liitä avain kenttään **Current Value**.
  </Step>

  <Step title="Lisää liikevaihtopääkirjan kysely">
    Valitse **New Source → Blank Query**, avaa **Advanced Editor** ja korvaa sen sisältö alla olevalla kyselyllä. Vaihda `currency` ja `FromDate` omiksesi. Nimeä kysely `Revenue`.

    Kiinteä perus-URL yhdessä `RelativePath`- ja `Query`-asetusten kanssa on se, mikä sallii Power BI -palvelun päivittää kyselyn. Yhdeksi merkkijonoksi koottu URL päivittyy Desktopissa mutta epäonnistuu palvelussa.
  </Step>

  <Step title="Yhdistä anonyymisti">
    Valitse **Edit Credentials**, kun Power Query kysyy yhteystapaa, valitse **Anonymous** ja valitse **Connect**. Avain kulkee otsakkeessa, joten muuta kirjautumista ei tarvita.
  </Step>

  <Step title="Lisää maksupääkirjan kysely">
    Monista `Revenue`-kysely, nimeä kopio `Payments` ja vaihda `RelativePath`-arvoksi `internal/reporting/payments/export`. Korvaa tyypitetyt sarakkeet niin, että `Payment_Date` on `type date` ja `Amount_Total` on `type number`.
  </Step>

  <Step title="Yhdistä taulut toisiinsa">
    Valitse **Close & Apply** ja avaa sitten **Model**-näkymä. Vedä `Payments[Revenue_Row_ID]` kohteen `Revenue[Row_ID]` päälle luodaksesi monen suhde yhteen -yhteyden.
  </Step>

  <Step title="Julkaise ja aseta tunnistetiedot palvelussa">
    Julkaise raportti työtilaan. Avaa palvelussa semanttisen mallin **Settings**, siirry kohtaan **Data source credentials**, valitse **Edit credentials** ja valitse **Anonymous** tietosuojatasolla **Organizational**. Rastita **Skip test connection**, jos ikkuna tarjoaa sitä.
  </Step>

  <Step title="Ajasta päivitys">
    Ota **Scheduled refresh** käyttöön samoissa asetuksissa ja lisää haluamasi ajankohdat. Lähde on julkisessa internetissä, joten yhdyskäytävää ei tarvita.
  </Step>
</Steps>

Käytä tätä kyselyä liikevaihtopääkirjalle:

<CodeGroup>
  ```powerquery Revenue theme={null}
  let
      FromDate = "2025-01-01",
      ToDate = Date.ToText(Date.From(DateTime.LocalNow()), "yyyy-MM-dd"),
      Source = Web.Contents(
          "https://server.twicecommerce.com",
          [
              RelativePath = "internal/reporting/revenue/export",
              Query = [from = FromDate, to = ToDate, currency = "EUR"],
              Headers = [#"X-API-KEY" = TwiceApiKey]
          ]
      ),
      Csv = Csv.Document(Source, [Delimiter = ";", Encoding = 65001, QuoteStyle = QuoteStyle.Csv]),
      Promoted = Table.PromoteHeaders(Csv, [PromoteAllScalars = true]),
      // A truncated export ends in a notice row with no Row_ID. Drop it.
      DataRows = Table.SelectRows(Promoted, each [Row_ID] <> null and [Row_ID] <> ""),
      Typed = Table.TransformColumnTypes(
          DataRows,
          {
              {"Create_Date", type date}, {"Start_Date", type date}, {"End_Date", type date},
              {"Quantity", type number}, {"Amount_Excl_Tax", type number},
              {"Amount_Total", type number}, {"Amount_Paid", type number},
              {"Amount_Refunded", type number}, {"Amount_Outstanding", type number}
          },
          "en-US"
      )
  in
      Typed
  ```
</CodeGroup>

`"en-US"`-kulttuuri lukee arvon `202.42` numerona myös tietokoneella, jonka alueasetuksissa desimaalierotin on pilkku, kuten suomalaisissa. Verosarakkeet jätetään tyypittämättä, koska niiden määrä seuraa jakson verokantoja.

## Lataa yli 100 000 riviä

Jaa historia yhteen kutsuun vuotta kohden ja liitä tulokset peräkkäin. Pidä päivitys enintään viidessä vuodessa, joka on oppaassa [Tuo datasi BI-työkaluun](/docs/fi/guides/reports/pull-report-data#pysy-kutsurajojen-sisällä) kuvattu vientien kutsuraja.

<CodeGroup>
  ```powerquery Revenue (one call per year) theme={null}
  let
      Years = {2024, 2025, 2026},
      GetYear = (year as number) =>
          let
              Source = Web.Contents(
                  "https://server.twicecommerce.com",
                  [
                      RelativePath = "internal/reporting/revenue/export",
                      Query = [from = Text.From(year) & "-01-01", to = Text.From(year) & "-12-31", currency = "EUR"],
                      Headers = [#"X-API-KEY" = TwiceApiKey]
                  ]
              ),
              Csv = Csv.Document(Source, [Delimiter = ";", Encoding = 65001, QuoteStyle = QuoteStyle.Csv])
          in
              Table.PromoteHeaders(Csv, [PromoteAllScalars = true]),
      Combined = Table.Combine(List.Transform(Years, GetYear)),
      DataRows = Table.SelectRows(Combined, each [Row_ID] <> null and [Row_ID] <> "")
  in
      DataRows
  ```
</CodeGroup>

Lisää ensimmäisen kyselyn `Typed`-vaihe tämän kyselyn loppuun.

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

* `Revenue`-taulu näyttää yhden rivin tilausriviä kohden, ja `Amount_Total` on numerosarake.
* Kortti, joka laskee `Amount_Total`-summan suodatettuna ehdolla `Started_In_Period = "Yes"`, vastaa hallintapaneelin **Liikevaihtoraporttia** samalla jaksolla ja valuutalla.
* Semanttisen mallin **Refresh history** palvelussa näyttää valmistuneen ajastetun päivityksen.

## Vianetsintä ja yleiset sudenkuopat

<AccordionGroup>
  <Accordion title="Palvelu ilmoittaa, että tietojoukossa on dynaaminen tietolähde">
    Kysely kokoaa URL-osoitteensa yhdeksi merkkijonoksi. Kirjoita se uudelleen kiinteällä perus-URL:llä ja `RelativePath`- ja `Query`-asetuksilla, kuten yllä olevassa kyselyssä, ja julkaise uudelleen.
  </Accordion>

  <Accordion title="Summat latautuvat tekstinä tai muodossa 20242 eikä 202.42">
    Sarake tyypitettiin tietokoneesi alueasetuksilla. Säilytä `"en-US"`-kulttuuriargumentti funktiossa `Table.TransformColumnTypes`, ja poista jokainen **Changed Type** -vaihe, jonka Power Query lisäsi itse.
  </Accordion>

  <Accordion title="Päivitys epäonnistuu virheellä &#x22;The column 'Tax_Rate_2' of the table wasn't found&#x22;">
    Jokin vaihe viittaa verosarakkeeseen, jota uudella jaksolla ei ole. Poista verosarakkeet kaikista tyypitys- ja uudelleennimeämisvaiheista, ja tyypitä ne tarvittaessa raporttitasolla.
  </Accordion>

  <Accordion title="Päivitys epäonnistuu virheellä 429 Too Many Requests">
    Päivitys teki yli viisi vientikutsua minuutissa. Vähennä vuosikohtaisia kutsuja tai ajasta `Revenue`- ja `Payments`-mallit eri aikoihin.
  </Accordion>

  <Accordion title="Päivitys epäonnistuu virheellä 401, vaikka se toimi aiemmin">
    Joku poisti tai vaihtoi API-avaimen. Aseta uusi avain `TwiceApiKey`-parametriin Desktopissa tai palvelussa semanttisen mallin kohdassa **Parameters**.
  </Accordion>
</AccordionGroup>

Microsoft kuvaa Web-liittimen ja ajastetun päivityksen artikkeleissa [Power Query Web connector](https://learn.microsoft.com/en-us/power-query/connectors/web/web) ja [Configure scheduled refresh](https://learn.microsoft.com/en-us/power-bi/connect-data/refresh-scheduled-refresh).

## Aiheeseen liittyvät artikkelit

<CardGroup cols={2} className="doc-rows-condensed">
  <Card title="Tuo datasi BI-työkaluun" href="/docs/fi/guides/reports/pull-report-data">
    Päätepisteet, tiedostomuoto ja kutsurajat.
  </Card>

  <Card title="Yhdistä Excel" href="/docs/fi/guides/reports/connect-excel">
    Samat kyselyt Excelin Power Queryssä.
  </Card>

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

  <Card title="API-avaimet" href="/docs/fi/concepts/integrations/api-keys">
    Avainten luonti ja poistaminen.
  </Card>
</CardGroup>
