Beräkna faktiskt pris i SEK per artiklar efter rabatter

Sitter med en SQL query där jag tittar på inköpskostnad och listpris ( försäljnignspriset ) för varje produkt.

Har klurat ut hur jag lägger upp det hela för att kunna se skillnaderna per order som lagts.

Hur bör jag tänka för att istället slå samman datan så att jag ser totalen per Artikel?

ROUND((ordRow.OrderedQuantity * (o.CurrencyRate * a.SalesPrice)) - (o.CurrencyRate * ordRow.Discount)) AS ActualTG, --In Swedish Currency)

Hela koden ser ut enligt följande:

SELECT 
    o.DocumentNumber AS OrderNumber,
    REPLACE(ordRow.ArticleNumber, '000101', '22') AS Article,
    a.Description AS Description,
    a.SalesPrice AS SalesPrice,
    ordRow.OrderedQuantity AS OrderedQuantity,
    (ordRow.OrderedQuantity * ROUND((o.CurrencyRate * a.SalesPrice))) AS ProductSalesPrice, --In Swedish Currency
    ordRow.Discount,
    ROUND((ordRow.OrderedQuantity * (o.CurrencyRate * a.SalesPrice)) - (o.CurrencyRate * ordRow.Discount)) AS ActualTG,  --In Swedish Currency
    o.OrderDate
FROM `enhanza-elt.fortnox_api.orders` AS o,
UNNEST
    (o.OrderRows) AS ordRow
LEFT JOIN
  `enhanza-elt.fortnox_api.articles` AS a
ON
  ordRow.ArticleNumber = a.ArticleNumber
  WHERE
  ordRow.ArticleNumber IS NOT NULL 
  AND a.SalesPrice IS NOT NULL
  AND ordRow.ArticleNumber NOT IN ("A","B", "Q","P","932", "208", "197", "201", "196") -- Remove Freight and MISQ Articles
GROUP BY
    o.DocumentNumber,
    ordRow.ArticleNumber,
    a.Description,
    o.CurrencyRate,
    ordRow.OrderedQuantity,
    a.SalesPrice,
    ordRow.Discount,    
    o.OrderDate
ORDER BY 
    o.DocumentNumber

PS! Fritt fram att använda sig av SQL koden ( märk väl bara att ändra ArticleNumber borttagandet med era egna artikel nummer självklart )

1 Like

Hej @Boban !

Den är lite klurig eftersom man behöver ta hänsyn till följande:

  • Valuta
  • Rabatter i SEK
  • Rabatter i %

Men det är beskrivet i SQL-dokumentationen under Currency and discount. Där bör du hitta svaret.


En helt annan kommentar till din SQL-query.

Ersätt:

FROM
`enhanza-elt.fortnox_api.orders` AS o,
UNNEST(o.OrderRows) AS ordRow

med

FROM
`enhanza-elt.fortnox_api.orders` AS o
cross join UNNEST(OrderRows) as ordRow

och ta bort alla GROUP BY. Då blir koden mer ren och du kan låta rapportverktyget sköta grupperingen.

1 Like

Tackar för svaret, fick en hel del löst där genom modifieringen av SQL koden.

Hade en annan liten lösning som jag letade fram dessutom.

I Fortnox kan du antingen har ett aktivt lager eller Ej. I ett ej aktivt lager ( oavsett anledning ) så kan du ändå lägga till ett Kalkylpris som kostnad för produkten.

För att se till att Kostnaden visas i en tabell i BigQuery SQL så körde jag följande lösning:

IFNULL(a.PurchasePrice, a.DirectCost) AS PurchasePrice,

Där a är förkortnignen för

enhanza-elt.fortnox_api.articles AS a

Så om “PurchasePrice” är Null för att den helt enkelt inte finns tillgänglig så kommer “DirectCost” att tittas på.

Man kan använda sig av samma kod för andra lösnignar där man ersätter det som nu är “DirectCost”, med en expression av olika slag.

1 Like

Snyggt, @Boban ! :clap:

Tack för att du delar med dig av din kunskap och erfarenhet!

1 Like