Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Die Abfrage basiert auf der bei Kunden üblich eingesetzten Pivot-View. Es werden aber Fremdschlüssel ausgegeben.

Expand
titleContent

Table of Contents


Anforderungen

Die Anforderungen an statistische Daten sind für den Aussendienst sehr zentral. Im MVP des Aussendienstportals sind verschiedene Perspektiven auf statistische Daten vorgehesen. Diese werden nachfolgend beschrieben.

PerspektiveKontextBeschreibungDatenbasis
Performance-IndikatorKunden-DashboardMonatliche Umsatzentwicklung mit Vorjahresvergleich des ausgewählten KundenSQLView_vf_performanceindicator
TopsellersKunden-DashboardTop 5 Artikel gemäss UmsatzSQLView_vf_topsellers
SortimentBezügeDetailansicht

Alle bezogenen Artikel des ausgewählten Kunden verdichtet pro Artikel. Zeitraum wählbar nach 30, 90 oder , 180, 365 und 720 Tagen oder benutzerdefinierter Zeitraum

Drilldown-Funktion DrilldownFunktion auf einzelne Bewegung wünschenswert nicht möglich aus Performance-Gründen

SQLView_vf_statisticssales

Performance Indikator und Topseller sind auch denkbar für System-Dashboard

...

Mockup Performance Indikator

Drawio
7
bordertruediagramName1
zoom1
pageId12812368
custContentId19891352
lbox1
diagramDisplayNameMockup Statistik Dashboard
simpleViewercontentVer1false
revisionwidth7
linksauto
tbstyletop
lboxtrue
diagramWidth1183
revisionbaseUrlhttps://i-ag.atlassian.net/wiki
diagramNameMockup Statistik Dashboard
width1183
linksauto
tbstyletop

Field Mapping Performance-Indikator

...

View_fieldEntity.attributetypeDescriptionDEFRITEN
AddressIdBewegung.Bew_AdresseIDforeign keyID der Adresse



DeliveryMonthDelivery_month


Code Block
titlevf_performanceindicator.DeliveryMonth
collapsetrue
MONTH( Bewegung.Bew_Datum )



Monat vom LieferdatumDeliveryYearMonatMoisMeseMonth
Delivery_year


Code Block
titlevf_performanceindicator.DeliveryYear
collapsetrue
YEAR( Bewegung.Bew_Datum )



Jahr vom LieferdatumJahrAnnéeAnnoYear
Quantity


Code Block
titlevf_topsellers.quantity
collapsetrue
SUM (IF (Bewegung.Bew_Anrechenbar IN (0,3)) THEN (IsNull(Bewegung.Bew_Menge,0)) ELSE 0 ENDIF)



Summe der MengenMengeQuantitéQuantitàQuantity
Selling_amount


Code Block
titlevf_topsellers.selling_amount
collapsetrue
SUM (IF (Bewegung.Bew_Anrechenbar IN (0,2)) THEN (IsNull(Bewegung.Bew_NettoErloes,Bewegung.Bew_Menge * Bewegung.Bew_Preis)) ELSE 0 ENDIF)



Summe des NettoerlösesUmsatzChiffre d'affairesFatturatoTurnover

Filter


DBViewValue
whereBewegung.Bew_VorgangProcess-2
andBewegung.Bew_AdresseIDAddressIdis not null
andBewegung.Bew_GegenBewegungId-is null
andBewegung.Bew_Datum
>= CURRENT DATE - 730

Group by Klausel

AddressId
DeliveryMonth
DeliveryYear

Order by Klausel

Selling_amount

Topsellers

  • Auf dem System-Dashboard sieht der Aussendiest die 10 Topseller aller seiner Kunden.
  • Auf dem Kunden-Dashboard sieht der Aussendienst die 5 Topseller des entsprechenden Kunden sind

Mockup Topsellers

Field Mapping Topsellers

...

View_fieldEntity.attributetypeDescriptionDEFRITEN
ArticleIdBewegung.Bew_ArtikelIDforeign keyID des Artikels



AddressIdBewegung.Bew_AdresseIDforeign keyID der Adresse



Quantity


Code Block
titlevf_topsellers.quantity
collapsetrue
SUM (IF (Bewegung.Bew_Anrechenbar IN (0,3)) THEN (IsNull(Bewegung.Bew_Menge,0)) ELSE 0 ENDIF)



Summe der MengenMengeQuantitéQuantitàQuantity
Selling_amount


Code Block
titlevf_topsellers.selling_amount
collapsetrue
SUM (IF (Bewegung.Bew_Anrechenbar IN (0,2)) THEN (IsNull(Bewegung.Bew_NettoErloes,Bewegung.Bew_Menge * Bewegung.Bew_Preis)) ELSE 0 ENDIF)



Summe des NettoerlösesUmsatzChiffre d'affairesFatturatoTurnover

Filter


DBViewValue
whereBewegung.Bew_VorgangProcess-2
andBewegung.Bew_AdresseIDAddressIdis not null
andBewegung.Bew_GegenBewegungId-is null
andBewegung.Bew_Datum
>= CURRENT DATE - 365

...

Order by Klausel

Selling_amount

...

Bezüge

Mockup

...

Bezüge


Field Mapping

...

Bezüge

Berechnung Delivery_monthMONTHDelivery_yearBerechnung Delivery_yearYEARBilling_monthBerechnung Billing_monthBilling_yearBerechnung Billing_yearYEARAbgerechnetAm
View_fieldEntity.attributetypeDescriptionDEFRITEN
ArticleIdBewegung.Bew_ArtikelIDforeign keyID des Artikels



AddressIdBewegung.Bew_AdresseIDforeign keyID der Adresse
OrderIdBewegung.Bew_BelegIDforeign keyID des Belegs
OrderPositionIdBewegung.Bew_BelegIDforeign keyID der Artikleposition
WarehouseIdBewegung.Bew_LagerIDforeign keyID des Lagers
Unit_size_clAbfuellung.Abf_InhaltInClnumericFlaschengrösse in Zentiliter (cl), default 1
Statistic_relevanceBewegung.Bew_Anrechenbarinteger

0 = Umsatz und Menge

2 = Nur Umsatz

3 = Nur Menge (Gratiswaren)

Delivery_noBewegung.Bew_BelegNrintegerLieferschein-Nr
Delivery_dateBewegung.Bew_DatumdateLieferdatum gemäss Datum Lieferschein
Delivery_month



ArticleNameArtikel.Art_BezeichnungstringArtikel BezeichnungBezeichnungDescription
Description

Vintage

Artikel.Art_JahrgangintegerJahrgangJahrgangMillésime
Vintage
VolumeArtikel.Art_VolumenintegerVolumenVolumenDegré d'alcool
Volume
FillingAbfuellung.Abf_Kuerzelstring,20AbfüllungAbfüllungCondionnement
Filling
PackagingGrossgebinde.Gross_Kuerzelstring,20GrossgebindeGrossgebindeEmballage
Packaging
ArticleCategoryArtikelkategorie.ArtKat_Bezeichnungstring,40ArtikelkategorieArtikelkategorieCatégorie d'article
Article Category
ArticleTypeArtikelkategorie.ArtKat_TypBezeichnungstring,30ArtikeltypArtikeltypType d'article
Article Type
ManufacturerProduzent.Prod_Bezeichnungstring,50ProduzentProduzentProducteur
Producer
RegionRegion.Reg_Bezeichnungstring,40RegionRegionRégion
Region
CountryLand.Land_Bezeichnungstring,40LandLandPays
Country
ProductCycleZyklus.Zyk_Bezeichnungstring.,40ProduktzyklusProduktzyklusCycle du produit
Product cycle
AddressSurnameAdresse.Adr_Namestring,50NameNameNom
Surname
AddressNameAdresse.Adr_Vornamestring,25VornameVornamePrénom
Name
AddressAddAdresse.Adr_Zusatz1string,30Zusatz 1Zusatz 1Additiv au nom 1
Additional Name 1
AddressZIPAdresse.Adr_PLZstring,10PLZPLZNPA
ZIP
AddressPlaceAdresse.Adr_Ortstring,30OrtOrtLieu
Place
AddressCategoryKundenkategorie.KundKat_Bezeichnungstring,40KundenkategorieKundenkategorieCatégorie de clients
Customer category
PriceGroupKundengruppePreis.KundPreis_Bezeichnungstring,40PreisgruppePreisgruppeGroupe de prix
Price groupe
EnterpriseKonzern.Konz_Bezeichnungstring,40Kette / KonzernKette / KonzernChaîne / groupe
Chain / Enterprise
Quantity_unit_30


Code Block
languagesql
title
Quantity_unit_30
collapsetrue
SELECT SUM ( Bewegung.Bew_Menge ) 
  FROM VinX.Bewegung 
 WHERE Bewegung.Bew_Datum
integerMonat der Lieferung
 >= ( CURRENT DATE - 30 ) 
   AND Bewegung.Bew_ArtikelID = ArticleId 
   AND Bewegung.Bew_AdresseID = AddressId 
   AND Bewegung.Bew_Vorgang = (0-2) 
   AND Bewegung.Bew_Anrechenbar IN (0,3) 
   AND IsNull(Bewegung.Bew_GegenBewegungID,0) = 0


numericMenge Stück/Flasche letzte 30 TageMenge AbfüllungQuantité ConditionnementQuantità ImbottigliamentoQuantity Filling
Quantity_unit_90


Code Block
languagesql
title
Quantity_unit_90
collapsetrue
SELECT SUM ( Bewegung.Bew_Menge ) 
  FROM VinX.Bewegung 
 WHERE Bewegung.Bew_Datum
integerJahr der LieferungBilling_no
 >= ( CURRENT DATE - 90 ) 
   AND Bewegung.Bew_ArtikelID = ArticleId 
   AND Bewegung.Bew_AdresseID = AddressId 
   AND Bewegung.Bew_Vorgang = (0-2) 
   AND Bewegung.Bew_Anrechenbar IN (0,3) 
   AND IsNull(Bewegung.Bew_GegenBewegungID,0) = 0



Menge Stück/Flasche letzte 90 TageMenge AbfüllungQuantité ConditionnementQuantità ImbottigliamentoQuantity Filling
Quantity_unit_180


Code Block
languagesql
titleBerechnung Billing_noQuantity_unit_180
collapsetrue
IF NOTSELECT SUM ( Bewegung.Bew_Menge ) 
  FROM VinX.Bewegung 
 WHERE Bewegung.Bew_Datum >= ( CURRENT DATE - 180 ) 
   AND Bewegung.Bew_ArtikelID = ArticleId 
   AND Bewegung.Bew_AbgerechnetAm IS NULL THEN Beleg.Bel_BelegNr ENDIF
Rechnungs-Nr.
Billing_dateBewegung.Bew_AbgerechnetAmdateRechnungsdatum gemäss Datum der Rechnung
AdresseID = AddressId 
   AND Bewegung.Bew_Vorgang = (0-2) 
   AND Bewegung.Bew_Anrechenbar IN (0,3) 
   AND IsNull(Bewegung.Bew_GegenBewegungID,0) = 0



Menge Stück/Flasche letzte 180 TageMenge AbfüllungQuantité ConditionnementQuantità ImbottigliamentoQuantity Filling
Quantity_unit_365


Code Block
languagesql
title
Quantity_unit_365
collapsetrue
MONTH Bewegung.Bew_AbgerechnetAm
integerMonat der Rechnung
SELECT SUM ( Bewegung.Bew_Menge ) 
  FROM VinX.Bewegung 
 WHERE Bewegung.Bew_Datum >= ( CURRENT DATE - 365 ) 
   AND Bewegung.Bew_ArtikelID = ArticleId 
   AND Bewegung.Bew_AdresseID = AddressId 
   AND Bewegung.Bew_Vorgang = (0-2) 
   AND Bewegung.Bew_Anrechenbar IN (0,3) 
   AND IsNull(Bewegung.Bew_GegenBewegungID,0) = 0



Menge Stück/Flasche letzte 365 TageMenge AbfüllungQuantité ConditionnementQuantità ImbottigliamentoQuantity Filling
Quantity_unit_730


Code Block
languagesql
title
Quantity_unit_730
collapsetrue
SELECT SUM ( Bewegung.Bew_Menge ) 
  FROM VinX.Bewegung 
 WHERE Bewegung.Bew_Datum >= ( CURRENT DATE - 730 ) 
   AND Bewegung.Bew_ArtikelID = ArticleId 
   AND Bewegung.Bew_AdresseID = AddressId 
   AND Bewegung.Bew_
integerJahr der RechnungQuantity_unitBewegung.Bew_Mengenumeric
Vorgang = (0-2) 
   AND Bewegung.Bew_Anrechenbar IN (0,3) 
   AND IsNull(Bewegung.Bew_GegenBewegungID,0) = 0



Menge Stück/Flasche letzte 730 TageMenge AbfüllungQuantité ConditionnementQuantità ImbottigliamentoQuantity _packageBewegung.Bew_MengeGGnumericMenge GrossgebindeQuantity_litreFilling
Selling_amount_30


Code Block
languagesql
titleSelling_amount_30
collapsetrue
SELECT SUM ( Bewegung.Bew_Nettoerloes ) 
  FROM VinX.Bewegung 
 WHERE Bewegung.Bew_Datum >= ( CURRENT DATE - 30 ) 
   AND Bewegung.Bew_ArtikelID = ArticleId 
   AND Bewegung.Bew_AdresseID = AddressId 
   AND Bewegung.Bew_Vorgang = (0-2) 
   AND Bewegung.Bew_Anrechenbar IN (0,2) 
   AND IsNull(Bewegung.Bew_GegenBewegungID,0) = 0


numericGesamtbetrag Verkauf letzte 30 TageUmsatzChiffre d'affairesFatturatoTurnover
Selling_amount_90Quantity_free


Code Block
languagesql
titleBerechnung Quantity_litreSelling_amount_90
collapsetrue
Quantity_unit * ( Unit_size_cl / 100 )
numericMenge in Liter
SELECT SUM ( Bewegung.Bew_Nettoerloes ) 
  FROM VinX.Bewegung 
 WHERE Bewegung.Bew_Datum >= ( CURRENT DATE - 90 ) 
   AND Bewegung.Bew_ArtikelID = ArticleId 
   AND Bewegung.Bew_AdresseID = AddressId 
   AND Bewegung.Bew_Vorgang = (0-2) 
   AND Bewegung.Bew_Anrechenbar IN (0,2) 
   AND IsNull(Bewegung.Bew_GegenBewegungID,0) = 0


numericGesamtbetrag Verkauf letzte 90 TageUmsatzChiffre d'affairesFatturatoTurnover
Selling_amount_180Purchase_value


Code Block
languagesql
titleBerechnung Quantity_freeSelling_amount_180
collapsetrue
if Statistic_relevance = 3 then Quantity_unit
numericMenge Gratisware
ProcessBewegung.Bew_Vorganginteger

ist immer -2 = Warenausgang

Selling_priceBewegung.Bew_PreisnumericVerkaufspreis
Selling_amountBewegung.Bew_NettoerloesnumericGesamtbetrag Verkauf
Valuation_price_at_saleBewegung.Bew_EinstandspreisnumericBewertungspreis zum Zeitpunkt des Verkaufs
Valuation_price_currentArtikel.Art_LagerPreisnumericAktueller Bewertungspreis gemäss Artikel
Purchase_priceEKPreis.EK_EinstandspreisnumericAktueller Einstandspreis gemäss gültigem Einkaufspreis zum Artikel
SELECT SUM ( Bewegung.Bew_Nettoerloes ) 
  FROM VinX.Bewegung 
 WHERE Bewegung.Bew_Datum >= ( CURRENT DATE - 180 ) 
   AND Bewegung.Bew_ArtikelID = ArticleId 
   AND Bewegung.Bew_AdresseID = AddressId 
   AND Bewegung.Bew_Vorgang = (0-2) 
   AND Bewegung.Bew_Anrechenbar IN (0,2) 
   AND IsNull(Bewegung.Bew_GegenBewegungID,0) = 0


numericGesamtbetrag Verkauf letzte 180 TageUmsatzChiffre d'affairesFatturatoTurnover
Selling_amount_365


Code Block
languagesql
titleSelling_amount_365
collapsetrue
SELECT SUM ( Bewegung.Bew_Nettoerloes ) 
  FROM VinX.Bewegung 
 WHERE Bewegung.Bew_Datum >= ( CURRENT DATE - 365 ) 
   AND Bewegung.Bew_ArtikelID = ArticleId 
   AND Bewegung.Bew_AdresseID = AddressId 
   AND Bewegung.Bew_Vorgang = (0-2) 
   AND Bewegung.Bew_Anrechenbar IN (0,2) 
   AND IsNull(Bewegung.Bew_GegenBewegungID,0) = 0


numericGesamtbetrag Verkauf letzte 365 TageUmsatzChiffre d'affairesFatturatoTurnover
Selling_amount_730


Code Block
languagesql
titleSelling_amount_730
collapsetrue
SELECT SUM ( Bewegung.Bew_Nettoerloes ) 
  FROM VinX.Bewegung 
 WHERE Bewegung.Bew_Datum >= ( CURRENT DATE - 730 ) 
   AND Bewegung.Bew_ArtikelID = ArticleId 
   AND Bewegung.Bew_AdresseID = AddressId 
   AND Bewegung.Bew_Vorgang = (0-2) 
   AND Bewegung.Bew_Anrechenbar IN (0,2) 
   AND IsNull(Bewegung.Bew_GegenBewegungID,0) = 0


numericGesamtbetrag Verkauf letzte 730 TageUmsatzChiffre d'affairesFatturatoTurnover
Purchase_value_30


Code Block
languagesql
titlePurchase_value_30
collapsetrue
SELECT SUM ( Bewegung.Bew_Menge * Bewegung.Bew_Einstandspreis ) 
  FROM VinX.Bewegung 
 WHERE Bewegung.Bew_Datum >= ( CURRENT DATE - 30 ) 
   AND Bewegung.Bew_ArtikelID = ArticleId 
   AND Bewegung.Bew_AdresseID = AddressId 
   AND Bewegung.Bew_Vorgang = (0-2) 
   AND Bewegung.Bew_Anrechenbar IN (0,2,3) 
   AND IsNull(Bewegung.Bew_GegenBewegungID,0) = 0


numeric

Einkaufswert letzte 30 Tage


EinkaufswertValeur d'achatValore di acquistoPurchase value
Purchase_value_90


Code Block
languagesql
titlePurchase_value_90
collapsetrue
SELECT SUM ( Bewegung.Bew_Menge * Bewegung.Bew_Einstandspreis ) 
  FROM VinX.Bewegung 
 WHERE Bewegung.Bew_Datum >= ( CURRENT DATE - 90 ) 
   AND Bewegung.Bew_ArtikelID = ArticleId 
   AND Bewegung.Bew_AdresseID = AddressId 
   AND Bewegung.Bew_Vorgang = (0-2) 
   AND Bewegung.Bew_Anrechenbar IN (0,2,3) 
   AND IsNull(Bewegung.Bew_GegenBewegungID,0) = 0


numeric

Einkaufswert letzte 90 Tage


EinkaufswertValeur d'achatValore di acquistoPurchase value
Purchase_value_180


Code Block
languagesql
titleBerechnung Purchase_value_180
collapsetrue
Quantity_unit * ( IsNull
   SELECT SUM ( Bewegung.Bew_Menge * Bewegung.Bew_Einstandspreis ) 
  FROM VinX.Bewegung 
 WHERE Bewegung.Bew_Datum >= ( CURRENT DATE - 180 ) 
   AND Bewegung.Bew_ArtikelID = ArticleId 
   AND Bewegung.Bew_AdresseID (= IsNullAddressId 
   AND Bewegung.Bew_Vorgang = (0-2) 
   AND Bewegung.Bew_Anrechenbar IN (0,2,3) 
   (AND IsNull( Valuation_price_at_sale, Purchase_priceBewegung.Bew_GegenBewegungID,0) = 0


numeric

Einkaufswert letzte 180 Tage


EinkaufswertValeur d'achatValore di acquistoPurchase value
Purchase_value_365


Code Block
languagesql
titlePurchase_value_365
collapsetrue
SELECT SUM ( Bewegung.Bew_Menge * Bewegung.Bew_Einstandspreis ) 
  FROM VinX.Bewegung 
 WHERE Bewegung.Bew_Datum >= ( CURRENT DATE - 365 ) 
   AND Bewegung.Bew_ArtikelID = ArticleId 
   AND Bewegung.Bew_AdresseID = AddressId 
   AND Bewegung.Bew_Vorgang = (0-2) 
   AND Bewegung.Bew_Anrechenbar IN (0, Valuation_price_current
  2,3) 
   AND IsNull(Bewegung.Bew_GegenBewegungID,0) = 0


numeric

Einkaufswert letzte 365 Tage


EinkaufswertValeur d'achatValore di acquistoPurchase value
Purchase_value_730


Code Block
languagesql
titlePurchase_value_720
collapsetrue
SELECT SUM ( Bewegung.Bew_Menge * Bewegung.Bew_Einstandspreis ) 
  FROM VinX.Bewegung 
 WHERE Bewegung.Bew_Datum >= ( CURRENT DATE - 730 ), 0
  
   AND Bewegung.Bew_ArtikelID = ArticleId 
   AND Bewegung.Bew_AdresseID = AddressId 
   AND Bewegung.Bew_Vorgang = (0-2) 
   AND Bewegung.Bew_Anrechenbar IN (0,2,3) 
   AND IsNull(Bewegung.Bew_GegenBewegungID,0) = 0


numeric

Einkaufswert zu

  • Valuation_price_at_sale
  • default Purchase_price
  • default Valuation_price_current
  • default 0

    letzte 730 Tage


    EinkaufswertValeur d'achatValore di acquistoPurchase value

    Profit_margin_30

    Profit_margin_90

    Profit_margin_180

    Profit_margin_365

    Profit_margin_730


    Code Block
    languagesql
    titleBerechnung vf_statistics.Profit_margin
    collapsetrue
    Profit_margin_30  = Selling_amount_30  - Purchase_value_30, 
    Profit_margin_90  = Selling_amount_90  - Purchase_value_90, 
    Profit_margin_180 = Selling_amount_180 - Purchase_value_180,
    Profit_margin_365 = Selling_amount_365 - Purchase_value_365,
    Profit_margin_730 = Selling_amount_730 - Purchase_value_730,


    numeric

    Deckungsbeitrag / Marge des Verkaufs in CHF

    letzte 30 Tage

    letzte 90 Tage

    letzte 180 Tage

    letzte 365 Tage

    letzte 730 Tage


    DB in CHFMarge en CHFMargine in CHFMargin in CHF

    Profit_margin_percentage_30

    Profit_margin_percentage_90

    Profit_margin_percentage_180

    Profit_margin_percentage_365

    Profit_margin_percentage_730




    Code Block
    languagesql
    titleBerechnung vf_statistics.Profit_margin_percentage
    collapsetrue
    (ifProfit_margin_percentage_30=(IF (Selling_amount_30 <> 0) THEN (Profit_margin_30 / Selling_amount_30 ) ELSE 0 ENDIF),
    Profit_margin_percentage_90=(IF (Selling_amount_90 <> 0) THEN (Profit_margin_90 / Selling_amount_90 ) ELSE 0 ENDIF),
    Profit_margin_percentage_180=(IF (Selling_amount_180 <> 0) THEN (Profit_margin_180 / Selling_amount_180 ) ELSE 0 ENDIF),
    Profit_margin_percentage_365=(IF (Selling_amount_365 <> 0) thenTHEN (Profit_margin_365 / Selling_amount_365 ) ELSE 0 ENDIF),
    Profit_margin_percentage_730=(IF (Selling_amount_730 ) else<> 0) THEN (Profit_margin_730 / Selling_amount_730 ) ELSE 0 endifENDIF)


    numeric

    Deckungsbeitrag / Marge des Verkaufs in Prozent %

    letzte 30 Tage

    letzte 90 Tage

    letzte 180 Tage

    letzte 365 Tage

    letzte 730 Tage

    DB in %Marge en %Margin in %Margin in %

    Filter


    DBViewValue
    whereBewegung.Bew_VorgangProcess-2
    andBewegung.Bew_AdresseIDAddressIdis not null
    andBewegung.Bew_GegenBewegungId-is null
    andBewegung.Bew_Datum
    CURRENT DATE - 730

    Group by

    ArticleId
    AddressId

    Order by

    AddressId ASC
    ArticleId ASC

    Anhang

    Modellerweiterung ViewVinX_mfstatitics mit Definition für View vf_statistics

    ...