Gelöst Wöchentliche Auswertung aufs Handy als Workflow

Domando

Aktives Mitglied
16. Juli 2020
10
10
Hallo zusammen,

ich habe eine Auswertung erstellt, die wöchentlich auf mein Handy gesendet wird.
Vielleicht möchte jemand dies nutzen, deswegen stelle ich dies hier ein.

Zum Empfangen auf dem Handy nutze ich die App Pushover. Diese bietet die Möglichkeit Push-Nachrichten zu empfangen, die an eine generierte E-Mail Adresse gesendet werden. Man kann aber auch einfach eine E-Mail an sich versenden lassen, dann wird die App nicht benötigt.

Ich werte dabei folgende Werte aus:
Verkaufte Artikel (mit Vorwochenvergleich)
Summe Netto (mit Vorwochenvergleich)
Versendete Pakete (mit Vorwochenvergleich)
Stornoquote (mit Vorwochenvergleich)
Retourenquote (mit Vorwochenvergleich)
durchschnittliche Versandzeit anhand des ersten versendeten Paketes (mit Vorwochenvergleich)
Top Kindartikel
Top Vaterartikel
Top Serie
Top Farbe (anhand der Bezeichnung "Farbe" in Variationskombinationen)

Genutzt wird dafür ein Workflow unter "Auftrag" -> "erstellt" mit einem zeitverzögerten Ausführungsplan um 09.00 Uhr am Montag. Bedingungen habe ich keine definiert, da dieser jede Woche ausgeführt werden soll.
Die Aktion ist E-Mail senden mit der Empfängeradresse aus Pushover.
In den Betreff kommt:
Code:
{% assign kw = 'SELECT DATEPART(iso_week, DATEADD(week,-1,CURRENT_TIMESTAMP))' | DirectQueryScalar -%}
Statistik für KW {{ kw }}
In den Text kommt:
Code:
{% assign art_verkauf = 'SELECT CAST (SUM (nAnzahl) AS INT) FROM [eazybusiness].[dbo].[tbestellpos] bestellpos INNER JOIN tBestellung bestellung ON bestellpos.tBestellung_kBestellung = bestellung.kBestellung WHERE nStorno = 0 AND nType = 1 AND dErstellt BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE)' | DirectQueryScalar -%}
{% assign art_mehrverkauf_vorwoche = 'SELECT (SELECT CAST (SUM (nAnzahl) AS INT) FROM [eazybusiness].[dbo].[tbestellpos] bestellpos INNER JOIN tBestellung bestellung ON bestellpos.tBestellung_kBestellung = bestellung.kBestellung WHERE nStorno = 0 AND nType = 1 AND dErstellt BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE))-(SELECT CAST (SUM (nAnzahl) AS INT) FROM [eazybusiness].[dbo].[tbestellpos] bestellpos INNER JOIN tBestellung bestellung ON bestellpos.tBestellung_kBestellung = bestellung.kBestellung WHERE nStorno = 0 AND nType = 1 AND dErstellt BETWEEN CAST(DATEADD(WEEK, -2 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -2, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE))' | DirectQueryScalar -%}
{% assign pkt_versand = 'SELECT COUNT (kVersand) FROM [eazybusiness].[dbo].[tVersand] WHERE dVersendet BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE)' | DirectQueryScalar -%}
{% assign pkt_mehrversand_vorwoche = 'SELECT (SELECT COUNT (kVersand) FROM [eazybusiness].[dbo].[tVersand] WHERE dVersendet BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE))-(SELECT COUNT (kVersand) FROM [eazybusiness].[dbo].[tVersand] WHERE dVersendet BETWEEN CAST(DATEADD(WEEK, -2 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -2, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE))' | DirectQueryScalar -%}
{% assign netto_verkauf = 'SELECT CAST(SUM (nAnzahl*fVKNetto) AS DECIMAL(18,2)) FROM [eazybusiness].[dbo].[tbestellpos] bestellpos INNER JOIN tBestellung bestellung ON bestellpos.tBestellung_kBestellung = bestellung.kBestellung WHERE nStorno = 0 AND dErstellt BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE)' | DirectQueryScalar -%}
{% assign netto_mehrverkauf_vorwoche = 'SELECT (SELECT CAST(SUM (nAnzahl*fVKNetto) AS DECIMAL(18,2)) FROM [eazybusiness].[dbo].[tbestellpos] bestellpos INNER JOIN tBestellung bestellung ON bestellpos.tBestellung_kBestellung = bestellung.kBestellung WHERE nStorno = 0 AND dErstellt BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE))-(SELECT CAST(SUM (nAnzahl*fVKNetto) AS DECIMAL(18,2)) FROM [eazybusiness].[dbo].[tbestellpos] bestellpos INNER JOIN tBestellung bestellung ON bestellpos.tBestellung_kBestellung = bestellung.kBestellung WHERE nStorno = 0 AND dErstellt BETWEEN CAST(DATEADD(WEEK, -2 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -2, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE))' | DirectQueryScalar -%}
{% assign top_kind = 'SELECT TOP (1) artikelbescr.cName FROM [eazybusiness].[dbo].[tbestellpos] bestellpos INNER JOIN tBestellung bestellung ON bestellpos.tBestellung_kBestellung = bestellung.kBestellung INNER JOIN tArtikelBeschreibung artikelbescr ON bestellpos.tArtikel_kArtikel = artikelbescr.kArtikel WHERE artikelbescr.kSprache = 1 AND artikelbescr.kShop = 0 AND artikelbescr.kPlattform = 1 AND nStorno = 0 AND nType = 1 AND dErstellt BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE) GROUP BY artikelbescr.cName ORDER BY SUM (nAnzahl) DESC' | DirectQueryScalar -%}
{% assign top_kind_anzahl = 'SELECT TOP (1) CAST (SUM (nAnzahl) AS INT) AS Anzahl FROM [eazybusiness].[dbo].[tbestellpos] bestellpos INNER JOIN tBestellung bestellung ON bestellpos.tBestellung_kBestellung = bestellung.kBestellung INNER JOIN tArtikelBeschreibung artikelbescr ON bestellpos.tArtikel_kArtikel = artikelbescr.kArtikel WHERE artikelbescr.kSprache = 1 AND artikelbescr.kShop = 0 AND artikelbescr.kPlattform = 1 AND nStorno = 0 AND nType = 1 AND dErstellt BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE) GROUP BY artikelbescr.cName ORDER BY Anzahl DESC' | DirectQueryScalar -%}
{% assign top_vater = 'SELECT TOP (1) artikelbescr.cName FROM [eazybusiness].[dbo].[tbestellpos] bestellpos INNER JOIN tBestellung bestellung ON bestellpos.tBestellung_kBestellung = bestellung.kBestellung INNER JOIN tArtikel artikel ON artikel.kArtikel = bestellpos.tArtikel_kArtikel INNER JOIN tArtikelBeschreibung artikelbescr ON artikel.kVaterArtikel = artikelbescr.kArtikel WHERE artikelbescr.kSprache = 1 AND artikelbescr.kShop = 0 AND artikelbescr.kPlattform = 1 AND nStorno = 0 AND nType = 1 AND dErstellt BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE) GROUP BY artikelbescr.cName ORDER BY SUM (nAnzahl) DESC' | DirectQueryScalar -%}
{% assign top_vater_anzahl = 'SELECT TOP (1) CAST (SUM (nAnzahl) AS INT) AS Anzahl FROM [eazybusiness].[dbo].[tbestellpos] bestellpos INNER JOIN tBestellung bestellung ON bestellpos.tBestellung_kBestellung = bestellung.kBestellung INNER JOIN tArtikel artikel ON artikel.kArtikel = bestellpos.tArtikel_kArtikel INNER JOIN tArtikelBeschreibung artikelbescr ON artikel.kVaterArtikel = artikelbescr.kArtikel WHERE artikelbescr.kSprache = 1 AND artikelbescr.kShop = 0 AND artikelbescr.kPlattform = 1 AND nStorno = 0 AND nType = 1 AND dErstellt BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE) GROUP BY artikelbescr.cName ORDER BY Anzahl DESC' | DirectQueryScalar -%}
{% assign top_serie = 'SELECT TOP (1) cSerie FROM [eazybusiness].[dbo].[tbestellpos] bestellpos INNER JOIN tBestellung bestellung ON bestellpos.tBestellung_kBestellung = bestellung.kBestellung INNER JOIN tArtikel artikel ON artikel.kArtikel = bestellpos.tArtikel_kArtikel WHERE nStorno = 0 AND nType = 1 AND dErstellt BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE) GROUP BY cSerie ORDER BY SUM (nAnzahl) DESC' | DirectQueryScalar -%}
{% assign top_serie_anzahl = 'SELECT TOP (1) CAST (SUM (nAnzahl) AS INT) AS Anzahl FROM [eazybusiness].[dbo].[tbestellpos] bestellpos INNER JOIN tBestellung bestellung ON bestellpos.tBestellung_kBestellung = bestellung.kBestellung INNER JOIN tArtikel artikel ON artikel.kArtikel = bestellpos.tArtikel_kArtikel WHERE nStorno = 0 AND nType = 1 AND dErstellt BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE) GROUP BY cSerie ORDER BY Anzahl DESC' | DirectQueryScalar -%}
{% capture farbquery -%} SELECT TOP (1) eigenschaftwertsprache.cName FROM [eazybusiness].[dbo].[tbestellpos] bestellpos INNER JOIN tBestellung bestellung ON bestellpos.tBestellung_kBestellung = bestellung.kBestellung INNER JOIN tArtikel artikel ON artikel.kArtikel = bestellpos.tArtikel_kArtikel INNER JOIN tEigenschaftKombiWert eigenschaftkombiwert ON eigenschaftkombiwert.kEigenschaftKombi = artikel.kEigenschaftKombi INNER JOIN tEigenschaftSprache eigenschaftsprache ON eigenschaftsprache.kEigenschaft = eigenschaftkombiwert.kEigenschaft INNER JOIN tEigenschaftWertSprache eigenschaftwertsprache ON eigenschaftwertsprache.kEigenschaftWert = eigenschaftkombiwert.kEigenschaftWert WHERE nStorno = 0 AND nType = 1 AND dErstellt BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE) AND eigenschaftsprache.kSprache = 1 AND eigenschaftsprache.cName LIKE '%Farbe%' AND eigenschaftwertsprache.kSprache = 1 GROUP BY eigenschaftwertsprache.cName ORDER BY SUM (nAnzahl) DESC {% endcapture -%}
{% assign top_farbe = farbquery | DirectQueryScalar -%}
{% capture farbanzahlquery -%} SELECT TOP (1) CAST (SUM (nAnzahl) AS INT) AS Anzahl FROM [eazybusiness].[dbo].[tbestellpos] bestellpos INNER JOIN tBestellung bestellung ON bestellpos.tBestellung_kBestellung = bestellung.kBestellung INNER JOIN tArtikel artikel ON artikel.kArtikel = bestellpos.tArtikel_kArtikel INNER JOIN tEigenschaftKombiWert eigenschaftkombiwert ON eigenschaftkombiwert.kEigenschaftKombi = artikel.kEigenschaftKombi INNER JOIN tEigenschaftSprache eigenschaftsprache ON eigenschaftsprache.kEigenschaft = eigenschaftkombiwert.kEigenschaft INNER JOIN tEigenschaftWertSprache eigenschaftwertsprache ON eigenschaftwertsprache.kEigenschaftWert = eigenschaftkombiwert.kEigenschaftWert WHERE nStorno = 0 AND nType = 1 AND dErstellt BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE) AND eigenschaftsprache.kSprache = 1 AND eigenschaftsprache.cName LIKE '%Farbe%' AND eigenschaftwertsprache.kSprache = 1 GROUP BY eigenschaftwertsprache.cName ORDER BY Anzahl DESC {% endcapture -%}
{% assign top_farbe_anzahl = farbanzahlquery | DirectQueryScalar -%}
{% assign stornoquote = 'SELECT CAST(CAST((SELECT COUNT (nStorno) AS Storno FROM [eazybusiness].[dbo].[tBestellung] storno WHERE nStorno = 1 AND dErstellt BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE)) AS DECIMAL(18,2)) / CAST((SELECT COUNT (nStorno) AS NonStorno FROM [eazybusiness].[dbo].[tBestellung] nonstorno WHERE nStorno = 0 AND dErstellt BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE)) AS DECIMAL(18,2))*100 AS DECIMAL(18,2))' | DirectQueryScalar -%}
{% assign diff_stornoquote_vorwoche = 'SELECT (SELECT CAST(CAST((SELECT COUNT (nStorno) AS Storno FROM [eazybusiness].[dbo].[tBestellung] storno WHERE nStorno = 1 AND dErstellt BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE)) AS DECIMAL(18,2)) / CAST((SELECT COUNT (nStorno) AS NonStorno FROM [eazybusiness].[dbo].[tBestellung] nonstorno WHERE nStorno = 0 AND dErstellt BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE)) AS DECIMAL(18,2))*100 AS DECIMAL(18,2)))-(SELECT CAST(CAST((SELECT COUNT (nStorno) AS Storno FROM [eazybusiness].[dbo].[tBestellung] storno WHERE nStorno = 1 AND dErstellt BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE)) AS DECIMAL(18,2)) / CAST((SELECT COUNT (nStorno) AS NonStorno FROM [eazybusiness].[dbo].[tBestellung] nonstorno WHERE nStorno = 0 AND dErstellt BETWEEN CAST(DATEADD(WEEK, -2 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -2, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE)) AS DECIMAL(18,2))*100 AS DECIMAL(18,2)))' | DirectQueryScalar -%}
{% assign retourenquote = 'SELECT CAST(CAST((SELECT COUNT (kRMRetoure) FROM [eazybusiness].[dbo].[tRMRetoure] WHERE dErstellt BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE)) AS DECIMAL(18,2)) / CAST((SELECT COUNT (nStorno) AS NonStorno FROM [eazybusiness].[dbo].[tBestellung] nonstorno WHERE nStorno = 0 AND dErstellt BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE)) AS DECIMAL(18,2))*100 AS DECIMAL(18,2))' | DirectQueryScalar -%}
{% assign diff_retourenquote_vorwoche = 'SELECT (SELECT CAST(CAST((SELECT COUNT (kRMRetoure) FROM [eazybusiness].[dbo].[tRMRetoure] WHERE dErstellt BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE)) AS DECIMAL(18,2)) / CAST((SELECT COUNT (nStorno) AS NonStorno FROM [eazybusiness].[dbo].[tBestellung] nonstorno WHERE nStorno = 0 AND dErstellt BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE)) AS DECIMAL(18,2))*100 AS DECIMAL(18,2)))-(SELECT CAST(CAST((SELECT COUNT (kRMRetoure) FROM [eazybusiness].[dbo].[tRMRetoure] WHERE dErstellt BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE)) AS DECIMAL(18,2)) / CAST((SELECT COUNT (nStorno) AS NonStorno FROM [eazybusiness].[dbo].[tBestellung] nonstorno WHERE nStorno = 0 AND dErstellt BETWEEN CAST(DATEADD(WEEK, -2 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -2, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE)) AS DECIMAL(18,2))*100 AS DECIMAL(18,2)))' | DirectQueryScalar -%}
{% assign versandzeit = 'SELECT CAST (AVG(CAST(Versandzeit AS DECIMAL(18,2))) AS DECIMAL(18,2)) FROM (SELECT DateDiff("d",bestellung.dErstellt,MIN([dVersendet]))-DateDiff("ww",bestellung.dErstellt,MIN([dVersendet]))*2+CASE WHEN DateDiff("ww",bestellung.dErstellt,MIN([dVersendet]))=0 THEN 0 ELSE 1+ (CASE WHEN DATEPART(Weekday,bestellung.dErstellt)=1 THEN 1 ELSE 0 END)+(CASE WHEN DATEPART(Weekday,MIN([dVersendet]))=7 THEN 1 ELSE 0 END) END AS Versandzeit FROM [eazybusiness].[dbo].[tVersand] versand INNER JOIN tLieferschein lieferschein ON lieferschein.kLieferschein = versand.kLieferschein INNER JOIN tBestellung bestellung ON bestellung.kBestellung = lieferschein.kBestellung WHERE dVersendet BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE) GROUP BY versand.kLieferschein, bestellung.dErstellt) ver' | DirectQueryScalar -%}
{% assign diff_versandzeit_vorwoche = 'SELECT (SELECT CAST (AVG(CAST(Versandzeit AS DECIMAL(18,2))) AS DECIMAL(18,2)) FROM (SELECT DateDiff("d",bestellung.dErstellt,MIN([dVersendet]))-DateDiff("ww",bestellung.dErstellt,MIN([dVersendet]))*2+CASE WHEN DateDiff("ww",bestellung.dErstellt,MIN([dVersendet]))=0 THEN 0 ELSE 1+ (CASE WHEN DATEPART(Weekday,bestellung.dErstellt)=1 THEN 1 ELSE 0 END)+(CASE WHEN DATEPART(Weekday,MIN([dVersendet]))=7 THEN 1 ELSE 0 END) END AS Versandzeit FROM [eazybusiness].[dbo].[tVersand] versand INNER JOIN tLieferschein lieferschein ON lieferschein.kLieferschein = versand.kLieferschein INNER JOIN tBestellung bestellung ON bestellung.kBestellung = lieferschein.kBestellung WHERE dVersendet BETWEEN CAST(DATEADD(WEEK, -1 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -1, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE) GROUP BY versand.kLieferschein, bestellung.dErstellt) ver)-(SELECT CAST (AVG(CAST(Versandzeit AS DECIMAL(18,2))) AS DECIMAL(18,2)) FROM (SELECT DateDiff("d",bestellung.dErstellt,MIN([dVersendet]))-DateDiff("ww",bestellung.dErstellt,MIN([dVersendet]))*2+CASE WHEN DateDiff("ww",bestellung.dErstellt,MIN([dVersendet]))=0 THEN 0 ELSE 1+ (CASE WHEN DATEPART(Weekday,bestellung.dErstellt)=1 THEN 1 ELSE 0 END)+(CASE WHEN DATEPART(Weekday,MIN([dVersendet]))=7 THEN 1 ELSE 0 END) END AS Versandzeit FROM [eazybusiness].[dbo].[tVersand] versand INNER JOIN tLieferschein lieferschein ON lieferschein.kLieferschein = versand.kLieferschein INNER JOIN tBestellung bestellung ON bestellung.kBestellung = lieferschein.kBestellung WHERE dVersendet BETWEEN CAST(DATEADD(WEEK, -2 ,DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 1, CURRENT_TIMESTAMP)) AS DATE) AND CAST(DATEADD(WEEK, -2, DATEADD(DAY, -DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 8, CURRENT_TIMESTAMP)) AS DATE) GROUP BY versand.kLieferschein, bestellung.dErstellt) ver)' | DirectQueryScalar -%}
{% assign kw = 'SELECT DATEPART(iso_week, DATEADD(week,-1,CURRENT_TIMESTAMP))' | DirectQueryScalar -%}
Verkaufte Artikel: {{ art_verkauf }} ({% if art_mehrverkauf_vorwoche > 0 %}+{% endif %}{{ art_mehrverkauf_vorwoche }})
Summe Netto: {{ netto_verkauf }} € ({% if netto_mehrverkauf_vorwoche > 0 %}+{% endif %}{{ netto_mehrverkauf_vorwoche }} €)
Versendete Pakete: {{ pkt_versand }} ({% if pkt_mehrversand_vorwoche > 0 %}+{% endif %}{{ pkt_mehrversand_vorwoche }})

Stornoquote: {{ stornoquote }}% ({% if diff_stornoquote_vorwoche > 0 %}+{% endif %}{{ diff_stornoquote_vorwoche }}%)
Retourenquote: {{ retourenquote }}% ({% if diff_retourenquote_vorwoche > 0 %}+{% endif %}{{ diff_retourenquote_vorwoche }}%)
durchschnittliche Versandzeit: {{ versandzeit }} Tage ({% if diff_versandzeit_vorwoche > 0 %}+{% endif %}{{ diff_versandzeit_vorwoche }} Tage)

Top Kindartikel: {{ top_kind_anzahl }}x {{ top_kind }}
Top Vaterartikel: {{ top_vater_anzahl }}x {{ top_vater }}
Top Serie: {{ top_serie_anzahl }}x {{ top_serie }}
Top Farbe: {{top_farbe_anzahl }}x {{ top_farbe }}

Das Ergebnis sieht dann so aus:

Verkaufte Artikel: 1000 (+500)
Summe Netto: 100000 € (+50000 €)
Versendete Pakete: 1000 (+500)

Stornoquote: 15,00% (-5,00%)
Retourenquote: 15,00% (-10,00%)
durchschnittliche Versandzeit: 1,50 Tage (-2,00 Tage)

Top Kindartikel: 10x Socke in schwarz M
Top Vaterartikel: 50x Socke
Top Serie: 100x bunte Socken
Top Farbe: 200x Schwarz
 

hula1499

Sehr aktives Mitglied
22. Juni 2011
5.166
1.077
Super coole Sache!!!

Darf ich fragen, wie viele Bestellungen du pro Woche hast?

Ok, egal, einfach mal probiert.
Abfrage geht wirklich flott, auch bei einer hohen 5stelligen Anzahl (4-5 Sek., gefühlt).

Bei Variationskombi Artikel halt viell. nicht soooo optimal, aber könnte man ja anpassen.
 
Zuletzt bearbeitet:

Domando

Aktives Mitglied
16. Juli 2020
10
10
Da das ja im Hintergrund ausgeführt wird und auch nur einmal wöchentlich, sollte die Geschwindigkeit auch nicht so kritisch sein.
Allerdings sollte noch ausgewählt, dass nur das letzte Ereignis ausgeführt werden sollte (unter Ausführungsplan), ansonsten bekommt man viele Meldungen am Anfang der Woche.

Und natürlich, hier kann viel angepasst werden, für mich waren das interessante Kennziffern, da hat bestimmt jeder andere.
 

wawi-dl

Sehr aktives Mitglied
29. April 2008
5.950
570
Coole Sache, hab das Thema durch Zufall gefunden, weil ich einen wöchentlichen Trigger gesucht habe, bevor ich mir etwas aus der Nase ziehn muss.

Wir wollen wöchentlich eine Info per Email, welche Kategorien auf eBay geändert wurden und welche Angebote man aktualisieren muss.

SQL:
SELECT        ItemID AS 'Angebotsnummer',
            t1.SKU AS 'Artikelnummer'
FROM        ebay_item t1
WHERE        t1.PrimaryCategoryId NOT IN (SELECT        t2.CategoryId
                                         FROM        ebay_xx_categories t2
                                         GROUP BY    t2.CategoryId)
AND            ItemID != ''
AND            Status = '3'
ORDER BY    SKU;
 

AlexMT-Commerce

Sehr aktives Mitglied
11. August 2017
162
33
Hätte man nur darauf gehört, was hier geschrieben wird ...

Meeting -> zurück -> tausende Mails im Ordner :D
Auch mit dem Haken bei "nur letztes Ereignis ausführen" bekomme ich leider für jeden Auftrag eine Mail zugeschickt ... hat da mittlerweile jemand eine Idee wie man einfach nur 1 einzige Mail Sonntags Abends/ Montags morgens verschicken kann?
 

Domando

Aktives Mitglied
16. Juli 2020
10
10
Ich habe dies aktuell mit einem globalen Textbaustein gelöst. Unter Admin -> Globale Textbausteine einen neuen angelegt: "Auswertung_starten_woche". Wert auf "0" gesetzt.
Unter Workflows -> Aufträge den oben genannten Workflow eingefügt mit Ausführungsplan zeitverzögert 1 min nach auslösendem Ereignis und unter Bedingungen den Textbaustein "gleich" "1" ausgewählt. Als zusätzliche Aktion neben dem oben erwähntem den Wert wieder auf 0 setzen.
Dann einen weiteren Workflow anlegen, der zeitverzögert zum gewünschten Zeitpunkt (unter Ausführungsplan) den Textbaustein auf 1 setzt.
Jetzt wird mit dem ersten Auftrag nach gewünschtem Zeitpunkt die Auswertung versendet.
 

AlexMT-Commerce

Sehr aktives Mitglied
11. August 2017
162
33
Ich habe dies aktuell mit einem globalen Textbaustein gelöst. Unter Admin -> Globale Textbausteine einen neuen angelegt: "Auswertung_starten_woche". Wert auf "0" gesetzt.
Unter Workflows -> Aufträge den oben genannten Workflow eingefügt mit Ausführungsplan zeitverzögert 1 min nach auslösendem Ereignis und unter Bedingungen den Textbaustein "gleich" "1" ausgewählt. Als zusätzliche Aktion neben dem oben erwähntem den Wert wieder auf 0 setzen.
Dann einen weiteren Workflow anlegen, der zeitverzögert zum gewünschten Zeitpunkt (unter Ausführungsplan) den Textbaustein auf 1 setzt.
Jetzt wird mit dem ersten Auftrag nach gewünschtem Zeitpunkt die Auswertung versendet.
Perfekt! Dank dir, das funktioniert einwandfrei :)
 

wawi-dl

Sehr aktives Mitglied
29. April 2008
5.950
570
Nette Idee :thumbsup:

Die Warteschlange wird dadurch aber ganz schön aufgeblasen, wenn man 1x am Ende des Monats den Task ausführen wollte, oder?
Er fügt ja jedes Mal bei einem neuen Auftrag einen Job hinzu.


Wir packen es dann lieber unter " Lieferantenbestellung erstellt" rein, da ist die Frequenz nicht so hoch 😅
 

Domando

Aktives Mitglied
16. Juli 2020
10
10
Ja, in der Tat ist die Warteschlange recht voll. Im Grunde ist es egal, welche Triggerart ausgewählt wird. es ist ja nur ein Vehikel, einen zeitlichen Auslöser zu simulieren. Leider sind keine rein zeitlichen Auslöser vorgesehen. Dies würde das einfacher machen.
 

wawi-dl

Sehr aktives Mitglied
29. April 2008
5.950
570
Ja, daher packt man das zB lieber bei Einkäufe rein, statt bei Aufträge, wir hätten da schnell tausende Einträge drin.
Sollte nur ein Hinweis sein, sich lieber einen Trigger zu suchen, der möglichst nur 1x im Monat ausgelöst wird (je nachdem welche Häufigkeit man braucht).
 

Domando

Aktives Mitglied
16. Juli 2020
10
10
Du hast Recht. Aber man benötigt halt auch einen Trigger, der häufig genug ausgeführt wird, damit man das dann auch zum gewünschten Zeitpunkt erhält. Es wird ja der gewünschte Workflow erst mit dem ersten Trigger nach Erreichen des Zeitpunktes ausgelöst. Somit wäre in deinem Beispiel die Auswertung im schlechtestes Fall erst 1 Monat nach gewünschtem Zeitpunkt.
 

wawi-dl

Sehr aktives Mitglied
29. April 2008
5.950
570
Wir machen es sicher nicht in Aufträge, hatten uns dadurch mal was abgeschossen.
Kann man sich ja überlegen, ob Rekla, Artikel, Einkauf, ...
 

AlexMT-Commerce

Sehr aktives Mitglied
11. August 2017
162
33
Ich möchte es jeden Montag morgen triggern und hab jetzt mir ne Abfrage gebastelt die schaut ob es Sonntag ist d.h. es stauen sich "nur" die Aufträge von einem Sonntag. Das hält sich in Grenzen. Aber danke für den Hinweis! Ist halt wirklich schade, dass man nicht einfach einen zeitlichen Trigger setzen kann unabhängig von Aufträgen...
 

ple

Sehr aktives Mitglied
20. August 2019
453
59
Ohne es jetzt ausprobiert zu haben am Rechner, aber der zeitliche trigger fehlt mir auch ab und zu und ich frag mich gerade, kann ich nicht einfach einen dummy Artikel anlegen und davon irgendwas mit der Ameise importieren, sodass der Artikel geändert wurde und dadurch der trigger auslöst? Als Bedingung des Workflows kann man ja noch die sku mit reinnehmen.
Dann per Aufgabenplaner immer sonntags oder so ausführen.
Das gleiche würde ja auch bei Auftrag gehen oder mit sonst was. Liegt dran welche Werte man bräuchte.
Ich muss das nächste Woche mal ausprobieren, da so eine monatsstatistik doch mal interessant wäre.
Gruß
 

wawi-dl

Sehr aktives Mitglied
29. April 2008
5.950
570
Uns hat das Thema keine Ruhe gelassen.

Stand heute gibt es keine Möglichkeit und keinen Trigger, um mit den JTL Wawi Boardmitteln einen Bericht zu senden, der auch wirklich nur 1x sendet UND die Warteschlange / Queue nicht unendlich mit Jobs aufbläht.
JTL hat immer wieder Probleme mit zu großen Warteschlange / Queues, man sollte dies daher NICHT einsetzen, wenn man viele Aufträge täglich hat!!!

Wir haben nun eine Workflow-Verwaltung entwickelt, mit der man sich individuell zeitgesteuert einen Workflow ausführen lassen kann, egal welchen.
Man definiert einen Tag/Monat/Jahr und Uhrzeit, die Verwaltung prüft dies dann ab, sofern ein Job aussteht wird erst dann dieser in der Queue eingereiht.

Wir suchen daher 1-2 Tester, bevor wir das Live geben. :)
 

AlexMT-Commerce

Sehr aktives Mitglied
11. August 2017
162
33
Uns hat das Thema keine Ruhe gelassen.

Stand heute gibt es keine Möglichkeit und keinen Trigger, um mit den JTL Wawi Boardmitteln einen Bericht zu senden, der auch wirklich nur 1x sendet UND die Warteschlange / Queue nicht unendlich mit Jobs aufbläht.
JTL hat immer wieder Probleme mit zu großen Warteschlange / Queues, man sollte dies daher NICHT einsetzen, wenn man viele Aufträge täglich hat!!!

Wir haben nun eine Workflow-Verwaltung entwickelt, mit der man sich individuell zeitgesteuert einen Workflow ausführen lassen kann, egal welchen.
Man definiert einen Tag/Monat/Jahr und Uhrzeit, die Verwaltung prüft dies dann ab, sofern ein Job aussteht wird erst dann dieser in der Queue eingereiht.

Wir suchen daher 1-2 Tester, bevor wir das Live geben. :)
Hey, ich würde das super gerne testen. Kannst mir gerne ne PN schreiben. Bei uns reiht sich aktuell jeder Auftrag in eine Queue ein um 1x Montagsmorgens eine Auswertung auszugeben...
Gruß,
Alex
 
  • Gefällt mir
Reaktionen: wawi-dl

Domando

Aktives Mitglied
16. Juli 2020
10
10
Hi,
super, dass ihr euch da auch Gedanken gemacht habt.
Ich habe mittlerweile eine Lösung über die Aufgabenplanung und ein SQL Script gefunden.
Mithilfe des Scripts setze ich zeitgesteuert über die Aufgabenplanung den bereits oben erwähnten Wert auf 1. Damit wird die Queue nicht mehr aufgeblasen.
 
  • Gefällt mir
Reaktionen: wawi-dl

wawi-dl

Sehr aktives Mitglied
29. April 2008
5.950
570
Es gibt viele solche Lösungen, aber nichts was ein normaler "Anwender" umsetzen kann :)
Du musst dazu auch wieder ein Batch/SQL bauen, Zugangsdaten hart eintragen (IT-Security lässt grüßen) ... das sollte man nur im Fall des Falles machen.

Wir haben daher einen CustomWorkflow entwickelt, in dem kann ich dann alles aktivieren, Zeiten definieren, jeden belieben Workflow verknüpfen und ab gehts.
Wir machen die Doku fertig und geben es mal 1-2 Testern, die dürfen dann gerne selbst mal berichten :)
 

Ähnliche Themen