Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Transformujte data Microsoft Fabric na užitečné přehledy pomocí agregací GraphQL. Místo načítání tisíců jednotlivých záznamů a jejich zpracování ve vaší aplikaci můžete požádat Fabric, aby seskupila data a vypočítala souhrny na straně serveru – výrazně zlepšuje výkon a snižuje přenos dat.
Agregace GraphQL fungují jako operace SQL GROUP BY, ale prostřednictvím rozhraní GraphQL API. Můžete spočítat položky na kategorii, vypočítat celkové výnosy, najít průměrné hodnocení nebo určit minimální/maximální hodnoty v tabulkách lakehouse a skladu – to vše v jednom efektivním dotazu.
Klíčové výhody:
- Zpracování na straně serveru: Využijte optimalizované dotazovací stroje Fabric pro výpočty
- Zmenšený přenos dat: Získání souhrnů místo nezpracovaných záznamů
- Efektivita jednoho dotazu: Nahrazení více operací na straně klienta jednou agregací
V této příručce se dozvíte, jak vytvářet agregační dotazy pomocí praktického příkladu elektronického obchodování, který pokrývá vše od základních seskupení až po pokročilé funkce a důležitá omezení.
Kdo by měl používat agregace
Agregace GraphQL jsou cenné pro:
- Vývojáři aplikací vytvářející vlastní řídicí panely a analytické aplikace, které potřebují souhrnná data Fabric
- Datoví inženýři vytvářející datová rozhraní API, která obsluhují předem vypočítané metriky a klíčové ukazatele výkonu z objektů Fabric Lakehouse a skladů
- Vývojáři BI vytvářejí vlastní analytická řešení, která doplňují Power BI agregovanými daty Fabric
- Vývojáři integračních řešení vytvářející aplikace a pracovní postupy, které potřebují souhrnné statistiky z Fabricu
- Datoví analytici vytvářejí samoobslužná analytická řešení, která vyžadují seskupené a agregované přehledy z dat Fabric.
Pokud načítáte data pro zobrazení grafů, výpočtu součtů, generování sestav nebo analýzy trendů, můžou agregace výrazně zlepšit výkon vaší aplikace a snížit přenos dat.
Běžné obchodní otázky, na které můžete odpovědět
Agregace GraphQL excelují při odpovídání na analytické otázky týkající se dat Fabric:
- Počítání a seskupení: "Kolik produktů je v každé kategorii?" nebo "Kolik objednávek za měsíc?"
- Finanční výpočty: "Jaké jsou celkové výnosy podle oblasti?" nebo "Průměrná hodnota objednávky podle segmentu zákazníka?"
- Metriky výkonu: "Co je nejvyšší a nejnižší hodnocení produktů v každé kategorii?"
- Přehledy zákazníků: "Kolik jedinečných zákazníků tento měsíc navštívilo?" nebo "Která města mají nejaktivnější uživatele?"
Tyto dotazy jsou ideální pro vytváření řídicích panelů, generování sestav a napájení analytických aplikací, kde potřebujete souhrnná data spíše než jednotlivé záznamy.
Požadavky
Před použitím agregací GraphQL se ujistěte, že máte:
- Pracovní prostor Microsoft Fabric s příslušnými oprávněními
- Jezero nebo sklad s tabulkami obsahujícími data, která chcete agregovat
- Rozhraní API pro koncový bod GraphQL nakonfigurovaný pro vaše položky fabric.
- Základní znalost syntaxe dotazů GraphQL
Kde tyto dotazy spustit
Rychlý start: Pomocí editoru API pro GraphQL ve vašem pracovním prostoru Fabric otestujte všechny příklady v tomto článku. Editor poskytuje zkoumání schématu, ověřování dotazů a okamžité výsledky.
Pro aplikace: Odesílat dotazy jako požadavky HTTP POST do koncového bodu GraphQL pomocí libovolné klientské knihovny GraphQL pro váš programovací jazyk.
Pro vývoj: Nástroje jako GraphQL Playground, Insomnia nebo Postman fungují dobře pro vývoj a testování dotazů.
Poznámka:
Příklady v tomto článku jsou připravené ke zkopírování a spuštění, jakmile nakonfigurujete rozhraní API pro koncový bod GraphQL. Některé příklady jsou zkráceny pro stručnost a můžou potřebovat přizpůsobení pro vaše konkrétní schéma.
Ukázkový scénář: Data elektronického obchodování ve Fabric
Pro účely této příručky používáme fiktivní datovou sadu elektronického obchodování uloženou v Microsoft Fabric Lakehouse nebo skladu. Tento scénář ukazuje, jak můžete analyzovat maloobchodní data pomocí agregací GraphQL.
V tomto příkladu patří údaje o produktech do kategorií, přičemž každá Product obsahuje pole, jako je cena a hodnocení (číselné hodnoty ideální pro agregaci) a vztah k Category. Když tyto tabulky zveřejníte prostřednictvím rozhraní API Fabric pro GraphQL, vygenerované schéma může vypadat takto:
type Category {
id: ID!
name: String!
products: [Product!]! # one-to-many relationship
}
type Product {
id: Int!
name: String!
price: Float!
rating: Int!
category_id: Int!
category: Category! # many-to-one relationship
}
type ProductResult { # automatically generated, adding groupBy capabilities
items: [Product!]!
endCursor: String
hasNextPage: Boolean!
groupBy(fields: [ProductScalarFields!]): [ProductGroupBy!]!
}
type Query {
products(
first: Int
after: String
filter: ProductFilterInput
orderBy: ProductOrderByInput
): ProductResult!
}
V tomto příkladu products může dotaz vrátit buď normální seznam položek, nebo pokud groupBy se používá agregované výsledky. Pojďme se zaměřit na používání groupBy funkcí a agregace tohoto dotazu.
Poznámka:
Ve stejném dotazu nemůžete načíst normální i seskupené výsledky. Další podrobnosti najdete v tématu Agregace a nezpracované položky se vzájemně vylučují.
Dostupné agregační funkce
Přesné dostupné funkce závisí na implementaci, ale mezi běžné agregační operace patří:
- count – Počet záznamů (nebo nenulových hodnot pole) ve skupině.
- sum – součet všech hodnot v číselném poli
- avg – Průměr (průměr) hodnot v číselném poli.
- min – Minimální hodnota v poli.
- max – Maximální hodnota v poli.
V agregacích GraphQL zadáte název funkce a cílové pole, jak je znázorněno v příkladech count(field: id)atd sum(field: price). Každá funkce vrátí objekt, který umožňuje vybrat jedno nebo více polí, na která byla použita.
Poznámka:
V rozhraní API Microsoft Fabric pro GraphQL fungují agregační operace jako count, sum, avgmina max v současné době pracují pouze na číselných nebo kvantitativních polích (celá čísla, float). Nemůžete je použít přímo u textových polí nebo polí kalendářních dat. Nemůžete například vypočítat "průměr" pole řetězce. Podpora provádění agregací u jiných datových typů (například zřetězení textu nebo lexikální min/max) může být přidána v budoucích aktualizacích Fabric.
Základy agregačních dotazů
Pokud chcete provést agregaci v rozhraní GraphQL API Fabric, zadáte v dotazu argument groupBy, který definuje, jak seskupit data, a ve výsledku zahrnout agregační pole (například počty nebo součty). Modul GraphQL Fabric tyto dotazy efektivně zpracovává vůči podkladovým tabulkám lakehouse nebo datového skladu a vrací seznam seskupených záznamů s jejich klíčovými hodnotami a vypočítanými agregovanými metrikami.
Příklad 1: Počet produktů na kategorii
Pojďme produkty seskupit podle jejich kategorie a spočítat, kolik produktů je v každé skupině. Dotaz může vypadat takto:
query {
products {
groupBy(fields: [category_id])
{
fields {
category_id # grouped key values
}
aggregations {
count(field: id) # count of products in each group (count of "id")
}
}
}
}
V tomto dotazu:
-
groupBy(fields: [category_id])říká modulu Fabric GraphQL, aby seskupil produkty podlecategory_idpole. - Ve výběru výsledků požadujete
groupacountagregát na poliid. Počítáníidefektivně počítá produkty v dané skupině.
Jak výsledek vypadá: Každá položka v odpovědi představuje jednu skupinu kategorií. Objekt groupBy obsahuje klíč seskupení. Obsahuje hodnotu category_id a count { id } poskytuje počet produktů v dané kategorii:
{
"data": {
"products": {
"groupBy": [
{
"fields": {
"category_id": 1
},
"aggregations": {
"count": 3
}
},
{
"fields": {
"category_id": 2
},
"aggregations": {
"count": 2
}
},
// Sample shortened for brevity
]
}
}
}
Tento výstup nám říká, že kategorie 1 má tři produkty, kategorie 2 má 2 atd.
Příklad 2: Součet a průměr
V jednom dotazu můžeme požádat o více metrik agregace. Předpokládejme, že chceme pro každou kategorii, celkovou cenu všech produktů a průměrné hodnocení:
query {
products {
groupBy(fields: [category_id])
{
fields {
category_id
}
aggregations {
count(field: id) # number of products in the category
sum(field: price) # sum of all product prices in the category
avg(field: rating) # average rating of products in the category
}
}
}
}
Tento dotaz by vrátil následující výsledky:
{
"data": {
"products": {
"groupBy": [
{
"fields": {
"category_id": 1
},
"aggregations": {
"count": 3,
"sum": 2058.98,
"avg": 4
}
},
{
"fields": {
"category_id": 2
},
"aggregations": {
"count": 2,
"sum": 109.94,
"avg": 4
}
},
...
]
}
}
}
Každý objekt skupiny zahrnuje kategorii a vypočítané agregace, jako je počet produktů, součet jejich cen a průměrné hodnocení v dané kategorii.
Příklad 3: Seskupení podle více polí
Seskupení můžete seskupit podle více než jednoho pole, abyste získali seskupení na více úrovních. Pokud má váš produkt například pole rating, můžete seskupit podle category_id a rating a poté vypočítat průměr price pro skupinu.
query {
products {
groupBy(fields: [category_id, rating])
{
fields {
category_id
rating
}
aggregations {
avg(field: price)
}
}
}
}
To by seskupilo produkty podle jedinečné kombinace kategorií a hodnocení, jak je znázorněno níže:
{
"fields": {
"category_id": 10,
"rating": 4
},
"aggregations": {
"avg": 6.99
}
}
A tak dále pro každou dvojici hodnocení kategorií v datech.
Návod
Při seskupování podle více polí se explicitní řazení stává zvlášť důležité pro předvídatelné výsledky. Viz Řazení seskupených výsledků vyžaduje explicitní řazení.
Příklad 4: Použití odlišných hodnot
Funkce agregace podporuje jedinečný modifikátor pro počítání nebo zvažování jedinečných hodnot. Pokud například chcete zjistit, kolik různých kategorií existuje v kolekci produktů, můžete použít odlišný počet:
query {
products {
groupBy(fields: [category_id])
{
fields {
category_id
}
aggregations {
count(field: id, distinct: true)
}
}
}
}
Tento dotaz vrátí výsledek s počtem jedinečných produktů pro každou kategorii. Výsledek by vypadal takto:
{
"data": {
"products": {
"groupBy": [
{
"fields": {
"category_id": 1
},
"aggregations": {
"count": 3
}
},
{
"fields": {
"category_id": 2
},
"aggregations": {
"count": 2
}
},
...
]
}
}
}
Návod
Další pokyny k tomu, kdy a jak se správně používají, najdete v tématu Vhodné použití jedinečné agregace.
Příklad 5: Použití aliasů
Můžete vytvořit aliasy pro agregace, které poskytují smysluplné a snadno pochopitelné názvy agregovaných výsledků. Agregaci můžete například pojmenovat v předchozím příkladu, protože distinctProductCategoryCount počítá různé kategorie produktů, abyste lépe porozuměli výsledkům:
query {
products {
groupBy(fields: [category_id])
{
fields {
category_id
}
aggregations {
distinctProductCategoryCount: count(field: id, distinct: true)
}
}
}
}
Výsledek je podobný, ale smysluplnější s vlastním aliasem:
{
"data": {
"products": {
"groupBy": [
{
"fields": {
"category_id": 1
},
"aggregations": {
"distinctProductCategoryCount": 3
}
},
{
"fields": {
"category_id": 2
},
"aggregations": {
"distinctProductCategoryCount": 2
}
},
...
]
}
}
}
Příklad 6: Použití having klauzule
Agregované výsledky je možné filtrovat pomocí having klauzule. Předchozí příklad můžete například upravit tak, aby vracely jenom výsledky větší než dvě:
query {
products {
groupBy(fields: [category_id])
{
fields {
category_id
}
aggregations {
distinctProductCategoryCount: count(field: id, distinct: true, having: {
gt: 2
})
}
}
}
}
Výsledek vrátí jednu hodnotu s jedinou kategorií s více než dvěma produkty:
{
"data": {
"products": {
"groupBy": [
{
"fields": {
"category_id": 1
},
"aggregations": {
"distinctProductCategoryCount": 3
}
}
]
}
}
}
Omezení a osvědčené postupy
Pokud používáte agregace v rozhraní API Microsoft Fabric pro GraphQL, je potřeba zvážit důležitá pravidla a omezení. Pomocí těchto osvědčených postupů a porozumění těmto omezením můžete vytvářet efektivní agregační dotazy GraphQL, které poskytují výkonné přehledy a zároveň zajišťují předvídatelné výsledky, zejména při práci s velkými datovými sadami nebo implementací stránkování.
Funkce agregace je užitečná pro případy použití sestav a analýz, ale vyžaduje pečlivé strukturování dotazů. Vždy pečlivě zkontrolujte, jestli jsou pole groupBy v souladu s vybranými výstupními poli, přidejte řazení pro předvídatelné pořadí, zejména při stránkování, a pro datové typy používejte jedinečné a agregační funkce.
Následující části obsahují tři klíčové oblasti, které je potřeba pochopit: Agregace a nezpracované položky se vzájemně vylučují, seskupené výsledky řazení vyžadují explicitní řazení a vhodné použití jedinečné agregace.
Agregace a nezpracované položky se vzájemně vylučují
V současné době nemůžete načíst souhrnná data seskupená i nezpracovaný seznam položek ve stejném dotazu současně. Při použití groupBy v dotazu se rozhraní API přepne do "režimu agregace" a vrátí pouze seskupené výsledky. Tento návrh zachovává jednoznačnou strukturu odpovědí – každý dotaz je buď v "režimu agregace", nebo "režim položek seznamu", ale nikdy obojí.
Jak to funguje v praxi:
Dotaz products(...) vrátí jednu ze dvou možností:
- Seznam jednotlivých produktů (pokud
groupByse nepoužívá) - Seznam seskupených výsledků s agregovanými daty (při použití
groupBy)
Všimněte si v agregovaných příkladech výše, že odpověď obsahuje groupBy a agreguje pole, ale chybí obvyklý items seznam produktů.
Co se stane, když zkusíte obojí:
Pokud se pokusíte požádat o normální položky i skupiny ve stejném dotazu, modul GraphQL vrátí chybu nebo tento výběr nepovolí.
Alternativní řešení:
Pokud potřebujete nezpracovaná i agregovaná data, spusťte dva samostatné dotazy: jeden pro nezpracovaná data a jeden pro agregovaná data. Tento přístup poskytuje úplnou kontrolu nad datovými sadami a dá se optimalizovat na základě konkrétních požadavků na ukládání do mezipaměti a výkon.
Řazení seskupených výsledků vyžaduje explicitní řazení.
Agregované skupiny se vrátí nepředvídatelným pořadím, pokud nezadáte explicitní řazení. Vždy používejte orderBy nebo sort argumenty, abyste zajistili konzistentní a smysluplné výsledky.
Proč je důležité explicitní řazení:
-
Nepředvídatelné výchozí pořadí: Bez
orderBy, mohou se skupiny vrátit v libovolném pořadí určeném databází. - Požadavky na stránkování: Stabilní pořadí řazení je nezbytné pro konzistentní chování stránkování.
- Uživatelské prostředí: Předvídatelné řazení zlepšuje interpretaci dat a spolehlivost aplikací.
Pokud je nutné zadat řazení:
-
V polích groupBy není žádný primární klíč: Pokud pole seskupení neobsahují primární klíč, musíte přidat
orderBy - Ne jedinečné klíče seskupení: Při seskupování podle polí, jako jsou názvy kategorií nebo kalendářní data
- Scénáře stránkování: Kdykoli plánujete použít stránkování pomocí limitu/offsetu nebo kurzoru
Osvědčené postupy:
- Seřazení podle agregačních hodnot (např. nejvyššího počtu jako první) pro analytické přehledy
- Použití abecedního řazení pro seskupování podle kategorií
- Kombinování více kritérií řazení pro komplexní potřeby řazení
Vhodné použití jedinečné agregace
distinct Modifikátor eliminuje duplicitní hodnoty před provedením agregací a zajišťuje přesné výpočty, když data obsahují duplicity.
Běžné případy použití:
-
Počet jedinečných položek:
count(field: category_id, distinct: true)spočítá, kolik různých kategorií existuje v každé skupině. -
Deduplikované součty:
sum(field: price, distinct: true)přidá každou jedinečnou cenovou hodnotu pouze jednou na skupinu. - Scénáře spojení: Když se produkty zobrazují vícekrát kvůli spojení tabulek, použití 'distinct' zajistí, že se každá položka počítá pouze jednou.
Kdy použít jedinečné:
- Vaše data obsahují legitimní duplicity, které by zkreslily výpočty.
- Pracujete s připojenými tabulkami, které vytvářejí duplicitní řádky.
- Potřebujete spočítat jedinečné hodnoty místo celkového počtu výskytů.
Důležité informace o výkonu:
Odlišné operace vyžadují další zpracování. Používejte pouze v případě potřeby přesnosti dat.