Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Microsoft Fabric-adatokat a GraphQL-aggregációkkal végrehajtható elemzésekká alakíthatja. Ahelyett, hogy több ezer rekordot kér le és dolgoz fel az alkalmazásban, megkérheti a Fabricet, hogy csoportosítsa az adatokat, és számítsa ki az összegzéseket kiszolgálóoldalon – jelentősen javítva a teljesítményt és csökkenti az adatátvitelt.
A GraphQL-aggregációk az SQL GROUP BY-műveletekhez hasonlóan működnek, de a GraphQL API-n keresztül. Kategóriánként megszámlálhatja az elemeket, kiszámíthatja a bevétel összegét, megkeresheti az átlagos értékeléseket, vagy meghatározhatja a minimális/maximális értékeket a lakehouse- és raktártáblákban – mindezt egyetlen, hatékony lekérdezésben.
Főbb előnyök:
- Kiszolgálóoldali feldolgozás: Használja ki a Fabric optimalizált lekérdezési motorjait számításokhoz
- Csökkentett adatátvitel: Összegzések lekérése nyers rekordok helyett
- Egyetlen lekérdezés hatékonysága: Több ügyféloldali művelet lecserélése egy összesítésre
Ez az útmutató bemutatja, hogyan hozhat létre összesítő lekérdezéseket egy gyakorlati e-kereskedelmi példán keresztül, amely az alapszintű csoportosítástól a speciális függvényekig és a fontos korlátozásokig mindent lefed.
Kinek érdemes aggregációkat használnia?
A GraphQL-aggregációk értékesek a következőkhöz:
- Az alkalmazásfejlesztők olyan egyéni irányítópultokat és elemzési alkalmazásokat készítenek, amelyek összesített Fabric-adatokat igényelnek.
- Az adatmérnökök olyan adat API-kat hoznak létre, amelyek előre kiszámított metrikákat és KPI-ket szolgálnak ki Fabric lakehouse-okból és raktárakból
- A BI-fejlesztők olyan egyéni elemzési megoldásokat készítenek, amelyek a Power BI-t összesített Háló-adatokkal egészítik ki
- Integrációs fejlesztők olyan alkalmazásokat és munkafolyamatokat hoznak létre, amelyek összefoglaló statisztikákat igényelnek a Fabricből
- Az adatelemzők olyan önkiszolgáló elemzési megoldásokat készítenek, amelyek csoportosított, összesített elemzéseket igényelnek a Fabric-adatokból
Ha adatokat kér le diagramok megjelenítéséhez, összeg kiszámításához, jelentések létrehozásához vagy trendek elemzéséhez, az összesítések jelentősen javíthatják az alkalmazás teljesítményét, és csökkenthetik az adatátvitelt.
Gyakori üzleti kérdések, amelyek megválaszolhatók
A GraphQL-aggregációk kiválóan válaszolnak a Fabric-adatokkal kapcsolatos elemzési kérdésekre:
- Számlálás és csoportosítás: "Hány termék van az egyes kategóriákban?" vagy "Hány megrendelés havonta?"
- Pénzügyi számítások: "Mi a teljes bevétel régiónként?" vagy "Átlagos rendelési érték ügyfélszegmens szerint?"
- Teljesítménymetrikák: "Mi az egyes kategóriák legmagasabb és legalacsonyabb besorolású terméke?"
- Ügyfélelemzések: "Hány egyedi ügyfél látogatott el ebben a hónapban?" vagy "Mely városokban vannak a legaktívabb felhasználók?"
Ezek a lekérdezések ideálisak irányítópultok létrehozásához, jelentések létrehozásához és elemzési alkalmazások bekapcsolásához, ahol az egyes rekordok helyett összegzett adatokra van szükség.
Előfeltételek
A GraphQL-aggregációk használata előtt győződjön meg arról, hogy a következőkkel rendelkezik:
- Megfelelő engedélyekkel rendelkező Microsoft Fabric-munkaterület
- Egy tóház vagy raktár az összesíteni kívánt adatokat tartalmazó táblákkal
- A Fabric-elemekhez konfigurált GraphQL-végponthoz készült API
- A GraphQL lekérdezési szintaxisának alapszintű ismerete
A lekérdezések futtatásának helye
Rövid útmutató: A Cikk összes példájának teszteléséhez használja a GraphQL-szerkesztő API-t a Fabric-munkaterületen. A szerkesztő sémafeltárást, lekérdezésérvényesítést és azonnali eredményeket biztosít.
Alkalmazások esetén: Lekérdezések küldése HTTP POST-kérésekként a GraphQL-végpontra, bármely GraphQL-ügyfélkódtár használatával a programozási nyelvhez.
Fejlesztéshez: Az olyan eszközök, mint a GraphQL Playground, az Insomnia vagy a Postman jól használhatók a lekérdezések fejlesztéséhez és teszteléséhez.
Megjegyzés:
A cikkben szereplő példák a GraphQL-végpont API-jának konfigurálását követően másolhatók és futtathatók. Néhány példa rövidítve van a rövidítéshez, és szükség lehet az adott sémához való alkalmazkodásra.
Példaforgatókönyv: E-kereskedelmi adatok a Fabricben
Ebben az útmutatóban a Microsoft Fabric lakehouse-ban vagy -raktárban tárolt fiktív e-kereskedelmi adatkészletet használjuk. Ez a forgatókönyv bemutatja, hogyan elemezheti a kiskereskedelmi adatokat GraphQL-aggregációk használatával.
Ebben a példában a termékadatok kategóriákhoz tartoznak, amelyek mindegyike Product olyan mezőket tartalmaz, mint az ár és az értékelés (az összesítéshez tökéletes numerikus értékek), valamint egy kapcsolattal Category. Ha ezeket a táblákat a Fabric GRAPHQL-hez készült API-ján keresztül teszi elérhetővé, a létrehozott séma a következőképpen nézhet ki:
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!
}
Ebben a példában a products lekérdezés visszaadhatja az elemek normál listáját, vagy ha groupBy használják, összesített eredményeket. Koncentráljunk a groupBy lekérdezés összesítési funkcióinak használatára.
Megjegyzés:
Nem lehet beolvasni a normál elemeket és a csoportosított eredményeket ugyanabban a lekérdezésben. További részletekért lásd: Az összesítés és a nyers elemek kölcsönösen kizárják egymást.
Elérhető összesítési függvények
A pontos elérhető függvények a megvalósítástól függenek, de a gyakori összesítési műveletek a következők:
- count – A csoport rekordjainak száma (vagy egy mező nem null értékű értékei).
- sum – Egy numerikus mező összes értékének összege.
- avg – Egy numerikus mező értékeinek átlaga (középértéke).
- min – Minimális érték egy mezőben.
- max – Maximális érték egy mezőben.
A GraphQL-aggregációkban meg kell adnia a függvény nevét és a célmezőt, ahogy a példákban count(field: id), sum(field: price) stb. látható. Minden függvény egy objektumot ad vissza, amely lehetővé teszi egy vagy több mező kiválasztását.
Megjegyzés:
A Microsoft Fabric GraphQL-hez készült API-jában az aggregációs műveletek, például counta , sum, avgminés max jelenleg csak numerikus vagy mennyiségi mezőkön (egész számok, lebegőpontos értékek) működnek. Közvetlenül nem használhatja őket szöveg- vagy dátummezőkön. Például egy sztringmező "átlagát" nem lehet kiszámítani. Más adattípusok (például szövegösszefűzés vagy lexikográfiai min/max) összesítéseinek támogatása a Fabric későbbi frissítéseiben is lehetséges.
Az aggregációs lekérdezés alapjai
Ha a Fabric GraphQL API-jában szeretne összesítést végezni, a lekérdezésben meg kell adnia egy groupBy argumentumot, amely meghatározza az adatok csoportosításának módját, és összeadási mezőket (például darabszámokat vagy összegeket) kér az eredményben. A Fabric GraphQL-motorja hatékonyan dolgozza fel ezeket a lekérdezéseket az alapul szolgáló lakehouse- vagy raktártáblákon, és visszaadja a csoportosított rekordok listáját a fő értékekkel és a kiszámított összesített metrikákkal.
1. példa: Termékek száma kategóriánként
Csoportosítsuk a termékeket a kategóriájuk szerint, és számoljuk meg, hogy hány termék van az egyes csoportokban. A lekérdezés a következőképpen nézhet ki:
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")
}
}
}
}
Ebben a lekérdezésben:
-
groupBy(fields: [category_id])A Fabric GraphQL-motor a termékek mező szerinti csoportosítását kéri.category_id - Az eredménykiválasztásban kérje a
groupés acountösszesítést aidmezőn. A számlálásidhatékonyan megszámolja az adott csoportban lévő termékeket.
Az eredmény a következőképpen néz ki: A válasz minden eleme egy kategóriacsoportot jelöl. Az groupBy objektum tartalmazza a csoportosítási kulcsot. Itt szerepel az category_id érték, és count { id } megadja az adott kategóriába tartozó termékek számát:
{
"data": {
"products": {
"groupBy": [
{
"fields": {
"category_id": 1
},
"aggregations": {
"count": 3
}
},
{
"fields": {
"category_id": 2
},
"aggregations": {
"count": 2
}
},
// Sample shortened for brevity
]
}
}
}
Ez a kimenet azt jelzi, hogy az 1. kategóriának három terméke van, a 2. kategóriának 2 és így tovább.
2. példa: Összeg és átlag
Egy lekérdezésben több aggregációs metrikát is lekérhetünk. Tegyük fel, hogy minden kategóriához az összes termék teljes árát és az átlagos minősítést szeretnénk:
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
}
}
}
}
Ez a lekérdezés a következő eredményeket adja vissza:
{
"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
}
},
...
]
}
}
}
Minden csoportobjektum tartalmazza a kategóriát és a kiszámított összesítéseket, például a termékek számát, az árak összegét és az adott kategória átlagos minősítéseit.
3. példa: Csoportosítás több mező szerint
Több mező szerint csoportosítva többszintű csoportosítást kaphat. Ha például a terméknek van egy rating mezője, akkor csoportosíthat mind category_id, mind rating szerint, majd kiszámíthatja a csoport átlagát price alapján.
query {
products {
groupBy(fields: [category_id, rating])
{
fields {
category_id
rating
}
aggregations {
avg(field: price)
}
}
}
}
Ez a kategóriák és minősítések egyedi kombinációja alapján csoportosítaná a termékeket az alábbiak szerint:
{
"fields": {
"category_id": 10,
"rating": 4
},
"aggregations": {
"avg": 6.99
}
}
És így tovább az összes kategória-minősítési pár esetében az adatokban.
Jótanács
Ha több mező szerint csoportosít, a explicit rendezés különösen fontos lesz a kiszámítható eredmények szempontjából. Lásd : A csoportosított eredmények rendezése explicit rendezést igényel.
4. példa: Különböző adatok használata
Az aggregációs funkció egy különálló módosító használatát támogatja az egyedi értékek megszámlálásához vagy figyelembe véveéhez. Ha például meg szeretné tudni, hogy hány különböző kategória létezik a termékgyűjteményben, használhatja a különböző darabszámokat:
query {
products {
groupBy(fields: [category_id])
{
fields {
category_id
}
aggregations {
count(field: id, distinct: true)
}
}
}
}
Ez a lekérdezés egy eredményt ad vissza az egyes kategóriákhoz tartozó egyedi termékek számával. Az eredmény a következőképpen nézne ki:
{
"data": {
"products": {
"groupBy": [
{
"fields": {
"category_id": 1
},
"aggregations": {
"count": 3
}
},
{
"fields": {
"category_id": 2
},
"aggregations": {
"count": 2
}
},
...
]
}
}
}
Jótanács
Ha további útmutatást szeretne a különböző aggregációk megfelelő használatáról, olvassa el a különböző összesítések megfelelő használatát ismertető témakört.
5. példa: Aliasok használata
Létrehozhat aliasokat az összesítésekhez, hogy érthető és könnyen érthető neveket biztosítson az összesített eredményekhez. Például az előző példában elnevezheti az összesítést distinctProductCategoryCount-nek, mivel az eltérő termékkategóriák darabszámát számolja, hogy jobban megértse az eredményeket.
query {
products {
groupBy(fields: [category_id])
{
fields {
category_id
}
aggregations {
distinctProductCategoryCount: count(field: id, distinct: true)
}
}
}
}
Az eredmény az egyéni aliashoz hasonló, de érthetőbb:
{
"data": {
"products": {
"groupBy": [
{
"fields": {
"category_id": 1
},
"aggregations": {
"distinctProductCategoryCount": 3
}
},
{
"fields": {
"category_id": 2
},
"aggregations": {
"distinctProductCategoryCount": 2
}
},
...
]
}
}
}
6. példa: A having záradék használata
Az összesített eredményeket a záradékkal having is szűrheti. Módosíthatja például az előző példát úgy, hogy csak kettőnél nagyobb eredményeket adjon vissza:
query {
products {
groupBy(fields: [category_id])
{
fields {
category_id
}
aggregations {
distinctProductCategoryCount: count(field: id, distinct: true, having: {
gt: 2
})
}
}
}
}
Az eredmény egyetlen értéket ad vissza, amelynek egyetlen kategóriája kétnál több terméket tartalmaz:
{
"data": {
"products": {
"groupBy": [
{
"fields": {
"category_id": 1
},
"aggregations": {
"distinctProductCategoryCount": 3
}
}
]
}
}
}
Korlátozások és ajánlott eljárások
Ha aggregációkat használ a Microsoft Fabric GraphQL API-jában, fontos szabályokat és korlátozásokat kell figyelembe vennie. Az ajánlott eljárások követésével és a korlátozások megértésével hatékony GraphQL-összesítő lekérdezéseket hozhat létre, amelyek hatékony elemzéseket nyújtanak, és kiszámítható eredményeket nyújtanak, különösen nagy adatkészletek használata vagy lapszámozás megvalósításakor.
Az összesítési funkció hasznos jelentéskészítési és elemzési használati esetekhez, de a lekérdezések gondos strukturálását igényli. Mindig ellenőrizze, hogy a groupBy mezők igazodnak-e a kiválasztott kimeneti mezőkhöz, rendezést ad-e a kiszámítható sorrendhez, különösen lapszámozáskor, és az adattípusokhoz megfelelő különböző és összesítő függvényeket használjon.
A következő szakaszok három fontos területet fednek le: Az összesítés és a nyers elemek kölcsönösen kizárják egymást, a csoportosított eredmények rendezése explicit rendezést igényel, és a különböző összesítések megfelelő használata.
Az összesítés és a nyers elemek kölcsönösen kizárják egymást
Jelenleg nem lehet egyszerre lekérni a csoportosított összesítő adatokat és az ugyanabban a lekérdezésben lévő elemek nyers listáját. Amikor a lekérdezésben használja groupBy , az API "aggregációs módra" vált, és csak csoportosított eredményeket ad vissza. Ez a kialakítás egyértelműen tartja a válaszstruktúrát – minden lekérdezés vagy "összesítési módban" van, vagy "listaelemek módban", de soha sincs mindkettőben.
Hogyan működik ez a gyakorlatban:
A products(...) lekérdezés a következőt adja vissza:
- Az egyes termékek listája (ha
groupBynincs használatban) - Csoportosított eredmények listája összesítő adatokkal (használat esetén
groupBy)
Figyelje meg a fenti összesített példákban, hogy a válasz tartalmazza a groupBy és az összesített mezőket, de a szokásos items terméklista hiányzik.
Mi történik, ha mindkettőt kipróbálja:
Ha ugyanabban a lekérdezésben a normál elemeket és csoportokat is megkísérli kérni, a GraphQL-motor hibát ad vissza, vagy nem engedélyezi a kijelölést.
Átmeneti megoldás:
Ha nyers és összesített adatokra is szüksége van, futtasson két külön lekérdezést: egyet a nyers adatokhoz, egyet pedig az összesített adatokhoz. Ez a megközelítés teljes körű vezérlést biztosít mindkét adathalmaz felett, és az adott gyorsítótárazási és teljesítménykövetelmények alapján optimalizálható.
A csoportosított eredmények rendezése explicit rendezést igényel
Az összesített csoportok kiszámíthatatlan sorrendben jelennek meg, hacsak nem ad meg explicit rendezést. Mindig használjon orderBy vagy sort argumentumokat a konzisztens, értelmes eredmények biztosításához.
Miért fontos a explicit megrendelés:
-
Előre nem látható alapértelmezett sorrend: Nélküle
orderBya csoportok tetszőleges adatbázis által meghatározott sorrendben térhetnek vissza - Lapozási követelmények: A stabil rendezési sorrend elengedhetetlen a folyamatos lapozási viselkedéshez
- Felhasználói élmény: A kiszámítható rendezés javítja az adatértelmezést és az alkalmazások megbízhatóságát
Amikor meg kell adnia a rendelést:
-
Nincs elsődleges kulcs a GroupBy mezőkben: Ha a csoportosítási mezők nem tartalmaznak elsődleges kulcsot, hozzá kell adnia
orderBy - Nem egyedi csoportosítási kulcsok: Ha mezők, például kategórianevek vagy dátumok szerint csoportosít
- Lapozási forgatókönyvek: Bármikor, amikor korlátozást,eltolást vagy kurzort szeretne lapozást használni
Ajánlott eljárások:
- Rendezés összesítési értékek (például a legmagasabb szám első) alapján az elemzési elemzésekhez
- Betűrendes rendezés használata kategóriaalapú csoportosításokhoz
- Több rendezési feltétel kombinálása az összetett rendezési igényekhez
A különböző összesítések megfelelő használata
A distinct módosító az összesítések végrehajtása előtt kiküszöböli az ismétlődő értékeket, így pontos számításokat végezhet, ha az adatok ismétlődő adatokat tartalmaznak.
Gyakori használati esetek:
-
Egyedi számok:
count(field: category_id, distinct: true)megszámolja, hogy hány különböző kategória létezik az egyes csoportokban -
Deduplikált összegek:
sum(field: price, distinct: true)minden egyedi árértéket csoportonként csak egyszer ad hozzá - Összekapcsolási forgatókönyvek: Ha a termékek többször is megjelennek a táblabeillesztések miatt, a különböző elemek egyszer lesznek megszámolva
Mikor érdemes különbözőeket használni:
- Az adatok olyan hiteles duplikációkat tartalmaznak, amelyek eltúlznák a számításokat
- Ismétlődő sorokat létrehozó összekapcsolt táblákkal dolgozik
- Az összes előfordulás helyett egyedi értékeket kell megszámolnia
Teljesítménnyel kapcsolatos szempont:
A különböző műveletek további feldolgozást igényelnek. Csak akkor használja, ha az adat pontosságához szükséges.