Zdieľať cez


Tabuľky

Poznámka

Microsoft Power Fx je nový názov jazyka vzorcov pre aplikácie plátna. Tieto články sú rozpracované, pretože jazyk extrahujeme z aplikácií plátna a integrujeme ho s ostatnými produktmi Microsoft Power Platform, aby sme ho sprístupnili ako open source. Začnite s prehľadom Microsoft Power Fx ako úvod do jazyka.

V Microsoft Power Fx môžete napísať vzorec, ktorý pristupuje k informáciám v Microsoft Excel, SharePoint, SQL Server a niekoľko ďalších zdrojov, ktoré ukladajú údaje do záznamov a tabuliek. Ak chcete s týmito druhmi údajov pracovať čo najúčinnejšie, oboznámte sa so základnými konceptami týchto štruktúr.

  • Záznam obsahuje jednu alebo viac kategórií informácií o osobe, mieste alebo veci. Záznam môže napríklad obsahovať meno, e-mailovú adresu a telefónne číslo zákazníka. V iných nástrojoch sa záznam nazýva „riadok“ alebo „položka“.
  • Tabuľka obsahuje jeden alebo viac záznamov, ktoré obsahujú rovnaké kategórie informácií. Tabuľky môžu napríklad obsahovať mená, e-mailové adresy a telefónne čísla 50 zákazníkov.

Môžete vytvoriť rôzne vzorce, ktoré budú používať názov tabuľky ako argument, rovnako ako vzorec v Exceli použije ako argumenty jednu alebo viaceré referencie buniek. Niektoré vzorce v službe Power Fx vracajú tabuľku, ktorá obsahuje iné špecifikované argumenty. Môžete napríklad vytvoriť vzorec:

  • na aktualizovanie záznamu v tabuľke špecifikovaním danej tabuľky ako jeden z viacerých argumentov vo funkcii Záplata.
  • na pridanie, odstránenie a premenovanie stĺpcov v tabuľke uvedením tabuľky ako argumentu vo funkciách AddColumns, DropColumns alebo RenameColumns. Žiadna z týchto funkcií neupravuje pôvodnú tabuľku. Namiesto toho funkcia vráti, na základe ďalších argumentov, ktoré určíte, inú tabuľku.

Prvky tabuľky

Prvky stola.

Záznamy

Každý záznam obsahuje aspoň jednu kategóriu informácií týkajúcich sa osoby, miesta alebo veci. V príklade vyššie je zobrazený záznam pre každý produkt (Čokoláda, Chlieb a Voda) a stĺpec pre každú kategóriu informácií (Cena, Množstvo v sklade a Objednané množstvo).

Vo vzorci môžete pomocou zložených zátvoriek odkazovať na záznam mimo kontextu tabuľky. Napríklad tento záznam { Name: "Strawberries", Price: 7.99 } nie je priradený k tabuľke. Všimnite si, že názvy polí, ako tu napríklad Názov a Cena, nie sú uzavreté v dvojitých úvodzovkách.

Polia

Pole predstavuje individuálnu informáciu v zázname. Môžete si ho predstaviť ako hodnotu konkrétneho záznamu v stĺpci.

Rovnako ako pri ovládacom prvku, na pole záznamu sa odkazuje pomocou .operátora v zázname. Napríklad vzorec First(Products).Name vráti pole Názov prvého záznamu v tabuľke Produkty.

Pole môže obsahovať ďalší záznam alebo tabuľku, ako je zobrazené v príklade funkcie GroupBy. Môžete vnoriť toľko úrovní záznamov a tabuliek, koľko chcete.

Stĺpce

Stĺpec sa vzťahuje na rovnaké pole jedného alebo viacerých záznamov v tabuľke. Vo uvedenom príklade má každý produkt pole s cenou a táto cena je v rovnakom stĺpci pre všetky produkty. Uvedená tabuľka má štyri stĺpce, zobrazené horizontálne vedľa seba:

  • Meno
  • Cena
  • Množstvo na ruke
  • Množstvo na objednávku

Názov stĺpca ilustruje polia obsiahnuté v danom stĺpci.

Všetky hodnoty v stĺpci sú rovnakého typu údajov. V uvedenom príklade stĺpec Množstvo v sklade v rámci jedného záznamu vždy obsahuje číslo a nemôže obsahovať reťazec, ako napríklad „12 kusov“. Hodnota ľubovoľného poľa môže byť aj prázdna.

V iných nástrojoch sa stĺpcom mohlo hovoriť aj polia.

Tabuľka

Tabuľka sa skladá z jedného alebo viacerých záznamov pozostávajúcich z viacerých polí, ktoré majú vo všetkých záznamoch konzistentné názvy.

Každá tabuľka, ktorá je uložená v zdroji údajov alebo v kolekcii, má názov, ktorý môžete použiť pri odkazovaní na danú tabuľku vo funkciách, v ktorých je možné použiť tabuľku ako argument. Tabuľky môžu byť tiež výsledkom funkcie alebo vzorca.

V nasledujúcom príklade môžete vyjadriť tabuľku vo vzorci pomocou funkcie Table s množinou záznamov, ktorú vložíte do zložených zátvoriek:

Table( { Value: "Strawberry" }, { Value: "Vanilla" } )

Tabuľku s jedným stĺpcom môžete tiež definovať pomocou hranatých zátvoriek. Alternatívny spôsob napísania uvedeného vzorca je:

[ "Strawberry", "Vanilla" ]

Tabuľkové vzorce

Vzorce na narábanie s číslami a reťazcami textu sa v službe Power Fx a Exceli používajú podobne:

  • V Exceli zadajte hodnotu, ako napríklad 42 do bunky A1 a potom do inej bunky zadajte vzorec, ako napríklad A1 + 2, aby sa zobrazila hodnota 44.
  • V službe Power Apps nastavte vlastnosť Predvolené jazdca Slider1 na hodnotu 42 a vlastnosť označenia Text na hodnotu Slider1.Value + 2, aby sa zobrazila hodnota 44.

V oboch prípadoch sa vypočítaná hodnota zmení automaticky po zmene hodnoty argumentov (napríklad číslo v bunke A1 alebo hodnota jazdca Slider1).

Podobným spôsobom môžete údaje upravovať a pristupovať k nim pomocou vzorcov aj v tabuľkách a záznamoch. V niektorých vzorcoch môžete použiť názvy tabuliek ako argumenty, ako napríklad Min(Catalog, Price) na zobrazenie najnižšej hodnoty stĺpca Cena v tabuľke Katalóg. Iné vzorce poskytujú celé tabuľky ako vrátené hodnoty, ako napríklad RenameColumns(Catalog, "Price", "Cost"), ktorý vráti všetky záznamy z tabuľky Katalóg, ale zmení názov stĺpca Cena na Náklady.

Vzorce, ktoré používajú tabuľky a záznamy, sú automaticky prepočítavané v prípade zmeny základnej tabuľky alebo záznamu, podobne ako pri číslach. Ak sú náklady produktu v tabuľke Katalóg znížené pod predchádzajúcu minimálnu hodnotu, vrátená hodnota vzorca Min sa automaticky zmení, aby novú hodnotu započítala.

Funkcie tabuľky a vlastnosti ovládacích prvkov

Zvážte použitie funkcie Dolná. Ak premenná vitajte obsahuje textový reťazec "Hello, World", vzorec Dolné (vitajte) vráti text "hello, world". Táto funkcia žiadnym spôsobom nemení hodnotu v tejto premennej. Lower je čistá funkcia v tom, že spracováva iba vstup a produkuje výstup. To je všetko; nemá žiadne vedľajšie účinky. Všetky funkcie v Exceli a väčšina funkcií v Power Fx sú čisto funkcie, ktoré umožňujú automatický výpočet zošita alebo aplikácie.

Power Fx ponúka sadu funkcií, ktoré pracujú s tabuľkami rovnakým spôsobom. Tieto funkcie berú tabuľky ako vstup a filtrovanie, triedenie, transformáciu, redukciu a sumarizáciu celých tabuliek údajov. V skutočnosti, Dolná a mnoho ďalších funkcií, ktoré obyčajne nadobúdajú jednu hodnotu, môže ako vstup považovať aj tabuľku s jedným stĺpcom.

Mnoho funkcií berie ako vstup tabuľku s jedným stĺpcom. Ak má celá tabuľka iba jeden stĺpec, môžete ju zadať podľa názvu. Ak tabuľka obsahuje viac stĺpcov, môžete jeden z týchto stĺpcov určiť pomocou Table.Column syntax. Napríklad, Products.Namevráti iba tabuľku s jedným stĺpcom Názov hodnoty z tabuľky Produkty.

Tabuľku však môžete úplne preformátovať pomocou funkcie AddColumns, RenameColumns, ShowColumns alebo DropColumns. Tieto funkcie opäť menia iba svoj výstup, nie ich zdroj.

Vzorce správania

Ostatné funkcie sú špeciálne navrhnuté na modifikáciu údajov a majú vedľajšie účinky. Pretože tieto funkcie nie sú čisté, musíte ich zostaviť opatrne a nemôžu sa podieľať na automatickom prepočítavaní hodnôt v aplikácii. Môžete tieto funkcie použiť iba vo vzorcoch správania.

Rozsah záznamov

Niektoré funkcie pracujú na základe použitia vzorca v každom zázname tabuľky. Výsledok vzorca sa používa rôznymi spôsobmi:

  • AddColumns - Vzorec poskytuje hodnotu pridaného poľa.
  • Priemer, Max, Min, Súčet, StdevP, VarP - Vzorec poskytuje hodnotu na agregáciu.
  • Filter, Vyhľadávanie - Vzorec určuje, či má byť záznam zahrnutý do výstupu.
  • Concat – vzorec určuje reťazce, ktoré sa majú spojiť.
  • Distinct – Vzorec vracia hodnotu, ktorá sa používa na identifikáciu duplicitných záznamov.
  • ForAll - Vzorec môže vrátiť akúkoľvek hodnotu, potenciálne s vedľajšími účinkami.
  • Zoradiť – Vzorec poskytuje hodnotu, podľa ktorej sa majú zoradiť záznamy.
  • S - Formula môže vrátiť akúkoľvek hodnotu, potenciálne s vedľajšími účinkami.

V týchto vzorcoch môžete odkazovať na polia spracovávaného záznamu. Každá z týchto funkcií vytvára „rozsah záznamov“, v ktorom sa vzorec hodnotí, a kde sú polia záznamu k dispozícii ako identifikátory na najvyššej úrovni. V rámci aplikácie môžete tiež odkázať na vlastnosti ovládacích prvkov a ďalšie hodnoty.

Napríklad vezmite tabuľku Produkty umiestnené v globálnej premennej:

Požadované stoly.

Set( Products,
    Table(
        { Product: "Widget",    'Quantity Requested': 6,  'Quantity Available': 3 },
        { Product: "Gadget",    'Quantity Requested': 10, 'Quantity Available': 20 },
        { Product: "Gizmo",     'Quantity Requested': 4,  'Quantity Available': 11 },
        { Product: "Apparatus", 'Quantity Requested': 7,  'Quantity Available': 6 }
    )
)

Ak chcete zistiť, či niektorý z týchto produktov je žiadaný viac ako je k dispozícii kusov:

Filter( Products, 'Quantity Requested' > 'Quantity Available' )

Prvý argument na Filter je tabuľka záznamov, ktorá sa má spracovať, a druhý argument je vzorec. Filter vytvorí rozsah záznamov na vyhodnotenie tohto vzorca, v ktorom sú dostupné polia každého záznamu, v tomto prípade Produkt, Požadované množstvo a Dostupné množstvo. Na základe porovnania sa určí, či každý záznam by mal byť zahrnutý vo výsledku funkcie:

Potrebné stoly.

Na základe tohto príkladu môžeme vypočítať, koľko kusov jednotlivých produktov objednať:

AddColumns( 
    Filter( Products, 'Quantity Requested' > 'Quantity Available' ), 
    "Quantity To Order", 'Quantity Requested' - 'Quantity Available'
)

Tu pridávame k výsledku vypočítaný stĺpec. AddColumns má svoj vlastný rozsah záznamov, ktorý používa na výpočet rozdielu medzi tým, čo bolo vyžiadané, a tým, čo je k dispozícii.

Pridanie stĺpcov.

Nakoniec môžeme obmedziť výslednú tabuľku iba na stĺpce, ktoré si prajeme:

ShowColumns(
    AddColumns(
        Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
        "Quantity To Order", 'Quantity Requested' - 'Quantity Available'
    ),
    "Product",
    "Quantity To Order"
)

Len na objednávku.

Všimnite si, že v uvedenom sme na niektorých miestach použili dvojité úvodzovky (") a na iných zasa jednoduché úvodzovky ('). Jednoduché úvodzovky sú potrebné pri odkazovaní na hodnotu objektu, ako je napríklad pole alebo tabuľka, ktorého názov obsahuje medzeru. Dvojité úvodzovky sa používajú, keď neodkazujeme na hodnotu objektu, ale o ňom iba hovoríme, najmä v situáciách, v ktorých objekt ešte neexistuje, rovnako ako v prípade vzorca AddColumns.

Rozlišovanie

Názvy polí pridané prostredníctvom rozsahu záznamov prepíšu rovnaké názvy z iného miesta v aplikácii. Ak sa tak stane, môžete stále pristupovať k hodnotám mimo rozsahu záznamov prostredníctvom operátora @rozlišovania:

  • Na prístup k hodnotám z vnorených rozsahov záznamov použite operátor @ s názvom spracovávanej tabuľky a nasledovný vzor:
    Tabuľka[@Názov poľa]
  • Na prístup ku globálnym hodnotám, ako sú napríklad zdroje údajov, kolekcie a kontextové premenné, použite vzor [@ObjectName] (bez označenia tabuľky).

Ak je spracovávaná tabuľka výrazom, ako napríklad Filter(Table, ... ), nie je možné použiť operátor rozlišovania. K poliam v tejto tabuľke má prístup iba najvnútornejší rozsah záznamov nepoužitím operátora rozlišovania.

Napríklad si predstavte kolekciu X:

Hodnota X.

Túto kolekciu môžete vytvoriť pomocou vzorca ClearCollect( X, [1, 2] ).

A iná kolekcia Y:

Hodnota Y.

Túto kolekciu môžete vytvoriť pomocou vzorca ClearCollect( Y, ["A", "B"] ).

Okrem toho definujte kontextovú premennú s názvom Hodnota týmto vzorcom: UpdateContext( {Value: "!"} )

Dajme to všetko dohromady. Nasledujúci vzorec:

Ungroup(
    ForAll( X,
        ForAll( Y,
            Y[@Value] & Text( X[@Value] ) & [@Value]
        )
    ),
    "Value"
)

vytvorí v tomto kontexte túto tabuľku:

Hodnota XY.

O čo tu ide? Najokrajovejšia funkcia ForAll definuje rozsah záznamu pre kolekciu X a umožňuje počas spracovania každého záznamu prístup k poľu Hodnota. Pole je prístupné použitím slova Hodnota alebo pomocou vzorca X[@Value].

Najvnútornejšia funkcia ForAll definuje ďalší rozsah záznamu pre Y. Pretože táto tabuľka má aj pole Hodnota definované pomocou Hodnota tu sa odkazuje na pole v Y je záznam a už nie ten z X. Na prístup k poľu Hodnota prvku X musíme s operátorom disambiguácie použiť dlhšiu verziu.

Keďže kolekcia Y je najvnútornejším rozsahom záznamov, prístup k poliam tejto tabuľky nevyžaduje rozlišovanie, a teda použitím nasledovného vzorca získame rovnaký výsledok:

Ungroup(
    ForAll( X,
        ForAll( Y,
            Value & Text( X[@Value] ) & [@Value]
        )
    ),
    "Value"
)

Všetky rozsahy záznamov ForAll prepíšu globálny rozsah. Definovaná kontextová premenná Hodnota nie je k dispozícii podľa mena bez operátora rozlišovania. Na prístup k tejto hodnote použite [@Value].

Zrušiť zoskupenie vyrovná výsledok, pretože vnorené funkcie Pre všetkých majú za následok vnorenú tabuľku výsledkov.

Tabuľky s jedným stĺpcom

Ak chcete pracovať na jednom stĺpci z tabuľky, použite ShowColumns fungujú ako v tomto príklade:

ShowColumns( Products, "Product" )

Tento vzorec vytvára túto jednostĺpcovú tabuľku:

Jeden stĺpec.

Pre kratšiu alternatívu uveďte Table.Column, ktorá extrahuje iba stĺpcovú tabuľku Stĺpec z Tabuľky. Napríklad tento vzorec vytvára presne rovnaký výsledok ako použitie ShowColumns.

Products.Product

Záznamy Inline

Výsledky vyjadrujete použitím zložených zátvoriek, ktoré obsahujú hodnoty pomenovaných polí. Môžete napríklad vyjadriť prvý záznam tabuľky zo začiatku tejto témy pomocou nasledovného vzorca:

{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 }

Môžete tiež vkladať vzorce do iných vzorcov, ako sa zobrazuje v tomto príklade:

{ Name: First(Products).Name, Price: First(Products).Price * 1.095 }

Záznamy môžete vnárať vnorením zložených zátvoriek, ako sa uvádza v nasledovnom príklade:

{ 'Quantity': { 'OnHand': ThisItem.QuantOnHand, 'OnOrder': ThisItem.QuantOnOrder } }

Každý názov stĺpca, ktorý obsahuje špeciálny znak, ako napríklad medzeru alebo dvojbodku, dajte do jednoduchých úvodzoviek. Ak chcete v názve stĺpca použiť jednu jednoduchú úvodzovku, zdvojte ju.

Všimnite si, že hodnota v stĺpci Cena neobsahuje symbol meny, ako napríklad symbol dolára. Formátovanie sa použije pri zobrazení hodnoty.

Vložené tabuľky

Tabuľku môžete vytvoriť pomocou funkcie Tabuľka a množiny záznamov. Tabuľku zo začiatku tejto témy môžete vytvoriť pomocou nasledovného vzorca:

Table( 
	{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 },
	{ Name: "Bread", Price: 4.95, 'Quantity on Hand': 34, 'Quantity on Order': 0 },
	{ Name: "Water", Price: 4.95, 'Quantity on Hand': 10, 'Quantity on Order': 0 } 
)

Tabuľky môžete tiež vnárať:

Table( 
	{ Name: "Chocolate", 
	  'Quantity History': Table( { Quarter: "Q1", OnHand: 10, OnOrder: 10 },
	                             { Quarter: "Q2", OnHand: 18, OnOrder: 0 } ) 
	}
)

Tabuľky vloženej hodnoty

Určením hodnôt v hranatých zátvorkách môžete vytvárať tabuľky s jedným stĺpcom. Výsledná tabuľka obsahuje jeden stĺpec s názvom Hodnota.

Napríklad, [ 1, 2, 3, 4 ] je ekvivalent Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } ) a vráti túto tabuľku:

Vnorená tabuľka.