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íMetadataItemobsahuje dvě základní vlastnosti,idadisplayNamea 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 vlastnostidimensionsv hodnotách patří do dimenzeData. 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):
- Jako vlastnost dimenze musí být zahrnuta alespoň jedna položka dimenze.
- 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í:
- 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.
- 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:
- Chcete-li přeložit objekt Visualization do dotazu do nástroje Analytika.
- 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áGridResponseValueobsahuje 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.