pixiGetCRMCustomers
Liefert CRM-Kennzahlen je Kunde (Bestellabstände, Auftragsanzahlen, Nettoumsätze und Retourenbeträge je Zeitraum), berechnet aus Rechnungen und Aufträgen.
Berechnet je Kunde eine Zeile mit Kundenlebenszyklus-Kennzahlen auf Basis von Rechnungen und Aufträgen.
Rechnungen
- Als Basis werden nur Rechnungen mit
Total > 0verwendet. Gefiltert wird nachInvDatezwischenCalculationStartundCalculationEnd(jede Grenze nur, wenn gesetzt), nach dem RechnungsshopInvShopID=CustomerOf(falls nicht leer) und nachCustRef(falls nicht 0/NULL). - Beträge sind Nettobeträge (
Total_Netbzw.Total_Net - Total_ShipCost_Netfür die Werte ohne Versandkosten). - Retourenbeträge je Rechnung ergeben sich als 0 minus Summe der Nettobeträge aller Rechnungen, die über
RefToInvoiceKeyauf diese Rechnung verweisen (Gutschriften). Diese verweisenden Rechnungen werden nicht nach Datum oder Shop gefiltert. - Ist die Einstellung
MultiCurrencyEnabledgleich1, werden alle Beträge durch den Wechselkurs der Rechnung (ExchRateId) geteilt undBaseCurrencyenthält den Code der Basiswährung dieses Wechselkurses. Andernfalls werden die Beträge in der ursprünglichen Rechnungswährung geliefert undBaseCurrencyist NULL.
Aufträge
- Aufträge werden nach
UpdateDatezwischenCalculationStartundCalculationEnd, nachCustomerOfdes Kunden und nachCustRefgefiltert. Sie werden je Auftragsnummer gruppiert; als Auftragsdatum gilt das spätesteCreateDatedes Auftrags. - Daraus werden je Kunde das Datum des ersten, zweiten (nächsthöhere Auftragsnummer) und letzten Auftrags ermittelt.
Ergebnis
- Je Kunde: Tage seit dem ersten/letzten Auftrag sowie zwischen erstem/zweitem und erstem/letztem Auftrag (bezogen auf das aktuelle Datum), Auftragsanzahlen der letzten 90/365/730 Tage und gesamt, Beträge der ersten, zweiten und letzten Rechnung (Spalten
FirstOrder…,SecondOrder…,LastOrder…), Beträge im ersten und zweiten Jahr nach der ersten Rechnung, in den 365 Tagen vor der letzten Rechnung, in den beiden 365-Tage-Fenstern vorCalculationEnd(bzw. jetzt) sowie Gesamtsummen. - Es werden nur Kunden mit mindestens einer passenden Rechnung geliefert.
- Paging: höchstens
RowsZeilen mitCustKey > Offset, sortiert nachCustKeyaufsteigend.Offsetist ein Kundenschlüssel, keine Zeilenanzahl: für die nächste Seite den letztenCustKeyder vorherigen Seite übergeben.
Hinweise
- Nur lesend; alle permanenten Tabellen außer
CustomerswerdenWITH (NOLOCK)gelesen, daher können nicht festgeschriebene Daten enthalten sein. - Die Spalten
FirstOrderTotal,SecondOrderTotal,LastOrderTotalusw. stammen aus der ersten, zweiten und letzten Rechnung (nachInvoiceKey), nicht aus Aufträgen. - Tagesstatistiken und die Auftragsanzahlen für 90/365/730 Tage beziehen sich immer auf
GETDATE(), die…FromNow…-Beträge dagegen aufCalculationEnd(bzw. das aktuelle Datum, falls nicht gesetzt). - Zeitfenstergrenzen sind teilweise exklusiv:
SecondYear…berücksichtigt z. B. nur Daten strikt nach erster Rechnung + 365 Tage und strikt vor + 730 Tage; Rechnungen genau auf der Grenze zählen in keinem der beiden Jahre. - Der Shopfilter verwendet für Beträge
InvShopIDder Rechnung, für Aufträge aberCustomerOfdes Kunden; Datumsfilter nutzen bei RechnungenInvDate, bei AufträgenUpdateDate. - Bei aktivierter Mehrwährungsfähigkeit werden Rechnungen ohne passenden Wechselkurs übersprungen. Ein Kunde mit Rechnungen in verschiedenen Basiswährungen erscheint je Basiswährung einmal; die Zeitraumsummen (
FirstYear…,LastYear…usw.) werden dabei nicht nach Währung getrennt. DaysSince…-Spalten sind NULL, wenn kein Auftrag des Kunden den Filtern entspricht.- Die Berechnung erfolgt über mehrere temporäre Tabellen und korrelierte Unterabfragen; eine Einschränkung des Datumsbereichs oder von
CustRefverbessert die Laufzeit bei großen Datenbanken.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
CustomerOf
|
varchar(3) string |
NULL |
Shop-ID. Filtert Rechnungen nach Beispiel: |
CalculationStart
|
datetime dateTime |
NULL |
Untergrenze für Rechnungsdatum ( Beispiel: |
CalculationEnd
|
datetime dateTime |
NULL |
Obergrenze für Rechnungsdatum und Änderungsdatum des Auftrags. Zugleich Bezugsdatum der Beispiel: |
CustRef
|
int | NULL |
Kundenschlüssel, um die Berechnung auf einen Kunden zu beschränken. NULL oder 0 = alle Kunden. Beispiel: |
Rows
|
int | 1000 |
Maximale Anzahl gelieferter Zeilen (Seitengröße). Beispiel: |
Offset
|
int | 0 |
Es werden nur Kunden mit Beispiel: |
Antwort
Result-Set 1 · Immer (kann leer sein, wenn keine Rechnungen passen)
Eine Zeile je Kunde (und Basiswährung) mit CRM-Kennzahlen, sortiert nach CustKey aufsteigend.
| Spalte | Typ | Beschreibung |
|---|---|---|
CustKey
|
int |
Kundenschlüssel. |
DaysSinceFirstOrder
Kann leer sein |
int |
Tage zwischen dem ersten Auftrag und heute. |
DaysSinceLastOrder
Kann leer sein |
int |
Tage zwischen dem letzten Auftrag und heute. |
DaysBetweenFirstAndSecondOrder
|
int |
Tage zwischen erstem und zweitem Auftrag; 0, wenn es keinen zweiten Auftrag gibt. |
DaysBetweenFirstAndLastOrder
|
int |
Tage zwischen erstem und letztem Auftrag; 0, wenn nicht verfügbar. |
Orders90days
|
int |
Anzahl der in den letzten 90 Tagen angelegten Aufträge. |
Orders365days
|
int |
Anzahl der in den letzten 365 Tagen angelegten Aufträge. |
Orders730days
|
int |
Anzahl der in den letzten 730 Tagen angelegten Aufträge. |
OrdersTotal
|
int |
Gesamtanzahl der passenden Aufträge. |
FirstOrderTotal
Kann leer sein |
decimal(19,9) decimal |
Nettobetrag der ersten Rechnung. |
FirstOrderTotalWithoutShipcosts
Kann leer sein |
numeric(17,4) decimal |
Nettobetrag der ersten Rechnung ohne Versandkosten. |
FirstOrderReturnTotal
Kann leer sein |
decimal(19,9) decimal |
Retourenbetrag (Gutschriften zur ersten Rechnung). |
FirstOrderReturnTotalWithoutShipcosts
Kann leer sein |
numeric(17,4) decimal |
Retourenbetrag der ersten Rechnung ohne Versandkosten. |
SecondOrderTotal
Kann leer sein |
decimal(19,9) decimal |
Nettobetrag der zweiten Rechnung. |
SecondOrderTotalWithoutShipcosts
Kann leer sein |
numeric(17,4) decimal |
Nettobetrag der zweiten Rechnung ohne Versandkosten. |
SecondOrderReturnTotal
Kann leer sein |
decimal(19,9) decimal |
Retourenbetrag der zweiten Rechnung. |
SecondOrderReturnTotalWithoutShipcosts
Kann leer sein |
numeric(17,4) decimal |
Retourenbetrag der zweiten Rechnung ohne Versandkosten. |
LastOrderTotal
Kann leer sein |
decimal(19,9) decimal |
Nettobetrag der letzten Rechnung. |
LastOrderTotalWithoutShipcosts
Kann leer sein |
numeric(17,4) decimal |
Nettobetrag der letzten Rechnung ohne Versandkosten. |
LastOrderReturnTotal
Kann leer sein |
decimal(19,9) decimal |
Retourenbetrag der letzten Rechnung. |
LastOrderReturnTotalWithoutShipcosts
Kann leer sein |
numeric(17,4) decimal |
Retourenbetrag der letzten Rechnung ohne Versandkosten. |
FirstYearTotal
Kann leer sein |
decimal(38,9) decimal |
Nettorechnungsbetrag innerhalb von 365 Tagen nach der ersten Rechnung. |
FirstYearTotalWithoutShipcosts
Kann leer sein |
numeric(17,4) decimal |
Wie |
FirstYearReturnTotal
Kann leer sein |
decimal(38,9) decimal |
Retourenbetrag zu Rechnungen des ersten Jahres. |
FirstYearReturnTotalWithoutShipcosts
Kann leer sein |
numeric(17,4) decimal |
Wie |
SecondYearTotal
Kann leer sein |
decimal(38,9) decimal |
Nettorechnungsbetrag zwischen 365 und 730 Tagen nach der ersten Rechnung (Grenzen exklusiv). |
SecondYearTotalWithoutShipcosts
Kann leer sein |
numeric(17,4) decimal |
Wie |
SecondYearReturnTotal
Kann leer sein |
decimal(38,9) decimal |
Retourenbetrag zu Rechnungen des zweiten Jahres. |
SecondYearReturnTotalWithoutShipcosts
Kann leer sein |
numeric(17,4) decimal |
Wie |
LastYearTotal
Kann leer sein |
decimal(38,9) decimal |
Nettorechnungsbetrag innerhalb von 365 Tagen vor (einschließlich) der letzten Rechnung. |
LastYearTotalWithoutShipcosts
Kann leer sein |
numeric(17,4) decimal |
Wie |
LastYearReturnTotal
Kann leer sein |
decimal(38,9) decimal |
Retourenbetrag zu Rechnungen dieses Zeitraums. |
LastYearReturnTotalWithoutShipcosts
Kann leer sein |
numeric(17,4) decimal |
Wie |
NextToLastYearFromNowTotal
Kann leer sein |
decimal(38,9) decimal |
Nettorechnungsbetrag zwischen 730 und 365 Tagen vor |
NextToLastYearFromNowTotalWithoutShipcosts
Kann leer sein |
numeric(17,4) decimal |
Wie |
NextToLastYearFromNowReturnTotal
Kann leer sein |
decimal(38,9) decimal |
Retourenbetrag zu Rechnungen dieses Zeitraums. |
NextToLastYearFromNowReturnTotalWithoutShipcosts
Kann leer sein |
numeric(17,4) decimal |
Wie |
LastYearFromNowTotal
Kann leer sein |
decimal(38,9) decimal |
Nettorechnungsbetrag innerhalb der 365 Tage vor |
LastYearFromNowTotalWithoutShipcosts
Kann leer sein |
numeric(17,4) decimal |
Wie |
LastYearFromNowReturnTotal
Kann leer sein |
decimal(38,9) decimal |
Retourenbetrag zu Rechnungen dieses Zeitraums. |
LastYearFromNowReturnTotalWithoutShipcosts
Kann leer sein |
numeric(17,4) decimal |
Wie |
OverallTotal
Kann leer sein |
decimal(38,9) decimal |
Nettobetrag aller passenden Rechnungen. |
OverallTotalWithoutShipcosts
Kann leer sein |
numeric(17,4) decimal |
Wie |
OverallReturnTotal
Kann leer sein |
decimal(38,9) decimal |
Retourenbetrag zu allen passenden Rechnungen. |
OverallReturnTotalWithoutShipcosts
Kann leer sein |
numeric(17,4) decimal |
Wie |
BaseCurrency
Kann leer sein |
varchar(3) string |
Basiswährungscode der Beträge, wenn |
Beispielantwort
<SqlRowSet1>
<row>
<CustKey>10234</CustKey>
<DaysSinceFirstOrder>812</DaysSinceFirstOrder>
<DaysSinceLastOrder>45</DaysSinceLastOrder>
<DaysBetweenFirstAndSecondOrder>63</DaysBetweenFirstAndSecondOrder>
<DaysBetweenFirstAndLastOrder>767</DaysBetweenFirstAndLastOrder>
<Orders90days>1</Orders90days>
<Orders365days>3</Orders365days>
<Orders730days>5</Orders730days>
<OrdersTotal>6</OrdersTotal>
<FirstOrderTotal>84.033613445</FirstOrderTotal>
<FirstOrderTotalWithoutShipcosts>79.8319</FirstOrderTotalWithoutShipcosts>
<FirstOrderReturnTotal>0.000000000</FirstOrderReturnTotal>
<FirstOrderReturnTotalWithoutShipcosts>0.0000</FirstOrderReturnTotalWithoutShipcosts>
<SecondOrderTotal>42.008403361</SecondOrderTotal>
<SecondOrderTotalWithoutShipcosts>37.8067</SecondOrderTotalWithoutShipcosts>
<SecondOrderReturnTotal>42.008403361</SecondOrderReturnTotal>
<SecondOrderReturnTotalWithoutShipcosts>37.8067</SecondOrderReturnTotalWithoutShipcosts>
<LastOrderTotal>125.210084034</LastOrderTotal>
<LastOrderTotalWithoutShipcosts>121.0084</LastOrderTotalWithoutShipcosts>
<LastOrderReturnTotal>0.000000000</LastOrderReturnTotal>
<LastOrderReturnTotalWithoutShipcosts>0.0000</LastOrderReturnTotalWithoutShipcosts>
<FirstYearTotal>210.084033613</FirstYearTotal>
<FirstYearTotalWithoutShipcosts>197.4790</FirstYearTotalWithoutShipcosts>
<FirstYearReturnTotal>42.008403361</FirstYearReturnTotal>
<FirstYearReturnTotalWithoutShipcosts>37.8067</FirstYearReturnTotalWithoutShipcosts>
<SecondYearTotal>125.210084034</SecondYearTotal>
<SecondYearTotalWithoutShipcosts>121.0084</SecondYearTotalWithoutShipcosts>
<SecondYearReturnTotal>0.000000000</SecondYearReturnTotal>
<SecondYearReturnTotalWithoutShipcosts>0.0000</SecondYearReturnTotalWithoutShipcosts>
<LastYearTotal>250.420168068</LastYearTotal>
<LastYearTotalWithoutShipcosts>242.0168</LastYearTotalWithoutShipcosts>
<LastYearReturnTotal>0.000000000</LastYearReturnTotal>
<LastYearReturnTotalWithoutShipcosts>0.0000</LastYearReturnTotalWithoutShipcosts>
<NextToLastYearFromNowTotal>85.210084034</NextToLastYearFromNowTotal>
<NextToLastYearFromNowTotalWithoutShipcosts>81.0084</NextToLastYearFromNowTotalWithoutShipcosts>
<NextToLastYearFromNowReturnTotal>0.000000000</NextToLastYearFromNowReturnTotal>
<NextToLastYearFromNowReturnTotalWithoutShipcosts>0.0000</NextToLastYearFromNowReturnTotalWithoutShipcosts>
<LastYearFromNowTotal>250.420168068</LastYearFromNowTotal>
<LastYearFromNowTotalWithoutShipcosts>242.0168</LastYearFromNowTotalWithoutShipcosts>
<LastYearFromNowReturnTotal>0.000000000</LastYearFromNowReturnTotal>
<LastYearFromNowReturnTotalWithoutShipcosts>0.0000</LastYearFromNowReturnTotalWithoutShipcosts>
<OverallTotal>545.714285715</OverallTotal>
<OverallTotalWithoutShipcosts>520.5042</OverallTotalWithoutShipcosts>
<OverallReturnTotal>42.008403361</OverallReturnTotal>
<OverallReturnTotalWithoutShipcosts>37.8067</OverallReturnTotalWithoutShipcosts>
<BaseCurrency>EUR</BaseCurrency>
</row>
</SqlRowSet1>
Beispiele
POST https://apigateway.descartes.com/tms/pixi/
Content-Type: text/xml; charset=utf-8
Authorization: Basic BASE64(USERNAME:PASSWORD)
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://apigateway.descartes.com/tms/pixi/">
<SOAP-ENV:Body>
<ns1:pixiGetCRMCustomers>
<!-- <CustomerOf>SHP</CustomerOf> -->
<!-- <CalculationStart>2022-01-01T00:00:00</CalculationStart> -->
<!-- <CalculationEnd>2024-12-31T23:59:59</CalculationEnd> -->
<!-- <CustRef>10234</CustRef> -->
<!-- <Rows>500</Rows> -->
<!-- <Offset>0</Offset> -->
</ns1:pixiGetCRMCustomers>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
curl -X POST 'https://apigateway.descartes.com/tms/pixi/' \
--user 'USERNAME:PASSWORD' \
--header 'Content-Type: text/xml; charset=utf-8' \
--data-binary @- <<'XML'
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://apigateway.descartes.com/tms/pixi/">
<SOAP-ENV:Body>
<ns1:pixiGetCRMCustomers>
<!-- <CustomerOf>SHP</CustomerOf> -->
<!-- <CalculationStart>2022-01-01T00:00:00</CalculationStart> -->
<!-- <CalculationEnd>2024-12-31T23:59:59</CalculationEnd> -->
<!-- <CustRef>10234</CustRef> -->
<!-- <Rows>500</Rows> -->
<!-- <Offset>0</Offset> -->
</ns1:pixiGetCRMCustomers>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
XML
<?php
$soapClient = new SoapClient(null, [
'login' => 'USERNAME',
'password' => 'PASSWORD',
'location' => 'https://apigateway.descartes.com/tms/pixi/',
'uri' => 'https://apigateway.descartes.com/tms/pixi/',
]);
$arguments = [
// 'CustomerOf' => 'SHP',
// 'CalculationStart' => '2022-01-01T00:00:00',
// 'CalculationEnd' => '2024-12-31T23:59:59',
// 'CustRef' => '10234',
// 'Rows' => '500',
// 'Offset' => '0',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiGetCRMCustomers', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiGetCRMCustomers