1. Skupinové dotazy (Group by)

    Článek: AN0001880Aktualizováno:: 03.10.2018

    V této kapitole si ukážeme, jak vytvořit přehled sumárních dat s možností zobrazení detailu záznamů, z nichž sumární data sestávají.

    Pokud potřebujeme souhrnná data z některé třídy, použijeme dotaz s klauzulí GROUP BY. V níže uvedeném příkladu nás bude zajímat počet otevřených incidentů po jednotlivých řešitelích. Data jsou uložena ve třídě s kódem incident, status incidentu je odkazem do třídy incident-status a řešitel je odkazem do interní třídy person.

    Cílem je, aby výsledný dotaz uváděl v řádcích řešitele a ve sloupcích nové incidenty, otevřené incidenty a celkový počet incidentů. Zároveň si ukážeme, jak zajistit, aby klikem na souhrnná data v dotazu uživatel mohl zobrazit rozpad na jednotlivé záznamy, z nichž je souhrn vytvořen.

     Vytvoříme dotaz, který kromě jména řešitele bude vracet i id daného řešitele (id uživatele ObjectGears). Tuto informaci použijeme při tvorbě odkazu na rozpad incidentů.

    Toto je SQL definice dotazu:

    SELECT ai.id pid, ai.fullname,
     SUM( status_New) status_New,
     SUM( status_Open) status_Open,  sum( status_New) +
     SUM( status_Open) Total from
    (
     SELECT p.id, p.fullname,
      CASE WHEN i.status =  1 THEN 1 ELSE 0 END status_New,
      CASE WHEN i.status = 2 THEN 1 ELSE 0 END status_Open  FROM {{: class.incident :}} i
      INNER JOIN {{: class.incident-status :}} ins ON ins.id = i.status
      INNER JOIN person p ON p.id = i.solver
     WHERE i.status in (1, 2) AND
      i.deleted IS NULL
    ) ai
    GROUP BY ai.id, ai.fullname

    Výsledný dotaz pak bude vypadat takto: 

    Zobrazíme sloupce dotazu a provedeme tyto úpravy:

    1. Sloupec s id uživatele zobrazovat nechceme. Otevřeme tedy detail sloupce pid a nastavíme mu vlastnost Zobrazit v seznamu na Nezaškrtnuto.
    2. Názvy sloupců dotazu chceme zobrazovat dle lokalizace uživatele. Otevřeme tedy detail příslušných sloupců dotazu a nastavíme nové názvy v příslušných jazykových variantách.
    3. Jméno řešitele by mělo sloužit jako odkaz na rozpad záznamů. Oteřeme tedy detail sloupce solver a nastavíme tyto vlastnosti:
      • Použít jako odkaz: Zaškrtnuto
      • Formát odkazu: './Datas.aspx?CId=430&filter=solverEQ' + Cstring(Column('pid')) + '~AND(statusEQ1~ORstatusEQ2~)'
      • Umožnit otevření odkazu v seznamu: Zaškrtnuto

    Výše uvedený Formát odkazu je použit pro třídu id 504, která obsahuje sloupec id 6223 (solver) a 6224 (status). Dokumentace k syntaxi filtru je popsána v kapitole URL filtr.

    Upravený dotaz pak bude vypadat takto:

    Kliknutí na jméno uživatele následně povede na otevření seznamu incidentů se zafiltrováním na daného uživatele a stavy incidentů.

     

     

     

×