Přeskočit obsah
For the complete DHIS2 documentation index, see llms.txt.

Analytics

Modul Analytics nabízí nějaký druh lokálních analytických dat, tedy nějaké analytické hodnoty založené na datech uložených v zařízení. V současné době neexistuje žádná integrace s analýzou serverů, ačkoli sdílejí základní pojmy, jako jsou vizualizace, relativní období, relativní orgunity atd.

Agregovaná analytika

Zobrazují analytické hodnoty agregovaným způsobem. Hodnoty mohou pocházet z agregovaných dat nebo dat sledování. Pokud znáte webové analytické nástroje, je tento modul velmi podobný Data Visualizeru (tabulky, grafy, ...).

Raw analytics

Tento modul se řídí podobnými koncepty jako analytický koncový bod ve webovém rozhraní API. Jsou to dva základní parametry, které musí poskytnout analytickému modulu, aby mohl provést vyhodnocení: dimenze a filtry.

Například základní dotaz, který získá počet „1. návštěvy ANC“ (DataElement „fbfJHSPpUQD“) za poslední 3 měsíce (RelativePeriod) a filtrovaný podle organizační jednotky „Ngelehun CHC“ (Absolute OrganisationUnit „DiszpKrYNg8“), bude vypadat takto tento:

d2.analyticsModule().analytics()
        .withDimension(new DimensionItem.DataItem.DataElementItem("fbfJHSPpUQD"))
        .withDimension(new DimensionItem.PeriodItem.Relative(RelativePeriod.LAST_3_MONTHS))
        .withFilter(new DimensionItem.OrganisationUnitItem.Absolute("DiszpKrYNg8"))
        .evaluate();

Modul vrátí objekt Result obsahující buď DimensionalResponse nebo AnalyticsException. Podívejme se na strukturu DimensionalResponse. Pro pohodlí používáme reprezentaci Kotlin, ale reprezentace Java by byla velmi podobná:

DimensionalResponse(
        metadata = mapOf(
            "fbfJHSPpUQD" to MetadataItem.DataElementItem,
            "DiszpKrYNg8" to MetadataItem.OrganisationUnitItem,
            "202108" to MetadataItem.PeriodItem,
            "202109" to MetadataItem.PeriodItem,
            "202110" to MetadataItem.PeriodItem
        ),
        dimensions = listOf(
            Dimension.Data, 
            Dimension.Period
        ),
        dimensionItems = mapOf(
            Dimension.Data to listOf(
                DimensionItem.DataItem.DataElementItem(uid=fbfJHSPpUQD)
            ),
            Dimension.Period to listOf(
                DimensionItem.PeriodItem.Relative(relative=RelativePeriod.LAST_3_MONTHS)
            ),
            Dimension.OrganisationUnit to listOf(
                DimensionItem.OrganisationUnitItem.Absolute(uid=DiszpKrYNg8)
            )
        ),
        filters = listOf(
            "DiszpKrYNg8"
        ),
        values = listOf(
            DimensionalValue(
                dimensions = listOf("fbfJHSPpUQD", "202108"),
                value = "17"
            ),
            DimensionalValue(
                dimensions = listOf("fbfJHSPpUQD", "202109"),
                value = "112"
            ),
            DimensionalValue(
                dimensions = listOf("fbfJHSPpUQD", "202110"),
                value = "20"
            )
        )
    )

Vlastnosti zahrnuté v objektu DimensionalResponse:

  • Metadata: obsahuje mapu id k MetadataItem. ID jsou řetězce, které identifikují dataElements, období (relativní nebo absolutní), organizační jednotky atd. Některé příklady ID jsou "fbfJHSPpUQD", "202108", "LAST_3_MONTHS", "USER_ORGUNIT",... . Účelem této mapy je rychle získat tisknutelnou reprezentaci z libovolného ID použitého v jiných vlastnostech (dimensionItems, filtry nebo hodnoty). Rozhraní MetadataItem obsahuje dvě základní vlastnosti, id a displayName a lze jej snadno přiřadit k základní třídě, abyste získali více informací o DataElement, Indicator, Period atd.
  • Dimenze: uspořádaný seznam dimenzí, ve kterých jsou hodnoty rozčleněny. Ve výše uvedeném příkladu je první dimenze Data, což znamená, že první dimenze ve vlastnosti dimensions v hodnotách patří do dimenze Data. A druhá je Období.
  • DimensionItems: obsahuje mapu položek seskupených podle typu dimenze. Obsahuje položky původně použité k vytvoření dotazu: ve výše uvedeném příkladu bylo období relativní, takže dimenze Období zahrnuje relativní období LAST_3_MONTHS.
  • Filtry: seznam ID, která v dotazu fungují jako filtr.
  • Hodnoty: seznam DimensionalValue. Každá hodnota obsahuje uspořádaný seznam ID, které definují hodnotu. Ve výše uvedeném příkladu hodnota „17“ odpovídá „ANC 1st visit“ („fbfJHSPpUQD“) a „srpen 2021“ („202108“). Pomocí mapy metadat můžete získat další informace z těchto ID.

DimensionItems can be used either as dimensions or as filters. And multiple items of the same dimension can be combined in the same query. For example, this query gets "ANC 1st visit" (DataElement "fbfJHSPpUQD") and "ANC 1-3 Dropout Rate" (Indicator "ReUHfIn0pTQ") disaggregated by the category "Location: Fixed/Outreach" (Category "fMZEcRHuamy") using the options "Fixed" (CategoryOption "qkPbeWaFsnU") and "Outreach" (CategoryOption "wbrDrL2aYEc") within the last 3 months (Relative Period) in the UserOrganisationUnit (Relative OrganisationUnit), classifying the values by data item legendSet and overriding the aggregation type:

d2.analyticsModule().analytics()
        .withDimension(new DimensionItem.DataItem.DataElementItem("fbfJHSPpUQD"))
        .withDimension(new DimensionItem.DataItem.IndicatorItem("ReUHfIn0pTQ"))
        .withDimension(new DimensionItem.CategoryItem("fMZEcRHuamy", "qkPbeWaFsnU"))
        .withDimension(new DimensionItem.CategoryItem("fMZEcRHuamy", "wbrDrL2aYEc"))

        .withFilter(new DimensionItem.PeriodItem.Relative(RelativePeriod.LAST_3_MONTHS))
        .withFilter(new DimensionItem.OrganisationUnitItem.Relative(RelativeOrganisationUnit.USER_ORGUNIT))

        .withLegendStrategy(AnalyticsLegendStrategy.ByDataItem.INSTANCE)

        .withAggregationType(AggregationType.LAST)

        .evaluate();

Hodnotitel ukládá určitá omezení parametrů předávaných jako dimenze nebo filtry (jsou podobné těm, které ukládá analytické webové rozhraní API):

  1. Jako vlastnost dimenze musí být zahrnuta alespoň jedna položka dimenze.
  2. Musí být zahrnuta alespoň jedna položka dimenze data buď jako dimenze, nebo jako filtr.

Dotaz je navíc vyhodnocen podle místních metadat a dat, což ukládá další omezení:

  1. DimensionItems (DataElement, Indicator, OrganisationUnit, ...) musí být staženy do zařízení. Ve výchozím nastavení SDK stahuje všechny datové sady a programy přístupné uživateli a související metadata.
  2. Data musí být stažena do zařízení. Vyhodnocení zohledňuje pouze data uložená v lokální databázi.

Existují tři možnosti, jak definovat strategii legendSet. Třída AnalyticsLegendStrategy je uzavřená třída v Kotlin, takže klíčové slovo INSTANCE musí být připojeno na konec hodnot objektu při kódování v Javě. Příklady kódu:

d2.analyticsModule().analytics()
        .withLegendStrategy(AnalyticsLegendStrategy.ByDataItem.INSTANCE)       // Data items use their own LegendSet
        .withLegendStrategy(AnalyticsLegendStrategy.None.INSTANCE)             // LegendSets are not used
        .withLegendStrategy(new AnalyticsLegendStrategy.Fixed("fqs276KXCXi"))  // The provided LegendSet will be used for all data items

Vizualizační analytika

Modul vizualizace nabízí užitečné metody pro hodnocení objektů vizualizace. Tento engine je implementován nad základním analytickým enginem a v zásadě splňuje dva cíle:

  1. Chcete-li přeložit objekt Visualization do dotazu do nástroje Analytika.
  2. Chcete-li vrátit formátovaný výsledek podle řádků, sloupců a filtrů definovaných ve vizualizaci.

Chcete-li používat objekty vizualizace, musíte je nastavit v části „Analytika“ webové aplikace Nastavení Android. V současné době není možné stahovat vizualizace na vyžádání ze serveru, pouze je lze stáhnout prostřednictvím webové aplikace Nastavení Android.

Jako příklad předpokládejme, že máme vizualizaci s následujícími parametry:

  • Vizualizace ("SwtkWZFhrFQ").
  • Sloupce:
    • Data: dva DataElements (ANC 1. návštěva "fbfJHSPpUQD", ANC 2. návštěva "cYeuwXTCPkU").
    • Kategorie: Fixed Location / Outreach ("fMZEcRHuamy").
  • Řádky:
    • Období: LAST_3_MONTHS.
  • Filtr:
    • Organizační jednotka: Badja ("YuQRtpLP10I").

Očekávaná reprezentace vizualizace by byla asi tato:

Výsledek vizualizace můžeme získat voláním úložiště „vizualizace“ v modulu analýzy. Volitelně můžeme přepsat hodnoty pro Období a Organizační jednotku. To je užitečné pro odhalení filtrů v uživatelském rozhraní, které umožní snadné úpravy výsledků.

d2.analyticsModule().visualizations()
        .withVisualization("SwtkWZFhrFQ")
        [.withPeriods()]
        [.withOrganisationUnits()]
        .evaluate();

Metoda vrátí Result se dvěma možnými hodnotami: GridAnalyticsResponse a AnalyticsResponse. Pojďme se podívat na strukturu GridAnalyticsResponse. Pro pohodlí používáme reprezentaci Kotlin:

GridAnalyticsResponse(
        metadata = mapOf(
            "fbfJHSPpUQD" to MetadataItem.DataElementItem,
            "cYeuwXTCPkU" to MetadataItem.DataElementItem,
            "fMZEcRHuamy" to MetadataItem.CategoryItem,
            "qkPbeWaFsnU" to MetadataItem.CategoryOptionItem,
            "wbrDrL2aYEc" to MetadataItem.CategoryOptionItem,
            "YuQRtpLP10I" to MetadataItem.OrganisationUnitItem,
            "202108" to MetadataItem.PeriodItem,
            "202109" to MetadataItem.PeriodItem,
            "202110" to MetadataItem.PeriodItem
        ),
        headers = GridHeader(
            columns = listOf(
                listOf(
                    GridHeaderItem(id=fbfJHSPpUQD, weight=2),
                    GridHeaderItem(id=cYeuwXTCPkU, weight=2)
                ),
                listOf(
                    GridHeaderItem(id=qkPbeWaFsnU, weight=1),
                    GridHeaderItem(id=wbrDrL2aYEc, weight=1),
                    GridHeaderItem(id=qkPbeWaFsnU, weight=1),
                    GridHeaderItem(id=wbrDrL2aYEc, weight=1)
                )
            ),
            rows = listOf(
                listOf(
                    GridHeaderItem(id=202108, weight=1),
                    GridHeaderItem(id=202109, weight=1),
                    GridHeaderItem(id=202110, weight=1)
                )
            )
        ),
        dimensions = GridDimension(
            columns = listOf(
                Dimension.Data,
                Dimension.Category(uid=fMZEcRHuamy)
            ),
            rows = listOf(
                Dimension.Period
            )
        ),
        dimensionItems = mapOf(
            Dimension.Data to listOf(
                DimensionItem.DataItem.DataElementItem(uid=fbfJHSPpUQD),
                DimensionItem.DataItem.DataElementItem(uid=cYeuwXTCPkU)
            ),
            Dimension.Period to listOf(
                DimensionItem.PeriodItem.Relative(relative=LAST_3_MONTHS)
            ),
            Dimension.Category(uid=fMZEcRHuamy) to listOf(
                DimensionItem.CategoryItem(uid=fMZEcRHuamy, categoryOption=qkPbeWaFsnU),
                DimensionItem.CategoryItem(uid=fMZEcRHuamy, categoryOption=wbrDrL2aYEc)
            ),
            Dimension.OrganisationUnit to listOf(
                DimensionItem.OrganisationUnitItem.Absolute(uid=YuQRtpLP10I)
            )
        ),
        filters = listOf(
            "YuQRtpLP10I"
        ),
        values = listOf(
            listOf(
                GridResponseValue(
                    columns=[fbfJHSPpUQD, qkPbeWaFsnU], 
                    rows=[202108], 
                    value=23
                ),
                GridResponseValue(
                    columns=[fbfJHSPpUQD, wbrDrL2aYEc], 
                    rows=[202108], 
                    value=3
                ),
                GridResponseValue(
                    columns=[cYeuwXTCPkU, qkPbeWaFsnU], 
                    rows=[202108], 
                    value=46
                ),
                GridResponseValue(
                    columns=[cYeuwXTCPkU, wbrDrL2aYEc], 
                    rows=[202108], 
                    value=3
                )
            ),
            listOf(
                GridResponseValue(
                    columns=[fbfJHSPpUQD, qkPbeWaFsnU], 
                    rows=[202109], 
                    value=21
                ),
                GridResponseValue(
                    columns=[fbfJHSPpUQD, wbrDrL2aYEc], 
                    rows=[202109], 
                    value=10
                ),
                GridResponseValue(
                    columns=[cYeuwXTCPkU, qkPbeWaFsnU], 
                    rows=[202109], 
                    value=23
                ),
                GridResponseValue(
                    columns=[cYeuwXTCPkU, wbrDrL2aYEc], 
                    rows=[202109], 
                    value=8
                )
            ),
            listOf(
                GridResponseValue(
                    columns=[fbfJHSPpUQD, qkPbeWaFsnU], 
                    rows=[202110], 
                    value=24
                ),
                GridResponseValue(
                    columns=[fbfJHSPpUQD, wbrDrL2aYEc], 
                    rows=[202110], 
                    value=1
                ),
                GridResponseValue(
                    columns=[cYeuwXTCPkU, qkPbeWaFsnU], 
                    rows=[202110], 
                    value=47
                ),
                GridResponseValue(
                    columns=[cYeuwXTCPkU, wbrDrL2aYEc], 
                    rows=[202110], 
                    value=2
                )
            )
        )
)

Jak vidíme, GridDimensionalResponse je velmi podobná DimensionalResponse s dalšími informacemi o sloupcích a řádcích definovaných ve vizualizaci.

Vlastnosti zahrnuté v objektu GridDimensionalResponse:

  • Metadata: má stejný formát a sleduje účel než v DimensionalResponse.
  • Záhlaví: definuje strukturu záhlaví v tabulce. Každý záznam ve sloupcích/řádcích představuje dimenzi. Váha představuje, na kolik sloupců/řádků se vztahuje. V příkladu má první dimenze ve sloupcích (dataElements) váhu 2, zatímco druhá dimenze (categoryOptions) má váhu 1. Při pohledu na tabulku to lze snadno pochopit.
  • Dimenze: má stejný účel než v DimensionalResponse, ale dimenze jsou seskupeny podle sloupců a řádků.
  • DimensionItems: má stejný formát a sleduje účel než v DimensionalResponse.
  • Filtry: má stejný formát a sleduje účel než v DimensionalResponse.
  • Hodnoty: obsahuje další informace o reprezentaci hodnot. Každá položka v poli "hodnoty" představuje řádek v tabulce. Tato položka je seznam GridResponseValue, který představuje buňku v tabulce. Každá GridResponseValue obsahuje kontextové informace o sloupcích a řádcích, do kterých hodnota patří. Tento formát umožňuje snadno vytisknout výsledek v tabulkovém formátu bez dalšího zpracování.

Podpora Dimenzí

Dimenze Prvek Podpora
Data: Indikátory Yes*
DataElements Ano
Podrobnosti DataElements Ano
Datové položky událostí Ano
Indikátory programu Yes**
DataSets: Četnost zpráv Ne
DataSets: Četnost zpráv na čas Ne
DataSets: Aktuální zprávy Ne
DataSets: Aktuální zprávy na čas Ne
DataSets: Očekávané zprávy Ne
Období: Pevný Ano
Relativní Ano
Organizační jednotka: Pevný Ano
Relativní Ano
Úroveň Ano
Skupiny organizačních jednotek Ano
Jiný: Kategorie (CategoryOptions) Yes***
Sady Skupin Možností Kategorie Ne
Sady skupin organizačních jednotek Ne

*Check the table Indicator support for details.

**Check the table Program indicator support for details.

***In the case of ProgramIndicators, they are only applied in EVENT ProgramIndicators.

Podpora indikátoru

Tato tabulka ukazuje funkce podporované položkou dimenze Indikátor v porovnání s backendovou analýzou.

Typ Prvek Backend Android SDK
Matematický: Závorka Ano Ano
Plus (+) Ano Ano
Mínus (-) Ano Ano
Power (^) Ano Ne
Multiply (*) Ano Ano
Dělit (/) Ano Ano
Procento (%) Ano Ano
Logický: NOT Ano Ano
! Ano Ano
AND Ano Ano
&& Ano Ano
OR Ano Ano
|| Ano Ano
Srovnání: Rovná se (==) Ano Ano
Nerovná se (!=) Ano Ano
GT (>) Ano Ano
LT (<) Ano Ano
GE (>=) Ano Ano
LE (<=) Ano Ano
Literals: null Ano Ano
Funkce: FirstNonNull Ano Ano
Největší Ano Ano
If Ano Ano
IsNotNull Ano Ano
IsNull Ano Ano
Nejméně Ano Ano
Log Ano Ne
Log10 Ano Ne
Subexpression Ano Ne
.aggregationType Ano Ano
.maxDate Ano Ano
.minDate Ano Ano
.periodOffset Ano Ano
.yearToDate Ano Ano
Dimenze: Konstantní Ano Ano
Datový prvek Ano Ano
ProgramAttribute Ano Ano
ProgramDataElement Ano Ano
ProgramIndicator Ano Ano
OrgUnitGroup Ano Ne
ReportingRate Ano Ne
Dny Ano Ano
PeriodInYear Ano Ano
YearlyPeriodCount Ano Ano
N_Brace (indicators) Ano Ne

Podpora indikátoru programu

Tato tabulka ukazuje funkce podporované položkou dimenze ProgramIndicator v porovnání s backendovou analýzou.

Typ Prvek Backend Android SDK
Matematický: Závorka Ano Ano
Plus (+) Ano Ano
Mínus (-) Ano Ano
Power (^) Ano Ne
Multiply (*) Ano Ano
Dělit (/) Ano Ano
Procento (%) Ano Ano
Logický: NOT Ano Ano
! Ano Ano
AND Ano Ano
&& Ano Ano
OR Ano Ano
|| Ano Ano
Srovnání: Rovná se (==) Ano Ano
Nerovná se (!=) Ano Ano
GT (>) Ano Ano
LT (<) Ano Ano
GE (>=) Ano Ano
LE (<=) Ano Ano
Literals: null Ano Ano
Funkce: FirstNonNull Ano Ano
Největší Ano Ano
If Ano Ano
IsNotNull Ano Ano
IsNull Ano Ano
Nejméně Ano Ano
Log Ano Ne
Log10 Ano Ne
PeriodOffset Ano Ne
Contains Ano Ano
ContainsItems Ano Ano
Funkce D2: D2AddDays Ne Ne
D2Ceil Ne Ne
D2Concatenate Ne Ne
D2Condition Ano Ano
D2Count Ano Ano
D2CountIfCondition Ano Ano
D2CountIfValue Ano Ano
D2DaysBetween Ano Ano
D2Floor Ne Ne
D2HasValue Ano Ano
D2Left Ne Ne
D2Length Ne Ne
D2MaxValue Ano Ano
D2MinutesBetween Ano Ano
D2MinValue Ano Ano
D2Modulus Ne Ne
D2MonthsBetween Ano Ano
D2Oizp Ano Ano
D2RelationshipCount Ano Ano
D2Right Ne Ne
D2Round Ne Ne
D2Split Ne Ne
D2Substring Ne Ne
D2ValidatePattern Ne Ne
D2WeeksBetween Ano Ano
D2YearsBetween Ano Ano
D2Zing Ano Ano
D2Zpvc Ano Ano
D2LastEventDate Ne Ne
D2AddControlDigits Ne Ne
D2CheckControlDigits Ne Ne
D2ZScoreWFA Ne Ne
D2ZScoreWFH Ne Ne
D2ZScoreHFA Ne Ne
D2InOrgUnitGroup Ne Ne
D2HasUserRole Ne Ne
Agregační funkce: avg Ano Ne
počet Ano Ne
max Ano Ne
min Ano Ne
percentileCont Ano Ne
stddev Ano Ne
stddevPop Ano Ne
stddevSamp Ano Ne
sum Ano Ne
variance Ano Ne
Proměnné: AnalyticsPeriodEnd Ano Ano
AnalyticsPeriodStart Ano Ano
CreationDate Ano Ano
CurrentDate Ano Ano
CompletedDate Ano Ano
DueDate Ano Ano
EnrollmentCount Ano Ano
EnrollmentDate Ano Ano
EnrollmentStatus Ano Ano
EventStatus Ano Ano
EventCount Ano Ano
ExecutionDate Ano Ano
EventDate Ano Ano
IncidentDate Ano Ano
OrgunitCount Ano Ano
ProgramStageId Ano Ano
ProgramStageName Ano Ano
SyncDate Ano Ano
TeiCount Ano Ano
ValueCount Ano Ano
ZeroPosValueCount Ano Ano
Jiný: Konstantní Ano Ano
ProgramStageElement Ano Ano
ProgramAttribute Ano Ano
PS_EVENTDATE Ano Ano

Aggregation type support

Typ Android SDK
SUM Ano
AVERAGE Ano
AVERAGE_SUM_ORG_UNIT Ano
LAST Ano
LAST_AVERAGE_ORG_UNIT Ano
LAST_IN_PERIOD Ano
LAST_IN_PERIOD_AVERAGE_ORG_UNIT Ano
LAST_LAST_ORG_UNIT Ano
FIRST Ano
FIRST_AVERAGE_ORG_UNIT Ano
FIRST_FIRST_ORG_UNIT Ano
COUNT Ano
STDDEV Ne
VARIANCE Ne
MIN Ano
MIN_SUM_ORG_UNIT Ano
MAX Ano
MAX_SUM_ORG_UNIT Ano
NONE Ne
CUSTOM Ne
VÝCHOZÍ Ne

Tracker line list

This kind of analytics is similar to those obtained through the Line Listing web app. It allows to generate line lists at event or enrollment level. These line list might include data elements, attributes, program indicators, variables and optionally filter those entries by the values in the their columns.

A common use-case is to generate a list of event or enrollments that meet a certain criteria, such as a value within a particular range, or a certain status, or a certain date range.

For example, a query that contains all the ACTIVE enrollments in the program "fbfJHSPpUQD" whose attribute "p4mRWMtCxtB" has a value between 40 and 50 would look like this. Note that the status is included as a filter, so there is not an explicit column for it.

d2.analyticsModule().trackerLineList()
            .withEnrollmentOutput("fbfJHSPpUQD")
            .withFilter(
                TrackerLineListItem.ProgramStatusItem(
                    filters = listOf(
                        EnumFilter.EqualTo(EnrollmentStatus.ACTIVE.name)
                    )
                )
            )
            .withColumn(TrackerLineListItem.OrganisationUnitItem())
            .withColumn(
                TrackerLineListItem.ProgramAttribute(
                    uid = "p4mRWMtCxtB",
                    filters = listOf(
                        DataFilter.GreaterThan("40"),
                        DataFilter.LowerThan("50"),
                    ),
                ),
            )
            .evaluate()

The response is a Result object of TrackerLineListResponse, which has the following structure:

TrackerLineListResponse(
  metadata = mapOf(
      "p4mRWMtCxtB" to MetadataItem.TrackedEntityAttributeItem
  ),
  headers = listOf(
    TrackerLineListItem.OrganisationUnitItem, 
    TrackerLineListItem.ProgramAttribute
  ), 
  filters = listOf(
    TrackerLineListItem.ProgramStatusItem
  ),
  rows = listOf(
    listOf(
      TrackerLineListValue(id = "ouItem", value = "Child 1"),
      TrackerLineListValue(id = "p4mRWMtCxtB", value = "45")
    ),
    listOf(
      TrackerLineListValue(id = "ouItem", value = "Child 2"),
      TrackerLineListValue(id = "p4mRWMtCxtB", value = "49")
    ),
    listOf(
      TrackerLineListValue(id = "ouItem", value = "Child 2"),
      TrackerLineListValue(id = "p4mRWMtCxtB", value = "41")
    )
  )
)

Optionally, it is possible to use a TrackerVisualization object (called EventVisualization in the API) to evaluate a predefined line list. The TrackerVisualization must have the type LINE_LIST. It is also possible to override a specific value.

For example, this query uses the configuration in the TrackerVisualization "s85urBIkN0z" and adds or overrides the column ProgramStatusItem filtering by ACTIVE.

d2.analyticsModule().trackerLineList()
  .withTrackerVisualization("s85urBIkN0z")
  .withColumn(
    TrackerLineListItem.ProgramStatusItem(
      filters = listOf(
        EnumFilter.EqualTo(EnrollmentStatus.ACTIVE.name)
      )
    )
  )
  .evaluate()

In order to use the TrackerVisualization objects, they must be set in the "Analytics" section of the Android Settings webapp. Currently, it is not possible to download on-demand visualizations from the server, just to downloaded through the Android Settings webapp.

Seznam událostí

They are event-based analytics. If you are familiar with web analytic tools, it is very similar to Event Reports (line list). It is a simplified case of Tracker Line List.

A common use-case is to generate an event line list of a repeatable stage in the context of a particular TEI in order to show the evolution of a particular value across the events.

Předpokládejme například, že máme opakovatelnou fázi se dvěma datovými prvky (výška a váha) a jedním indikátorem založeným na těchto hodnotách (BMI, index tělesné hmotnosti). Rádi bychom ukázali vývoj těchto hodnot napříč událostmi

d2.analyticsModule().eventLineList()
        .byProgramStage().eq("stage_id")
        .byTrackedEntityInstance().eq("tei_id")
        .withDataElement("height_id")
        .withDataElement("weight_id")
        .withProgramIndicator("BMI_id")
        .evaluate();

Výsledkem by byl seznam událostí s vyhodnocenými hodnotami (datový prvek a indikátory) a také některé užitečné vlastnosti displayName pro zobrazení výsledku v tabulce nebo grafu.