Szablon danych do analizy obsługi zwrotów i refundacji
Szablon danych do analizy obsługi zwrotów i refundacji
- Zalecane pola danych
- Najważniejsze etapy procesu do śledzenia
- Instrukcje pobierania danych
Atrybuty obsługi zwrotów i refundacji
| Nazwa | Opis | ||
|---|---|---|---|
| Czas zdarzenia EventTime | Znacznik czasu wskazujący, kiedy wystąpiła konkretna czynność lub zdarzenie. | ||
| Opis Czas zdarzenia, czyli znacznik czasu, zapisuje dokładną datę i godzinę wykonania czynności. Każda czynność w dzienniku zdarzeń ma przypisany znacznik czasu, który określa chronologiczną kolejność zdarzeń. Ten atrybut jest niezbędny w analizach process mining opartych na czasie. Służy do obliczania czasu między czynnościami, wykrywania czasu oczekiwania i wąskich gardeł, mierzenia całkowitego czasu obsługi sprawy oraz sprawdzania zgodności z umowami SLA. Dokładność znaczników czasu bezpośrednio wpływa na wiarygodność analizy wyników. Dlaczego to ważne Ten znacznik czasu jest niezbędny do obliczania wszystkich wskaźników czasu trwania, takich jak czas realizacji i czas oczekiwania, które stanowią podstawę analizy wyników. Skąd pobrać Odpowiada polom daty utworzenia lub modyfikacji w różnych tabelach, na przykład 'SalesTable.createdDateTime' dla utworzenia zlecenia lub 'WMSJournalTrans.createdDateTime' dla dzienników magazynowych. Przykłady 2023-10-26T10:00:00Z2023-10-26T14:30:15Z2023-10-27T09:05:42Z | |||
| Identyfikator sprawy zwrotu ReturnCaseId | Unikalny identyfikator sprawy klienta dotyczącej zwrotu i refundacji, łączący wszystkie powiązane czynności. | ||
| Opis Identyfikator sprawy zwrotu jest głównym identyfikatorem każdej odrębnej instancji procesu zwrotu. Łączy wszystkie czynności związane z konkretnym zwrotem lub wnioskiem o refundację, od utworzenia zlecenia zwrotu po jego zamknięcie. W analizie procesów ten identyfikator jest niezbędny do odtworzenia całej ścieżki każdego zwrotu. Umożliwia śledzenie pełnego przebiegu, pomiar całkowitego czasu realizacji i analizę różnic między sprawami. Wszystkie zdarzenia, dane i wskaźniki są agregowane i łączone na podstawie tego identyfikatora. Dlaczego to ważne To podstawowy identyfikator sprawy, który łączy wszystkie kroki procesu i pozwala śledzić oraz analizować każdy zwrot od początku do końca. Skąd pobrać Zwykle jest to numer upoważnienia do zwrotu materiału (RMA) lub numer zlecenia sprzedaży typu 'Returned Order' w module 'Sales and marketing'. Można go znaleźć w tabelach takich jak 'SalesTable', gdzie 'SalesType' ma wartość 'Returned Order'. Przykłady RMA-001234RMA-001235RMA-001236 | |||
| Nazwa czynności ActivityName | Nazwa konkretnego zdarzenia biznesowego lub zadania, które wystąpiło w procesie zwrotu i refundacji. | ||
| Opis Ten atrybut opisuje konkretny krok lub zdarzenie w przebiegu zwrotu i refundacji, na przykład 'Utworzono zlecenie zwrotu', 'Przyjęto towar' lub 'Zaksięgowano notę kredytową'. Każda czynność oznacza odrębny punkt procesu zarejestrowany w systemie. Analiza kolejności i częstotliwości czynności stanowi podstawę process mining. Umożliwia wizualizację map procesów, wykrywanie wąskich gardeł między krokami oraz odkrywanie częstych i rzadkich wariantów procesu. Zestaw czynności określa zakres analizowanego procesu. Dlaczego to ważne Określa kroki procesu, umożliwiając wizualizację jego przebiegu oraz wykrywanie wąskich gardeł, ponownej pracy i odstępstw. Skąd pobrać To atrybut pojęciowy wyprowadzany ze zdarzeń systemowych. Można go utworzyć przez przypisanie przyjaznych dla użytkownika nazw do zmian statusu w tabelach takich jak 'SalesTable' i 'WMSJournalTable' lub do konkretnych dzienników zdarzeń. Przykłady Utworzono zlecenie zwrotuPrzyjęto towarPrzypisano kod dyspozycjiZaksięgowano notę kredytową | |||
| Identyfikator produktu ProductId | Unikalny identyfikator zwracanego produktu. | ||
| Opis Identyfikator produktu, często określany jako SKU, wskazuje konkretny produkt zwracany przez klienta. Każda pozycja zlecenia zwrotu jest powiązana z identyfikatorem produktu. Analiza zwrotów według produktów pomaga wykryć te, które są zwracane najczęściej. Może to wskazywać na problemy z kontrolą jakości, nieprecyzyjne opisy produktów lub wady produkcyjne. Wyniki analizy pomagają ustalić, które produkty wymagają sprawdzenia i ulepszeń. Dlaczego to ważne Umożliwia analizę zwrotów dla poszczególnych produktów i pomaga wykryć te, które mają problemy z jakością lub są często zwracane. Skąd pobrać Odpowiada polu „ItemId” w tabeli „SalesLine” dla zlecenia zwrotu. Przykłady SKU-A-123SKU-B-456SKU-C-789 | |||
| Kanał zwrotu ReturnChannel | Sposób lub kanał, za pośrednictwem którego klient zgłosił zwrot. | ||
| Opis To pole określa kanał, za pośrednictwem którego klient rozpoczął proces zwrotu, na przykład „Portal internetowy”, „Sklep stacjonarny”, „Kontakt z obsługą klienta” lub „Poczta”. Podział analizy procesu według kanału zwrotu pozwala ocenić skuteczność i efektywność każdego z nich. Można porównać czas realizacji, koszty i satysfakcję klientów, aby wskazać dobre praktyki oraz obszary wymagające inwestycji lub usprawnień. Dane te są potrzebne do dashboardu „Efektywność wykorzystania kanałów zwrotu”. Dlaczego to ważne Pozwala porównać wyniki poszczególnych kanałów zwrotu i wskazać te, które działają najsprawniej i najniższym kosztem. Skąd pobrać Informacja może być zapisana w nagłówku zlecenia zwrotu („SalesTable”) lub ustalana na podstawie użytkownika, który utworzył zlecenie. Może być potrzebna niestandardowa logika albo dedykowane pole. Przykłady Portal internetowyKiosk w sklepieObsługa klienta | |||
| Kod dyspozycji DispositionCode | Kod określający wynik kontroli towaru i dalsze działanie. | ||
| Opis Kod dyspozycji jest przypisywany podczas kontroli jakości zwracanego towaru. Określa dalszy krok procesu, na przykład 'Credit', 'Replace', 'Scrap' lub 'Return to Customer'. Ten atrybut jest ważnym punktem decyzyjnym w procesie zwrotu. Analiza według kodu dyspozycji pozwala zrozumieć wyniki obsługi zwrotów, śledzić finansowe skutki złomowania towarów i oceniać efektywność różnych sposobów rozpatrzenia sprawy, takich jak wymiana lub refundacja. Dlaczego to ważne Ten kod określa dalszy przebieg sprawy zwrotu po kontroli. Ma więc znaczenie przy analizie wariantów procesu i ich wpływu na wyniki biznesowe. Skąd pobrać To ważne pole w module zarządzania jakością. Jest powiązane z obsługą zlecenia jakościowego lub zlecenia kontroli. Przykłady CRDTREPL-DSCRAPRTV | |||
| Kod przyczyny zwrotu ReturnReasonCode | Przyczyna zwrotu podana przez klienta. | ||
| Opis Pole „Kod przyczyny zwrotu” zapisuje powód zwrotu podany przez klienta, na przykład „Produkt wadliwy”, „Nieodpowiedni rozmiar”, „Produkt niezgodny z opisem” lub „Produkt nie jest już potrzebny”. Informację tę zbiera się zwykle podczas zgłaszania zwrotu. Analiza przyczyn zwrotów pomaga ustalić ich źródło. Pozwala wykryć problemy z jakością produktów, błędy w opisach lub nieprawidłowości w logistyce. Wnioski z tych danych mogą pomóc ulepszyć projekt produktów, marketing i operacje w łańcuchu dostaw, a tym samym ograniczyć liczbę przyszłych zwrotów. Dlaczego to ważne Pokazuje, dlaczego klienci zwracają produkty. Ułatwia ustalenie przyczyn i ograniczenie liczby zwrotów oraz poprawę satysfakcji klientów. Skąd pobrać Informacja jest zwykle zapisana na poziomie pozycji zlecenia zwrotu. W tabeli „SalesLine” dla zleceń zwrotu należy szukać pól z kodem przyczyny. Przykłady WADANIEWŁAŚCIWY_PRODUKTNIEPOTRZEBNYUSZKODZONY_W_TRANSPORCIE | |||
| Użytkownik odpowiedzialny ResponsibleUser | Użytkownik lub pracownik, który wykonał daną czynność albo odpowiada za jej wykonanie. | ||
| Opis Ten atrybut wskazuje osobę odpowiedzialną za wykonanie kroku procesu. Może to być pracownik magazynu, który przyjął towar, kontroler jakości lub pracownik działu finansowego, który zaksięgował notę kredytową. Analiza procesu według użytkowników pomaga zrozumieć rozkład obciążenia pracą, wskazać osoby osiągające najlepsze wyniki i wykryć potrzeby szkoleniowe. Można też sprawdzić sprawy obsługiwane przez konkretne osoby lub zespoły oraz zadbać o właściwy podział obowiązków. Dlaczego to ważne Umożliwia analizę rozkładu obciążenia pracą i wyników poszczególnych osób lub zespołów, a także wskazanie potrzeb szkoleniowych i możliwości lepszego przydziału zasobów. Skąd pobrać Wartość znajduje się w polach 'created by' lub 'modified by' rekordów transakcji, takich jak 'SalesTable.createdBy', albo w identyfikatorach użytkowników powiązanych z tabelami dzienników. Przykłady Alice.WBob.JChris.P | |||
| Czas zakończenia EndTime | Znacznik czasu wskazujący, kiedy zakończono konkretną czynność. | ||
| Opis Czas zakończenia to znacznik czasu ukończenia czynności. StartTime oznacza jej początek, a EndTime koniec, co pozwala obliczyć czas realizacji danego zadania. Ten atrybut jest ważny przy szczegółowej analizie wyników, zwłaszcza zadań o mierzalnym czasie trwania, takich jak 'Kontrola towaru'. Porównanie StartTime i EndTime pozwala dokładnie zmierzyć aktywny czas pracy nad zadaniem i odróżnić go od czasu oczekiwania między zadaniami. Ułatwia to wykrywanie nieefektywności w poszczególnych czynnościach, a nie tylko między nimi. Dlaczego to ważne Pozwala obliczyć aktywny czas realizacji poszczególnych czynności i odróżnić czas oczekiwania od faktycznej pracy. Skąd pobrać Często trzeba go wyliczyć. Może to być na przykład wartość 'modifiedDateTime' zmiany statusu kończącej czynność albo StartTime kolejnej czynności. Przykłady 2023-10-26T10:15:00Z2023-10-26T14:45:20Z2023-10-27T09:55:12Z | |||
| Data ostatniej aktualizacji danych LastDataUpdate | Znacznik czasu wskazujący, kiedy ostatnio odświeżono dane dotyczące procesu. | ||
| Opis Ten atrybut zapisuje datę i godzinę ostatniego wyodrębnienia danych z systemu źródłowego i ich aktualizacji w narzędziu process mining. Informuje, jak aktualne są analizowane dane. Znajomość czasu ostatniej aktualizacji pomaga ocenić aktualność analizy. Ułatwia prawidłową interpretację dashboardów i KPI, ponieważ wiadomo, czy przedstawiają dane bieżące, czy migawkę z określonego momentu. Ma to znaczenie przy monitorowaniu operacji. Dlaczego to ważne Informuje o aktualności danych, dzięki czemu analitycy wiedzą, jak bieżące są wnioski dotyczące procesu. Skąd pobrać To atrybut metadanych generowany i zapisywany podczas wczytywania danych. Zwykle wskazuje znacznik czasu zakończenia zadania ETL. Przykłady 2023-11-01T02:00:00Z2023-11-02T02:00:00Z | |||
| Docelowa data zwrotu środków według SLA RefundSlaTargetDate | Termin, do którego sprawa zwrotu i zwrotu środków powinna zostać w pełni rozpatrzona. | ||
| Opis To pole określa termin wynikający z umowy SLA na rozpatrzenie sprawy zwrotu. Do tego dnia klient powinien otrzymać ostateczne rozwiązanie, na przykład zaksięgowany zwrot pieniędzy lub wysłany produkt zastępczy. Termin pozwala monitorować realizację zobowiązań wobec klientów. Służy do obliczania wskaźnika KPI „Terminowość realizacji SLA” i zasilania dashboardu „Realizacja SLA dla rozpatrywania zwrotów”. Porównanie tej daty z faktyczną datą zakończenia procesu pozwala wykrywać przekroczenia SLA i odpowiednio wcześnie reagować na sprawy oczekujące na rozpatrzenie. Dlaczego to ważne Stanowi punkt odniesienia do oceny przebiegu procesu. Umożliwia monitorowanie zgodności z SLA i wykrywanie opóźnionych spraw. Skąd pobrać To pole może nie być dostępne standardowo. Często oblicza się je, dodając ustalony okres SLA, na przykład 14 dni, do daty utworzenia zwrotu. Może być zapisane w polu niestandardowym. Przykłady 2023-11-10T23:59:59Z2023-11-15T23:59:59Z | |||
| Faktyczna kwota zwrotu ActualRefundAmount | Ostateczna kwota zwrócona klientowi. | ||
| Opis To ostateczna, potwierdzona kwota zwrócona klientowi. Jest zapisywana podczas tworzenia i księgowania noty kredytowej. Pole ma znaczenie w analizie finansowej. Jest wykorzystywane bezpośrednio w dashboardzie „Analiza rozbieżności kwot zwrotów” oraz we wskaźniku KPI „Dokładność kwot zwrotów”. Analiza tych danych pomaga ocenić finansowe skutki zwrotów i korekt wprowadzonych w trakcie procesu. Dlaczego to ważne Pokazuje faktyczny wpływ zwrotu na finanse. Jest potrzebna do obliczenia dokładności zwrotów i analizy wyników finansowych. Skąd pobrać Wartość można znaleźć w szczegółach zaksięgowanej transakcji noty kredytowej. Jest powiązana z tabelami „CustTrans” i „CustInvoiceJour” dla noty kredytowej. Przykłady 99.99135.000.00 | |||
| Identyfikator klienta CustomerId | Unikalny identyfikator klienta, który zgłosił zwrot. | ||
| Opis Identyfikator klienta to unikalny identyfikator konta powiązanego ze zwrotem. Łączy transakcję zwrotu z konkretnym klientem w systemie CRM lub bazie klientów. Analiza zwrotów według klientów pozwala wykryć osoby, które zwracają produkty wyjątkowo często. Może to wskazywać na nadużycia lub długotrwałe niezadowolenie. Dane można też wykorzystać do segmentacji klientów, na przykład aby zaoferować lepszą obsługę zwrotów klientom o wysokiej wartości. Dlaczego to ważne Łączy proces zwrotu z konkretnym klientem, umożliwiając analizę na poziomie klienta oraz wykrywanie wzorców zwrotów i potencjalnych nadużyć. Skąd pobrać To pole „CustAccount” w tabeli „SalesTable” dla zlecenia zwrotu. Przykłady CUST-00045CUST-00192CUST-00315 | |||
| Identyfikator magazynu WarehouseId | Identyfikator magazynu lub lokalizacji, do której trafia zwracany produkt. | ||
| Opis To pole wskazuje konkretny magazyn lub centrum zwrotów, w którym obsługiwany jest zwracany produkt. Poszczególne lokalizacje mogą stosować różne procesy, dysponować innymi zasobami i osiągać różne wyniki. Analiza procesu według magazynu pozwala porównywać wyniki poszczególnych lokalizacji. Pomaga wskazać placówki, które najsprawniej obsługują zwroty, wykryć regionalne wąskie gardła oraz podejmować decyzje dotyczące przydziału zasobów i ujednolicania procesów w sieci logistycznej. Dlaczego to ważne Umożliwia porównanie wyników magazynów i centrów zwrotów oraz pomaga wykrywać regionalne wąskie gardła i dobre praktyki. Skąd pobrać Informacja jest zapisana w polu „InventLocationId” w transakcjach dotyczących zapasów, na przykład w dzienniku przyjęć („WMSJournalTable”) lub w tabeli „SalesLine”. Przykłady WH-EASTWH-WESTCENTRAL-DC | |||
| Identyfikator noty kredytowej CreditNoteId | Unikalny identyfikator dokumentu noty kredytowej wystawionego w związku ze zwrotem pieniędzy. | ||
| Opis Podczas realizacji zwrotu pieniędzy powstaje dokument finansowy, nazywany notą kredytową. To pole przechowuje jego unikalny identyfikator. Identyfikator łączy operacyjny proces zwrotu z dokumentacją finansową w systemie księgowym. Przydaje się podczas audytu i szczegółowej analizy rozbieżności finansowych. Pozwala prześledzić sprawę zwrotu aż do konkretnej transakcji finansowej, która ją rozliczyła. Dlaczego to ważne Łączy operacyjny proces zwrotu z odpowiadającą mu transakcją finansową, co ułatwia audyt i uzgadnianie rozliczeń. Skąd pobrać Numer noty kredytowej znajduje się zwykle w polu „InvoiceId” tabeli „CustInvoiceJour”, gdzie typ transakcji ma wartość „Credit note”. Można go powiązać ze zleceniem zwrotu. Przykłady CN-10056CN-10057CN-10058 | |||
| Status SLA SlaStatus | Informuje, czy sprawę rozpatrzono w terminie określonym w SLA. | ||
| Opis To wyliczane pole pokazuje prosty status realizacji SLA, zwykle „W terminie” lub „Po terminie”. Status ustala się przez porównanie znacznika czasu ostatniego zdarzenia, na przykład „Zamknięcie zlecenia zwrotu”, z polem „RefundSlaTargetDate”. Pole ułatwia raportowanie wyników na dashboardach, takich jak „Realizacja SLA dla rozpatrywania zwrotów”. Zamiast samodzielnie porównywać daty, użytkownicy otrzymują bezpośredni i czytelny status. Mogą szybko filtrować i agregować dane, aby obliczyć ogólny wskaźnik „Terminowość realizacji SLA”. Dlaczego to ważne Pokazuje w prosty sposób, czy sprawa spełnia wymagania SLA. Ułatwia filtrowanie opóźnionych spraw i analizę przyczyn opóźnień. Skąd pobrać To pole pochodne, obliczane przez porównanie znacznika czasu ostatniego zdarzenia rozpatrzenia sprawy z polem „RefundSlaTargetDate”. Przykłady W terminiePo terminie | |||
| Status zlecenia zwrotu ReturnOrderStatus | Ogólny status zlecenia zwrotu w chwili wystąpienia zdarzenia. | ||
| Opis To pole wskazuje bieżący status nagłówka zlecenia zwrotu, na przykład „Otwarte”, „Zafakturowane” lub „Anulowane”. Pokazuje ogólnie, na jakim etapie cyklu życia znajduje się sprawa. Zdarzenia opisują poszczególne kroki procesu, a ogólny status ułatwia filtrowanie i segmentowanie spraw. Analityk może na przykład skupić się na sprawach „Otwartych”, aby sprawdzić bieżące obciążenie, albo przeanalizować przebieg spraw, które ostatecznie zostały „Anulowane”. Dlaczego to ważne Pokazuje ogólny stan sprawy. Ułatwia filtrowanie i analizę wyników, takich jak anulowanie. Skąd pobrać Informacja znajduje się w polu „SalesStatus” lub „DocumentStatus” tabeli „SalesTable”. Przykłady Otwarte zlecenieDostarczoneZafakturowaneAnulowane | |||
| System źródłowy SourceSystem | System informatyczny, z którego wyodrębniono dane o zdarzeniach. | ||
| Opis Ten atrybut wskazuje system informatyczny, z którego pochodzą dane. W tym przypadku będzie to przede wszystkim 'Microsoft Dynamics 365'. W dużych organizacjach proces może obejmować kilka systemów. Wskazanie systemu źródłowego dla każdego zdarzenia jest ważne z punktu widzenia zarządzania danymi, rozwiązywania problemów z ich wyodrębnianiem i poznania środowiska technologicznego procesu. Potwierdza również pochodzenie analizowanych danych. Dlaczego to ważne Informuje o pochodzeniu danych, co jest niezbędne do zarządzania nimi, ich weryfikacji i poznania środowiska systemowego procesu. Skąd pobrać Zwykle jest to stała wartość dodawana podczas procesu wyodrębniania, przekształcania i ładowania danych (ETL), która określa źródło zbioru danych. Przykłady Microsoft Dynamics 365 F&OD365-PROD | |||
| Typ zwrotu ReturnType | Klasyfikuje zwrot według oczekiwanego wyniku, na przykład zwrotu pieniędzy lub wymiany produktu. | ||
| Opis To pole klasyfikuje sprawę zwrotu według sposobu jej rozpatrzenia, którego oczekuje klient lub który proponuje firma. Typowe rozwiązania to zwrot pieniędzy, wymiana na produkt zastępczy lub naprawa. Podział na typy ułatwia analizę różnych przebiegów procesu. Obsługa zwrotu pieniędzy znacznie różni się od wysyłki produktu zastępczego. Analiza według typu zwrotu pozwala dokładniej ocenić czas realizacji i wąskie gardła dla każdej ścieżki rozpatrywania sprawy. Dlaczego to ważne Umożliwia podział analizy według oczekiwanego wyniku. Proces zwrotu pieniędzy i wymiany produktu obejmuje różne kroki i trwa różną ilość czasu. Skąd pobrać Może to być pole niestandardowe w nagłówku zlecenia zwrotu albo wartość ustalana na podstawie kodu dyspozycji lub późniejszych transakcji, takich jak utworzenie zastępczego zlecenia sprzedaży. Przykłady Zwrot pieniędzyWymiana produktuŚrodki do wykorzystania w sklepie | |||
| Wnioskowana kwota zwrotu RequestedRefundAmount | Łączna kwota zwrotu pieniędzy, o którą wnioskuje klient. | ||
| Opis To pole określa początkową kwotę zwrotu, o którą wnioskowano lub której oczekiwano na początku procesu. Zwykle odpowiada pierwotnej cenie zakupu zwracanych produktów. Wartość ta stanowi punkt odniesienia w analizie rozbieżności kwot zwrotów. Porównanie wnioskowanej kwoty z faktycznie zwróconą pozwala wykryć różnice wynikające z opłat za ponowne przyjęcie towaru do magazynu, częściowego zwrotu za uszkodzony produkt lub innych korekt. Ułatwia to kontrolę poprawności rozliczeń i przestrzegania zasad. Dlaczego to ważne Stanowi punkt odniesienia do oceny poprawności rozliczeń przez porównanie z faktycznie przetworzoną kwotą zwrotu. Skąd pobrać Zwykle jest to kwota pozycji lub łączna kwota z pierwotnej pozycji zlecenia sprzedaży, która jest zwracana. Wartość znajduje się w polu „SalesLine.LineAmount”. Przykłady 99.99150.0024.50 | |||
| Zgodność z zasadami IsPolicyAdherent | Wskaźnik określający, czy zatwierdzenie zwrotu jest zgodne z obowiązującymi zasadami zwrotów. | ||
| Opis To wyliczane pole logiczne wskazuje, czy zwrot spełnia wszystkie kryteria określone w zasadach zwrotów firmy. Kryteria mogą obejmować termin zwrotu, stan produktu lub przyczynę zwrotu. Pole jest wykorzystywane w dashboardzie „Przegląd zgodności zatwierdzania zwrotów” oraz we wskaźniku KPI „Odsetek zgodnych zatwierdzeń zwrotów”. Pozwala mierzyć zgodność z zasadami, wykrywać sprawy zatwierdzone w drodze wyjątku oraz analizować przyczyny i częstotliwość takich wyjątków. Ma to znaczenie dla nadzoru i kontroli kosztów. Dlaczego to ważne Bezpośrednio mierzy zgodność z zasadami firmy. Pomaga wykrywać i ograniczać zatwierdzanie zwrotów niezgodnych z zasadami, które może prowadzić do utraty przychodów. Skąd pobrać To pole pochodne. Wymaga porównania danych o zwrocie, na przykład daty zwrotu i daty zakupu lub przyczyny zwrotu, z wcześniej określonymi zasadami biznesowymi. Przykłady truefalse | |||
Działania w procesie obsługi zwrotów i refundacji
| Działanie | Opis | ||
|---|---|---|---|
| Przyjęto towar | Oznacza fizyczne przyjęcie zwracanego towaru w magazynie lub wyznaczonym centrum zwrotów. Zdarzenie jest rejestrowane po zaksięgowaniu dziennika przyjęcia powiązanego ze zleceniem zwrotu. | ||
| Dlaczego to ważne To ważny etap, który przenosi proces od działań klienta do obsługi wewnętrznej. Od tego momentu można mierzyć czas wszystkich czynności wewnętrznych, takich jak kontrola i określenie dalszego postępowania. Skąd pobrać Znacznik czasu zaksięgowania dziennika WMS lub dziennika przyjęcia towaru powiązanego z pozycją ReturnOrder. Aktualizuje on transakcje magazynowe do statusu 'Registered' lub 'Received'. Rejestrowanie Zaksięgowanie dziennika przyjęcia towaru powiązanego z pozycją zlecenia zwrotu. Typ zdarzenia explicit | |||
| Przypisano kod dyspozycji | Ta czynność oznacza zakończenie kontroli i podjęcie decyzji o dalszym postępowaniu ze zwracanym towarem. Do pozycji zwrotu przypisywany jest kod dyspozycji, na przykład 'Credit', 'Scrap' lub 'Replace'. | ||
| Dlaczego to ważne To ważny punkt decyzyjny, który wyznacza dalszy przebieg procesu: refundację, wymianę lub odrzucenie zwrotu. Opóźnienia na tym etapie mogą znacznie wydłużyć czas rozpatrzenia sprawy. Skąd pobrać Zdarzenie jest rejestrowane po wypełnieniu pola DispositionCode w transakcji magazynowej pozycji zlecenia zwrotu lub powiązanym dzienniku. Rejestrowanie Zdarzenie aktualizacji polegające na ustawieniu DispositionCode dla pozycji zlecenia zwrotu. Typ zdarzenia explicit | |||
| Utworzono zlecenie zwrotu | To zdarzenie rozpoczyna proces zwrotu. W systemie tworzone jest upoważnienie do zwrotu materiału (RMA) lub zlecenie zwrotu. Jest rejestrowane w chwili utworzenia nowego rekordu ReturnOrder w Dynamics 365. | ||
| Dlaczego to ważne To główne zdarzenie rozpoczynające cały proces zwrotu. Analiza czasu od tej czynności do kolejnych zdarzeń pokazuje całkowity czas realizacji procesu i pomaga wykryć wąskie gardła na jego wczesnym etapie. Skąd pobrać Zdarzenie jest rejestrowane na podstawie znacznika czasu utworzenia nagłówka ReturnOrder. Zwykle znajduje się on w tabeli SalesTable, gdzie SalesType ma wartość 'Returned Order'. Rejestrowanie Zdarzenie utworzenia rekordu SalesTable z SalesType = 'Returned Order'. Typ zdarzenia explicit | |||
| Zaksięgowano notę kredytową | Nota kredytowa zostaje oficjalnie zaksięgowana w księgach finansowych, dzięki czemu klient może skorzystać z przyznanego kredytu. Z perspektywy firmy oznacza to zakończenie działania związanego z refundacją. | ||
| Dlaczego to ważne To ważny etap finansowy, który potwierdza przetworzenie refundacji w systemie. Często jest to istotna czynność przy pomiarze zgodności z SLA dla refundacji. Skąd pobrać Znacznik czasu zaksięgowania dziennika faktury dla zlecenia zwrotu, który finalizuje notę kredytową. Status zlecenia zwrotu zmienia się na 'Invoiced'. Rejestrowanie Zaksięgowanie dziennika faktury zlecenia zwrotu. Typ zdarzenia explicit | |||
| Zamknięto zlecenie zwrotu | Zlecenie zwrotu osiągnęło stan końcowy, co oznacza zakończenie wszystkich transakcji fizycznych i finansowych. Zwykle następuje to po zaksięgowaniu noty kredytowej lub wysłaniu towaru na wymianę. | ||
| Dlaczego to ważne To główne zdarzenie kończące prawidłowo zrealizowany proces zwrotu. Czas od utworzenia zlecenia do tego momentu odpowiada całkowitemu czasowi obsługi sprawy. Skąd pobrać Zdarzenie można wywnioskować ze zmiany pola statusu ReturnOrder na wartość końcową, taką jak 'Invoiced' lub 'Closed'. Oznacza to, że nie są oczekiwane dalsze działania. Rejestrowanie Zmiana pola SalesTable.Status lub SalesTable.DocumentStatus na stan końcowy. Typ zdarzenia inferred | |||
| Anulowano zlecenie zwrotu | Zlecenie zwrotu zostaje anulowane przed zakończeniem procesu. Może to nastąpić na prośbę klienta lub wtedy, gdy towar nie został zwrócony. | ||
| Dlaczego to ważne To alternatywny, niepomyślny koniec procesu. Analiza przyczyn anulowania zwrotów może dostarczyć informacji o zachowaniach klientów lub problemach w procesie. Skąd pobrać Zdarzenie można wywnioskować ze zmiany pola statusu ReturnOrder na 'Cancelled'. Jest to odrębny stan końcowy, inny niż prawidłowo zamknięte zlecenie. Rejestrowanie Zmiana pola SalesTable.Status na 'Cancelled'. Typ zdarzenia inferred | |||
| Potwierdzono zlecenie zwrotu | Oznacza formalne potwierdzenie zlecenia zwrotu w systemie, które często uruchamia kolejne działania. Zwykle jest rejestrowane jako jawna czynność lub zmiana statusu nagłówka ReturnOrder. | ||
| Dlaczego to ważne Potwierdzenie jest wymagane przed rozpoczęciem działań logistycznych. Opóźnienie między utworzeniem a potwierdzeniem może wskazywać na zaległości administracyjne lub problemy z systemem. Skąd pobrać Zdarzenie można rozpoznać po zaksięgowaniu dziennika 'Confirmation' dla zlecenia zwrotu lub zmianie pola DocumentStatus w tabeli SalesTable. Rejestrowanie Wykonanie funkcji 'Confirm sales order' dla zlecenia zwrotu. Typ zdarzenia explicit | |||
| Utworzono dziennik przyjęcia | Ta czynność oznacza, że magazyn oczekuje na zwracany towar. Polega na utworzeniu dziennika przyjęcia, który przygotowuje system do fizycznego odbioru towaru. | ||
| Dlaczego to ważne Ten krok oddziela przygotowanie logistyczne od fizycznego przyjęcia towaru. Ułatwia ocenę gotowości magazynu i planowanie przyjęć zwrotów. Skąd pobrać Utworzenie rekordu w tabeli WMSJournalTable z JournalType 'Arrival'. Dziennik jest powiązany z pozycją zlecenia zwrotu. Rejestrowanie Znacznik czasu utworzenia rekordu WMSJournalTable dotyczącego zwrotu. Typ zdarzenia explicit | |||
| Utworzono notę kredytową | Na podstawie dyspozycji 'Credit' tworzona jest nota kredytowa, która zatwierdza refundację dla klienta. Rozpoczyna ona formalnie finansowe rozliczenie zwrotu. | ||
| Dlaczego to ważne Ta czynność oznacza zatwierdzenie refundacji. Czas między określeniem dyspozycji a utworzeniem noty kredytowej pokazuje opóźnienia administracyjne w rozpoczęciu zwrotu środków. Skąd pobrać Zdarzenie można ustalić na podstawie utworzenia nowego rekordu SalesTable z wartością ujemną, powiązanego z pierwotnym zleceniem zwrotu, lub uruchomienia zadania wsadowego 'Create credit note'. Rejestrowanie Utworzenie noty kredytowej, często przez zaksięgowanie faktury za zlecenie zwrotu. Typ zdarzenia explicit | |||
| Utworzono zlecenie kontroli jakości | Utworzenie formalnego zlecenia kontroli jakości oznacza, że zwracany towar musi przejść zaplanowaną kontrolę. Jest to częste w przypadku zwrotów wymagających szczegółowych testów lub sprawdzenia zgodności ze standardami jakości. | ||
| Dlaczego to ważne Ta czynność oznacza rozpoczęcie formalnej kontroli. Pomiar czasu od tego momentu pozwala ocenić efektywność i czas trwania workflow zapewnienia jakości. Skąd pobrać Znacznik czasu utworzenia rekordu w tabeli InventQualityOrderTable powiązanego ze zleceniem zwrotu. Rejestrowanie Utworzenie rekordu InventQualityOrderTable. Typ zdarzenia explicit | |||
| Utworzono zlecenie wymiany | Tworzone jest nowe zlecenie sprzedaży, aby wysłać klientowi towar na wymianę. Ta czynność występuje, gdy dyspozycja ma wartość 'Replace and Credit' lub 'Replace and Scrap'. | ||
| Dlaczego to ważne Ta czynność rozpoczyna wariant procesu obejmujący wymianę. Osobne śledzenie tej ścieżki i ścieżki refundacji pozwala lepiej zrozumieć złożoność i koszty wymian. Skąd pobrać Utworzenie nowego rekordu SalesTable dla towaru na wymianę. Rekord jest często generowany automatycznie i powiązany z pierwotnym zleceniem zwrotu. Rejestrowanie Utworzenie nowego zlecenia sprzedaży powiązanego ze zleceniem zwrotu za pomocą dyspozycji. Typ zdarzenia explicit | |||
| Wysłano towar na wymianę | Dokument wydania towaru na wymianę zostaje zaksięgowany, co oznacza, że towar wysłano do klienta. Jest to koniec realizacji wymiany. | ||
| Dlaczego to ważne To ważny etap wariantu procesu obejmującego wymianę. Oznacza wywiązanie się firmy ze zobowiązania wobec klienta i pozwala mierzyć czas realizacji wymiany. Skąd pobrać Data zaksięgowania dziennika dokumentu wydania dla zlecenia sprzedaży towaru na wymianę. Status zlecenia zmienia się na 'Delivered'. Rejestrowanie Zaksięgowanie dokumentu wydania dla zlecenia sprzedaży towaru na wymianę. Typ zdarzenia explicit | |||
Instrukcje pobierania danych
Kroki
- Wymaganie wstępne: zarejestruj aplikację w Azure Active Directory. Aby połączyć się z API Dynamics 365, należy zarejestrować aplikację w dzierżawie Azure AD. Przyznaj jej delegowane uprawnienia do dostępu do Dynamics 365 Finance & Operations, na przykład
Financials.ReadWrite.Alllub uprawnienie niestandardowe. - Skonfiguruj identyfikator aplikacji w Dynamics 365. W Dynamics 365 przejdź do System administration > Setup > Azure Active Directory applications. Dodaj identyfikator aplikacji (klienta) z rejestracji aplikacji Azure AD i przypisz go do konta użytkownika z rolami zabezpieczeń umożliwiającymi odczyt wymaganych jednostek danych.
- Uzyskaj token dostępu OAuth 2.0. Przygotuj skrypt, na przykład w PowerShell lub Python, który uwierzytelni się w punkcie końcowym platformy tożsamości Microsoft. Użyj poświadczeń aplikacji (identyfikatora klienta i klucza tajnego), aby uzyskać token dostępu do adresu URL zasobu Dynamics 365.
- Ustal adres URL środowiska Dynamics 365. Znajdź podstawowy adres URL środowiska Dynamics 365. Punkt końcowy Web API ma zwykle postać:
https://[YourD365FinanceAndOpsURL].dynamics.com/data. - Przygotuj i wykonaj żądania OData API. Dla każdej z 12 wymaganych czynności przygotuj osobny adres URL żądania OData GET. Użyj
$select, aby pobrać tylko potrzebne kolumny, oraz$filter, aby określić zakres dat i warunki dotyczące statusu. Token uwierzytelniający uzyskany w kroku 3 należy przekazać jako token Bearer w nagłówku autoryzacji każdego żądania. - Przygotuj skrypt do pobierania danych. Utwórz skrypt, który przejdzie przez listę żądań OData. Powinien obsługiwać uwierzytelnianie, wykonywać każde żądanie GET i zapisywać otrzymane dane JSON. Uwzględnij limity API i w razie potrzeby dodaj przerwy między żądaniami.
- Obsłuż stronicowanie wyników API. Dynamics 365 dzieli duże wyniki na strony. Skrypt musi sprawdzać, czy odpowiedź zawiera właściwość
@odata.nextLink. Jeśli tak, powinien wysłać kolejne żądanie pod wskazany adres, aby pobrać następną stronę. Powtarzaj tę czynność, aż odpowiedź nie będzie zawieraćnextLink. - Przekształć i połącz dane. Przetwórz odpowiedzi JSON ze wszystkich 12 wywołań API. Dla każdej czynności utwórz ujednolicony rekord zawierający
ReturnCaseId,ActivityName,EventTimei pozostałe atrybuty. Na przykład dla zdarzenia „Utworzono zlecenie zwrotu” przypiszReturnOrderNumberdoReturnCaseId, ustawActivityNamena „Utworzono zlecenie zwrotu”, acreatedDateTimeprzypisz doEventTime. Połącz przekształcone rekordy ze wszystkich wywołań w jedną listę lub tabelę. - Oczyść i ujednolić znaczniki czasu. Zadbaj o spójny format wartości
EventTime, najlepiej UTC, na przykładYYYY-MM-DDTHH:MM:SSZ. W razie potrzeby obsłuż rekordy z brakującymi lub nieprawidłowymi znacznikami czasu. - Wyeksportuj końcowy dziennik zdarzeń. Po zebraniu i przekształceniu wszystkich danych do jednego zbioru wyeksportuj go do pliku CSV. Nagłówki kolumn powinny odpowiadać wymaganiom ProcessMind:
ReturnCaseId,ActivityName,EventTime,ResponsibleUser,DispositionCodeitd. Plik będzie gotowy do przesłania.
Konfiguracja
- Adres URL punktu końcowego API: podstawowy adres URL instancji Dynamics 365 Finance & Operations. Ma format
https://[YourEnvironmentName].dynamics.com/data. - Aplikacja Azure AD: aplikację należy zarejestrować w Azure AD, aby uzyskać identyfikator klienta i klucz tajny. Wymaga ona uprawnień API do odczytu jednostek danych Dynamics 365.
- Filtrowanie według zakresu dat: każde wywołanie API powinno zawierać filtr zakresu dat. Użyj parametru OData
$filterdla odpowiedniego pola daty, na przykładcreatedDateTimelubmodifiedDateTime. Na początek warto pobrać dane z ostatnich 3–6 miesięcy, aby ograniczyć ich ilość. - Filtr firmy: aby pobrać dane dla konkretnej jednostki prawnej, dodaj parametr zapytania
cross-company=true, a następnie użyj$filterdla poladataAreaId. Na przykład:?cross-company=true&$filter=dataAreaId eq '[YourCompanyCode]'. - Ustawienia stronicowania: w żądaniach użyj nagłówka
Prefer: odata.maxpagesize=[value], aby określić liczbę rekordów na stronę. Typowa wartość to1000–5000. Ogranicza to ryzyko przekroczenia limitu czasu przy dużych jednostkach danych. - Limity liczby żądań API: uwzględnij limity ochrony usług API Dynamics 365. Skrypt powinien obsługiwać odpowiedzi
429 (Too Many Requests), na przykład przez stopniowe wydłużanie przerw lub ponawianie żądania po krótkiej przerwie.
Przykładowe zapytanie graphql
/*
This is a conceptual guide representing multiple, distinct OData API calls.
You will need a script (e.g., Python, PowerShell) to execute these calls sequentially,
authenticate with a bearer token, handle pagination, and union the results into a single file.
Replace [YourD365URL], [StartDate], [EndDate], and [YourCompanyCode] with your specific values.
*/
// Base URL for all requests
const string BaseUrl = "https://[YourD365URL].dynamics.com/data";
const string CompanyFilter = "?cross-company=true&$filter=dataAreaId eq '[YourCompanyCode]' and ";
const string DateFilterCreated = "createdDateTime ge [StartDate]T00:00:00Z and createdDateTime le [EndDate]T23:59:59Z";
const string DateFilterModified = "modifiedDateTime ge [StartDate]T00:00:00Z and modifiedDateTime le [EndDate]T23:59:59Z";
// 1. Return Order Created
GET {BaseUrl}/ReturnOrderHeaders{CompanyFilter}{DateFilterCreated}&$select=ReturnOrderNumber,createdDateTime,createdby,ReturnReasonCodeId
// Mapping: ReturnOrderNumber -> ReturnCaseId, 'Return Order Created' -> ActivityName, createdDateTime -> EventTime, createdby -> ResponsibleUser, ReturnReasonCodeId -> ReturnReasonCode
// 2. Return Order Confirmed
// This often updates the header status. We look for a modification time on confirmed orders.
GET {BaseUrl}/ReturnOrderHeaders{CompanyFilter}ReturnOrderStatus eq 'Confirmed' and {DateFilterModified}&$select=ReturnOrderNumber,modifiedDateTime,modifiedby,ReturnReasonCodeId
// Mapping: ReturnOrderNumber -> ReturnCaseId, 'Return Order Confirmed' -> ActivityName, modifiedDateTime -> EventTime, modifiedby -> ResponsibleUser
// 3. Arrival Journal Created
GET {BaseUrl}/WarehouseArrivalJournalHeaders{CompanyFilter}{DateFilterCreated}&$expand=WarehouseArrivalJournalLines($select=InventTransactionId)&$select=JournalNumber,createdDateTime,createdby
// Note: This requires post-processing to link JournalNumber to a ReturnCaseId via InventTransactionId.
// Mapping: Link via InventTrans -> ReturnCaseId, 'Arrival Journal Created' -> ActivityName, createdDateTime -> EventTime, createdby -> ResponsibleUser
// 4. Item Received (Arrival Journal Posted)
GET {BaseUrl}/WarehouseArrivalJournalHeaders{CompanyFilter}JournalPosted eq 'Yes' and {DateFilterModified}&$expand=WarehouseArrivalJournalLines($select=InventTransactionId)&$select=JournalNumber,modifiedDateTime,modifiedby
// Mapping: Link via InventTrans -> ReturnCaseId, 'Item Received' -> ActivityName, modifiedDateTime -> EventTime, modifiedby -> ResponsibleUser
// 5. Quality Order Generated
GET {BaseUrl}/InventQualityOrders{CompanyFilter}{DateFilterCreated}&$select=QualityOrderId,InventTransId,createdDateTime,CreatedByUserId,ItemId
// Mapping: Link via InventTransId -> ReturnCaseId, 'Quality Order Generated' -> ActivityName, createdDateTime -> EventTime, CreatedByUserId -> ResponsibleUser, ItemId -> ProductId
// 6. Disposition Code Applied
// This is a status change on the return line.
GET {BaseUrl}/ReturnOrderLines{CompanyFilter}ReturnDispositionCodeId ne '' and {DateFilterModified}&$select=ReturnOrderNumber,modifiedDateTime,modifiedby,ReturnDispositionCodeId,ItemId
// Mapping: ReturnOrderNumber -> ReturnCaseId, 'Disposition Code Applied' -> ActivityName, modifiedDateTime -> EventTime, modifiedby -> ResponsibleUser, ReturnDispositionCodeId -> DispositionCode, ItemId -> ProductId
// 7. Credit Note Created
// Look for sales orders with type 'Returned Order' that are not yet invoiced.
GET {BaseUrl}/SalesOrderHeadersV2{CompanyFilter}SalesOrderProcessingStatus eq 'Open' and SalesOrderType eq 'ReturnedOrder' and {DateFilterCreated}&$select=SalesOrderNumber,createdDateTime,createdby
// Mapping: SalesOrderNumber -> ReturnCaseId, 'Credit Note Created' -> ActivityName, createdDateTime -> EventTime, createdby -> ResponsibleUser
// 8. Credit Note Posted
// Look for posted invoice journals linked to a return order.
GET {BaseUrl}/SalesInvoiceJournalHeaders{CompanyFilter}SalesOrderType eq 'ReturnedOrder' and {DateFilterCreated}&$select=SalesOrderNumber,InvoiceDate,createdby
// Mapping: SalesOrderNumber -> ReturnCaseId, 'Credit Note Posted' -> ActivityName, InvoiceDate -> EventTime, createdby -> ResponsibleUser
// 9. Replacement Order Created
// Disposition code on the return line triggers a replacement order.
GET {BaseUrl}/SalesOrderHeadersV2{CompanyFilter}SalesOrderOriginType eq 'ReturnOrder' and {DateFilterCreated}&$select=SalesOrderNumber,createdDateTime,createdby,ReturnOrderNumber
// Mapping: ReturnOrderNumber -> ReturnCaseId, 'Replacement Order Created' -> ActivityName, createdDateTime -> EventTime, createdby -> ResponsibleUser
// 10. Replacement Item Shipped
// Check for posted packing slips related to the replacement sales order.
GET {BaseUrl}/SalesPackingSlipJournals{CompanyFilter}{DateFilterCreated}&$select=SalesOrderNumber,DeliveryDate,createdby
// Note: This requires linking SalesOrderNumber back to the original ReturnOrderNumber for the ReturnCaseId.
// Mapping: Link SalesOrderNumber -> ReturnCaseId, 'Replacement Item Shipped' -> ActivityName, DeliveryDate -> EventTime, createdby -> ResponsibleUser
// 11. Return Order Closed
GET {BaseUrl}/ReturnOrderHeaders{CompanyFilter}ReturnOrderStatus eq 'Closed' and {DateFilterModified}&$select=ReturnOrderNumber,modifiedDateTime,modifiedby
// Mapping: ReturnOrderNumber -> ReturnCaseId, 'Return Order Closed' -> ActivityName, modifiedDateTime -> EventTime, modifiedby -> ResponsibleUser
// 12. Return Order Cancelled
GET {BaseUrl}/ReturnOrderHeaders{CompanyFilter}ReturnOrderStatus eq 'Canceled' and {DateFilterModified}&$select=ReturnOrderNumber,modifiedDateTime,modifiedby
// Mapping: ReturnOrderNumber -> ReturnCaseId, 'Return Order Cancelled' -> ActivityName, modifiedDateTime -> EventTime, modifiedby -> ResponsibleUser Kroki
- Włącz punkt końcowy TDS: upewnij się, że punkt końcowy Tabular Data Stream (TDS) jest włączony w środowisku Dynamics 365 Dataverse. Administrator systemu może go włączyć w centrum administracyjnym Power Platform, wybierając Environment > Settings > Features.
- Ustal adres URL środowiska: znajdź adres URL środowiska. Zwykle ma postać
yourorg.crm.dynamics.com. Nazwa serwera punktu końcowego TDS to ten adres z portem 5558, na przykładyourorg.crm.dynamics.com,5558. - Połącz się za pomocą klienta SQL: użyj klienta SQL obsługującego TDS, takiego jak SQL Server Management Studio (SSMS) lub Azure Data Studio.
- Uwierzytelnij się: połącz się z serwerem za pomocą konta Azure Active Directory z odpowiednimi uprawnieniami w środowisku Dataverse, zwykle roli Administrator systemu lub Dostosowujący system.
- Przygotuj zapytanie: skopiuj całe zapytanie SQL z sekcji
querytego dokumentu do nowego okna zapytań w kliencie SQL. - Ustaw parametry: znajdź symbole zastępcze w zapytaniu. Zastąp
'{StartDate}'i'{EndDate}'wybranym zakresem dat, na przykład'2023-01-01'i'2023-12-31'. Zaktualizuj też symbole zastępcze kodów statusu lub kodów dyspozycji, aby odpowiadały konfiguracji Dynamics 365. - Wykonaj zapytanie: uruchom zmodyfikowane zapytanie w bazie danych Dataverse. Czas wykonania zależy od ilości danych i wybranego zakresu dat.
- Sprawdź wyniki: po zakończeniu zapytania upewnij się, że zwrócony zbiór zawiera oczekiwane kolumny:
ReturnCaseId,ActivityName,EventTimeoraz zalecane atrybuty. - Wyeksportuj dziennik zdarzeń: wyeksportuj wyniki zapytania do pliku CSV. Większość klientów SQL ma wbudowaną funkcję zapisywania wyników bezpośrednio do pliku. Zapisz plik w kodowaniu UTF-8.
- Prześlij dane do ProcessMind: wyeksportowany plik CSV jest gotowy do przesłania do ProcessMind jako nowy dziennik zdarzeń do analizy process mining.
Konfiguracja
- Wymagania wstępne: potrzebne jest konto użytkownika z co najmniej uprawnieniami do odczytu odpowiednich tabel Dataverse, na przykład SalesTable, SalesLine i CustInvoiceJour. Uprawnieniami zarządza się zwykle za pomocą ról zabezpieczeń, takich jak Administrator systemu, lub roli niestandardowej z odpowiednimi uprawnieniami do tabel.
- Punkt końcowy TDS: punkt końcowy TDS Dataverse musi być włączony w środowisku. Umożliwia on bezpośrednie wykonywanie zapytań SQL tylko do odczytu w bazie danych Dataverse.
- Zakres dat: zapytanie zawiera symbole zastępcze
'{StartDate}'i'{EndDate}'. Do wstępnej analizy zaleca się zakres 3–6 miesięcy. Pozwoli to uzyskać reprezentatywny zbiór danych bez problemów z wydajnością. - Filtr firmy: w obecnej postaci zapytanie obejmuje wszystkie jednostki prawne (firmy), do których użytkownik ma dostęp. Aby przeanalizować jedną firmę, usuń komentarz i dodaj klauzulę
WHEREfiltrującą poleDATAAREAIDw każdej części instrukcjiUNION ALL, na przykładAND st.DATAAREAID = '[YourCompanyID]'. - Symbole zastępcze dla logiki niestandardowej: zapytanie zawiera symbole zastępcze, takie jak
[YourReplaceCode1]dla kodów dyspozycji, oraz uwagi dotyczące łączenia zleceń wymiany. Należy je skonfigurować zgodnie z procesem biznesowym i ustawieniami Dynamics 365. - Wydajność: bezpośrednie zapytania do punktu końcowego TDS mogą działać wolno przy dużych zbiorach danych. Połączenie jest zoptymalizowane pod kątem zapytań analitycznych, ale złożone złączenia obejmujące miliony wierszy mogą przekroczyć limit czasu. Zaleca się stosowanie ścisłych filtrów dat.
Przykładowe zapytanie sql
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Return Order Created' AS ActivityName,
st.CREATEDDATETIME AS EventTime,
st.CREATEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
sl.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
WHERE st.SALESTYPE = 3 AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Return Order Confirmed' AS ActivityName,
st.MODIFIEDDATETIME AS EventTime,
st.MODIFIEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
sl.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
WHERE st.SALESTYPE = 3 AND st.DOCUMENTSTATUS = 1 AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Arrival Journal Created' AS ActivityName,
wjt.CREATEDDATETIME AS EventTime,
wjt.CREATEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
sl.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
JOIN WMSJOURNALTABLE wjt ON st.SALESID = wjt.ORDERID AND st.DATAAREAID = wjt.DATAAREAID
WHERE st.SALESTYPE = 3 AND wjt.JOURNALTYPE = 4 AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Item Received' AS ActivityName,
wjt.POSTEDDATETIME AS EventTime,
wjt.POSTEDUSERID AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
sl.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
JOIN WMSJOURNALTABLE wjt ON st.SALESID = wjt.ORDERID AND st.DATAAREAID = wjt.DATAAREAID
WHERE st.SALESTYPE = 3 AND wjt.JOURNALTYPE = 4 AND wjt.POSTEDDATETIME IS NOT NULL AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Quality Order Generated' AS ActivityName,
iqot.CREATEDDATETIME AS EventTime,
iqot.CREATEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
iqot.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
JOIN INVENTQUALITYORDERTABLE iqot ON sl.INVENTTRANSID = iqot.INVENTTRANSID AND sl.DATAAREAID = iqot.DATAAREAID
WHERE st.SALESTYPE = 3 AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Disposition Code Applied' AS ActivityName,
iqot.VALIDATEDDATETIME AS EventTime,
iqot.VALIDATEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
iqot.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
JOIN INVENTQUALITYORDERTABLE iqot ON sl.INVENTTRANSID = iqot.INVENTTRANSID AND sl.DATAAREAID = iqot.DATAAREAID
WHERE st.SALESTYPE = 3 AND iqot.VALIDATEDDATETIME IS NOT NULL AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Credit Note Created' AS ActivityName,
st.MODIFIEDDATETIME AS EventTime,
st.MODIFIEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
sl.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
WHERE st.SALESTYPE = 3 AND st.SALESSTATUS = 3 AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Credit Note Posted' AS ActivityName,
cij.CREATEDDATETIME AS EventTime,
cij.CREATEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
sl.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
JOIN CUSTINVOICEJOUR cij ON st.SALESID = cij.SALESID AND st.DATAAREAID = cij.DATAAREAID
WHERE st.SALESTYPE = 3 AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
ro.RETURNITEMNUM AS ReturnCaseId,
'Replacement Order Created' AS ActivityName,
replacement_so.CREATEDDATETIME AS EventTime,
replacement_so.CREATEDBY AS ResponsibleUser,
NULL AS DispositionCode,
NULL AS ReturnReasonCode,
replacement_so.SALESORIGINID AS ReturnChannel,
replacement_sl.ITEMID AS ProductId
FROM SALESTABLE ro
JOIN SALESLINE rol ON ro.SALESID = rol.SALESID AND ro.DATAAREAID = rol.DATAAREAID
JOIN SALESTABLE replacement_so ON ro.CUSTACCOUNT = replacement_so.CUSTACCOUNT AND ro.DATAAREAID = replacement_so.DATAAREAID
JOIN SALESLINE replacement_sl ON replacement_so.SALESID = replacement_sl.SALESID AND replacement_so.DATAAREAID = replacement_sl.DATAAREAID
WHERE ro.SALESTYPE = 3
AND rol.RETURNDISPOSITIONCODEID IN ('[YourReplaceCode1]', '[YourReplaceCode2]')
AND replacement_so.SALESTYPE = 1
AND replacement_so.CREATEDDATETIME > ro.CREATEDDATETIME
-- The join above is a basic example and must be replaced with your system's specific logic for linking returns to replacements.
AND ro.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
ro.RETURNITEMNUM AS ReturnCaseId,
'Replacement Item Shipped' AS ActivityName,
cpsj.CREATEDDATETIME AS EventTime,
cpsj.CREATEDBY AS ResponsibleUser,
NULL AS DispositionCode,
NULL AS ReturnReasonCode,
replacement_so.SALESORIGINID AS ReturnChannel,
cpsl.ITEMID AS ProductId
FROM SALESTABLE ro
JOIN SALESLINE rol ON ro.SALESID = rol.SALESID AND ro.DATAAREAID = rol.DATAAREAID
JOIN SALESTABLE replacement_so ON ro.CUSTACCOUNT = replacement_so.CUSTACCOUNT AND ro.DATAAREAID = replacement_so.DATAAREAID
JOIN CUSTPACKINGSLIPJOUR cpsj ON replacement_so.SALESID = cpsj.SALESID AND replacement_so.DATAAREAID = cpsj.DATAAREAID
JOIN CUSTPACKINGSLIPTRANS cpsl ON cpsj.PACKINGSLIPID = cpsl.PACKINGSLIPID AND cpsj.SALESID = cpsl.SALESID AND cpsj.DATAAREAID = cpsl.DATAAREAID
WHERE ro.SALESTYPE = 3
AND rol.RETURNDISPOSITIONCODEID IN ('[YourReplaceCode1]', '[YourReplaceCode2]')
AND replacement_so.SALESTYPE = 1
AND replacement_so.CREATEDDATETIME > ro.CREATEDDATETIME
-- The join above is a basic example and must be replaced with your system's specific logic for linking returns to replacements.
AND ro.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Return Order Closed' AS ActivityName,
st.MODIFIEDDATETIME AS EventTime,
st.MODIFIEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
sl.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
WHERE st.SALESTYPE = 3 AND st.SALESSTATUS = 3 AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Return Order Cancelled' AS ActivityName,
st.MODIFIEDDATETIME AS EventTime,
st.MODIFIEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
sl.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
WHERE st.SALESTYPE = 3 AND st.SALESSTATUS = 4 AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'; Gotowi do rozpoczęcia?
Skorzystaj z tego szablonu, aby usprawnić zbieranie danych i odkryć możliwości poprawy obsługi zwrotów i refundacji. Zacznij już dziś skracać czas obsługi i zwiększać zadowolenie klientów.
Skróć czas obsługi zwrotów i refundacji. Usprawnij proces już dziś
Skróć czas realizacji o 30% i zwiększ zadowolenie klientów.
Nie trzeba podawać danych karty. Konfiguracja zajmuje kilka minut.