Přepočty indexů a Hromadná aktualizace indexů
Přepočty indexů
Připomeňme si:
POLE |
KATEGORIZUJE KONTAKT |
Obrat | podle velikosti obratu vůči naší firmě |
Loajalita | podle stálosti obratu vůči naší firmě |
Platební morálka | podle včasných úhrad dokladů |
Kategorie cen | podle cenové politiky |
Vyplňování těchto polí je možno automatizovat pomocí Adresáře. V menu agendy spusťte dialog Přepočty indexů... ve kterém se evidují metodiky přepočtu indexů. Pro každý index lze definovat různé metodiky přepočtu. Tak je například možné rozlišit kategorizaci obratu běžného odběratele a velkoodběratele. Kategorie lze pak hromadně přepočítat pomocí průvodce Hromadná aktualizace indexů...
Přepočty indexů umožňují definovat automatizaci pro aktualizaci indexů kontaktů. Indexy kontaktů jsou určeny pro segmentaci kontaktů podle nejrůznějších kritérií a pomáhají tak získat rychlou informaci o daném kontaktu. Přepočet se skládá z definice období, dotazu SQL, definice názvů indexů a definice podmínek pro konkrétní názvy indexů. Princip spočívá v tom, že se vyhodnotí SQL dotaz přepočtu, kterému se předají parametry období. Dotaz spočítá určité výsledné hodnoty libovolně pojmenované. Tyto hodnoty jsou následně zpracovávány v sekci podmínek, které náleží jednotlivým názvům indexů. Pokud jsou splněny všechny podmínky konkrétního názvu indexu, je konkrétnímu kontaktu daný index přiřazen.
Rozdělení indexů
Přepočty indexů se rozdělují podle toho, který index aktualizují na:
Přepočet indexu obratu | Zpracovává data z jednoho období. |
Přepočet indexu loajality | Zpracovává data ze dvou po sobě jdoucích období. |
Přepočet indexu platební morálky | Zpracovává data z jednoho období. |
Přepočet kategorie cen | Zpracovává data z jednoho období. |
Definice období
Období určuje časové rozmezí, za které se spočítá SQL dotaz. Délka období se určuje hodnotou a typem období. Například pro délku období tří let je třeba zapsat do pole Délka období přepočtu hodnotu 3 a vybrat typ období Rok. Tím je definována délka. Nyní je ještě potřeba stanovit od kdy se má dané období počítat. Pokud je v sekci kdy skončilo poslední období vybráno aktuální den, období je spočítáno zpětně od dnešního dne. Tudíž dnes – 3 roky. Pokud je v sekci kdy skončilo poslední období vybráno poslední kalendářní (Typ období), výsledné období je spočítáno zpětně od data, kdy skončil daný Typ období. Pokud by bylo tedy vybráno poslední kalendářní (Rok), výsledné období by bylo 31. 12. loňského roku (Datum kdy skončilo období rok) – 3 roky.
U indexu loajality se počítají dvě po sobě jdoucí období. V tomto případě se spočítá první období a druhé období se spočítá tak, aby bylo stejně dlouhé, ale aby předcházelo prvnímu období.
Předání hodnot období do dotazu
Do dotazu se data předávají takto:
Všechny indexy kromě Indexu loajality
parDatumOd1 = Datum kdy začalo dané období
parDatumDo1 = Datum kdy skončilo dané období
Dotaz SQL musí začínat PARAMETERS parDatumOd1 DateTime, parDatumDo1 DateTime;
V dotazu se na hodnoty odkazuje takto: [parDatumOd1], [parDatumDo1]
Index loajality
parDatumOd1 = Datum kdy začalo starší období
parDatumDo1 = Datum kdy skončilo starší období
parDatumOd2 = Datum kdy začalo novější období
parDatumDo2 = Datum kdy skončilo novější období
Dotaz SQL musí začínat PARAMETERS parDatumOd1 DateTime, parDatumDo1 DateTime, parDatumOd2 DateTime, parDatumDo2 DateTime;
V dotazu se na hodnoty odkazuje takto: [parDatumOd1], [parDatumDo1], [parDatumOd2], [parDatumDo2]
Definice dotazu SQL
Dotaz SQL musí být navržen tak, aby přebíral parametry období a vracel nějaká výsledná pojmenovaná pole.
Dotaz musí mít také svojí PASSTHROUGH variantu, protože na SQL serveru by byl velice pomalý.
Příklad pro přepočet indexu obratu:
V příkladu je uveden dotaz, který je určen pro přepočet indexu obratu kontaktů začínajících písmenem "A". U indexu obratu je důležité spočítat obrat kontaktu za nějaké období. Je tedy potřebovat definovat data, které určují dané období. Toto se udělá v sekci Parameters dotazu SQL. Dále je třeba, aby daný dotaz vracel nějakou výslednou hodnotu. V tomto případě hodnotu H1, která určuje částku obratu za dané období. Podle této hodnoty se budou dále definovat názvy indexů.
PARAMETERS parDatumOd1 DateTime, parDatumDo1 DateTime;
SELECT Firmy.Firma, nz([PH1],0) as H1
FROM Firmy LEFT JOIN (SELECT Doklady.Firma, Sum([Doklady].[Celkem]*[Doklady].[pv]) AS PH1
FROM Doklady
WHERE (((Doklady.Typ_dokladu)="FV" Or (Doklady.Typ_dokladu)="DV") AND ((Doklady.Datum) Between [parDatumOd1] And [parDatumDo1]))
GROUP BY Doklady.Firma
) AS PDA ON Firmy.Firma = PDA.Firma
WHERE (((Firmy.Firma) Like "a*"))
Příklad pro přepočet indexu loajality:
V příkladu je uveden dotaz, který je určen pro přepočet indexu loajality kontaktů začínajících písmenem "A". U indexu loajality je důležité spočítat obrat kontaktu za nějaké dvě po sobě jdoucí období. Je tedy potřeba definovat data, které určují daná období. Toto se udělá v sekci Parameters dotazu SQL. Dále je třeba aby daný dotaz vracel nějaké výsledné hodnoty. V tomto případě hodnoty H1, která určuje částku obratu za starší období a H2, která určuje částku obratu za novější období. Podle těchto hodnot se budou dále definovat názvy indexů.
PARAMETERS parDatumOd1 DateTime, parDatumDo1 DateTime, parDatumOd2 DateTime, parDatumDo2 DateTime;
SELECT Firmy.Firma, Firmy.Index_loajality, nz([PH1],0) AS H1, nz([PH2],0) AS H2
FROM (Firmy LEFT JOIN (SELECT Doklady.Firma, Sum([Doklady].[Celkem]*[Doklady].[pv]) AS PH1
FROM Doklady
WHERE (((Doklady.Typ_dokladu)="FV" Or (Doklady.Typ_dokladu)="DV") AND ((Doklady.Datum) Between [parDatumOd1] And [parDatumDo1]))
GROUP BY Doklady.Firma) AS PD1 ON Firmy.Firma = PD1.Firma) LEFT JOIN (SELECT Doklady.Firma,Sum([Doklady].[Celkem]*[Doklady].[pv]) AS PH2
FROM Doklady
WHERE (((Doklady.Typ_dokladu)="FV" Or (Doklady.Typ_dokladu)="DV") AND ((Doklady.Datum) Between [parDatumOd2] And [parDatumDo2]))
GROUP BY Doklady.Firma) AS PD2 ON Firmy.Firma = PD2.Firma
WHERE (((Firmy.Firma) Like "a*"))
Příklad pro přepočet indexu platební morálky:
V příkladu je uveden dotaz, který je určen pro přepočet indexu platební morálky odběratelů. U indexu platební morálky je důležité spočítat průměrnou dobu splatnosti za nějaké konkrétní období. Je tedy nutné definovat data, které určují dané období. Toto se udělá v sekci Parameters dotazu SQL. Dále je třeba aby daný dotaz vracel nějaké výsledné hodnoty. V tomto případě hodnotu PrumerDniSplatnosti. Podle této hodnoty se budou dále definovat názvy indexů.
PARAMETERS parDatumOd1 DateTime, parDatumDo1 DateTime;
SELECT Firmy.Firma, Firmy.Odberatel, CInt(nz([PrumerDni],0)) AS PrumerDniSplatnosti, CInt(nz([SoucetDniPo]/CInt(nz([PocetDokladu],1)),0)) AS PrumerDniPoSplatnosti, D_02.PocetDokladu, D_02.SoucetDniPo
FROM (Firmy LEFT JOIN (SELECT Doklady.Firma, Avg(Souvisejici_doklady.Dni) AS PrumerDni
FROM Souvisejici_doklady INNER JOIN Doklady ON Souvisejici_doklady.Cislo_dokladu = Doklady.Cislo_dokladu
WHERE (((Souvisejici_doklady.Typ_souvislosti)="PU") AND ((Doklady.Firma) Is Not Null) AND ((Doklady.Datum) Between [parDatumOd1] And [parDatumDo1]))
GROUP BY Doklady.Firma) AS D_01 ON Firmy.Firma = D_01.Firma) LEFT JOIN (SELECT Doklady.Firma, Count(Doklady.Cislo_dokladu) AS PocetDokladu, Sum(DateDiff("d",[Datum_splatnosti],Date())) AS SoucetDniPo
FROM Doklady
WHERE (((Doklady.Datum_splatnosti)<Date()) AND ((Doklady.Zbyva_uhradit)>0) AND ((Doklady.Typ_dokladu)="FV") AND ((Doklady.Datum) Between [parDatumOd1] And [parDatumDo1]))
GROUP BY Doklady.Firma) AS D_02 ON Firmy.Firma = D_02.Firma
WHERE (((Firmy.Odberatel)=True))
ORDER BY Firmy.Firma
Definice názvů indexů a podmínek pro jejich použití
Definice indexů umožňuje definovat názvy jednotlivých indexů. Tyto názvy pak budou vkládány přímo do příslušných polí u kontaktu. Každý název indexu umožňuje nadefinovat podmínky, které musí platit, aby byl daný název indexu vložen do kontaktu. Podmínky se definují do řádků tak, že každý řádek symbolizuje vazbu AND. Pokud jsou dvě podmínky na jednom řádku, symbolizují vazbu OR.
Příklad pro přepočet indexu obratu:
V příkladu jsou definovány názvy indexů takto: 0 - 1999, 2000 - 2999, 3000 - x
Podmínky pro jednotlivé indexy jsou definovány takto: 0 - 1999 (H1 > 0 AND H1 < 2000), 2000 - 2999 (H1 >= 2000 AND H1 < 3000), 3000 - x (H1 >= 3000)
H1 je částka obratu za konkrétní období, kterou vrací dotaz SQL.
Příklad pro přepočet indexu loajality:
Na příkladu je vidět, že pokud bude hodnota H1 (částka obratu za starší období) rovna nule, hodnota H2 (částka obratu za novější období) větší než nula a aktuální index loajality null, tak se do kontaktu vloží index NOVÝ.
Aktualizace indexů
Indexy se u kontaktů aktualizují hromadně nebo jednotlivě.
Při jednotlivé aktualizaci je třeba otevřít detail záznamu a vybrat metodu přepočtu v dialogu, který se zobrazí po stisku tlačítka za polem indexu. Po stisku tlačítka OK se aktualizuje index a zapíše se datum aktuálního indexu.
Při hromadné aktualizaci je třeba spustit dialog Hromadná aktualizace indexů. V sekci Aktualizovat je možno vybrat indexy, které se mají přepočítat. Pokud je zaškrtnuto Vybrat metody přepočtu indexů, je možno vybrat i jednotlivé metody, které se mají pro aktualizaci indexů použít. Pokud nebude tato volba zaškrtnuta, použijí se všechny metody přepočtu pro vybrané indexy.
V Možnostech Vario pro agendu Adresář lze nastavit oprávnění k přepočtu indexů.
Související dokumenty