Списоци во барање за напојување - како, кога и зошто БЛОГ САМО-СЕРВИС-БИ
Јазикот М има таканаречени структурирани вредности, на кои им припаѓаат списоците, записите и табелите. Секој тип вредност служи за специфични цели и овој пост има за цел да даде вовед во списоците. Овој пост е дел од серијалот за списоци, записи и табели во М. Вклучив неколку слики од екранот со М-код во овој пост. Може да го преземете кодот од сликите на екранот како txt-датотека тука. Преземањето не бара лозинка. Ако сè уште ви е побарана лозинката за OneDrive, сменете го прелистувачот во Edge.
Во М има два вида на вредности: примитивни и структурирани вредности. Примери за примитивни вредности се:
- „А“,
- 1,
- вистинито.
Тие се примитивни на тој начин, дека не се дизајнирани од други вредности. За разлика од примитивните вредности, во М имаме т.н структурирани вредности, кои се составени од други вредности, примитивни и структурирани. Списокот е една од тие структурирани вредности (другите се записи и табели) и е опишан како „подредена низа на вредности“. Воведена е дефинирана листа со отворен кадрав држач ". Дури и ако списоци може да биде празни (изгледа вака "<>"), списоците се не е ограничена по големина, бидејќи М поддржува бесконечно големи списоци.
Пример за многу едноставен претставник на список е:
Пред подетално разгледување на списоците за што се и за што служат, ајде да разговараме зошто воопшто да ги користиме списоците.
Во огромното мнозинство на случаи, список ќе се користи како среден производ за други прашања. Во секој случај, исклучително е ретко списокот да се вчита во моделот на податоци.
Постојат многу мајчин јазик функции во М кои обезбедуваат корисна функционалност и очекувајте списоци како една или повеќе нивни параметри. За овие случаи важно е да знаете како да креирате списоци, за да можете да ги обезбедите тие функции со нивните потребни параметри на соодветен начин.
Покрај тоа, има многу функции во М. кои листи за враќање како повратни вредности. Од овие причини, потребно е да знаете како да се справите со нив со цел безбедно да го користите М јазикот.
Ајде да погледнеме како да креирате списоци.
Список во М обично има почеток и крај и според моето искуство ги има 3 начини во М. за да креирате список:
1. Користење на синтаксата за иницијализација на списокот со кадрави протези
Можете да дефинирате список со употреба на отворен кадрав држач "список со ставки" и да го завршите со затворен кадрав држач ">". Наједноставната листа е празна листа.
Празни списоци
На празната листа е наједноставна од сите списоци, во кој списокот на предмети е празен:
Практична употреба на празен список е, на пример, креирање табела во моделот на податоци за Power BI што содржи само мерки. За разлика од празната табела креирана во Power Query (што може да ја креирате вака: = # табела (<>, <>)), што едноставно не се појавува во моделот на податоци празната листа се увезува како табела во моделот на податоци со една колона и без редови. Едноставно скријте ја добиената колона во моделот на податоци и користете ја оваа празна табела како табела за мерење.

Празниот список секако е повеќе од посебен случај, бидејќи списоците обично содржат вредности, т.н. ставки.
Списоци со ставки одделени со запирка
Да се создаде А. непразна список, можам да додадам вредности одделени со запирка од кој било вид на списокот како што следува:
Рачно креирање на непразна листа
Ако сакам да додадам голем број на соседни вредности на списокот, дефиницијата одделена со запирка е доста сложена. Но, за тоа има помош ...
Списоци со соседни броеви
На пример, ако сакам да креирам список што го покажува целина броеви од 1 до 100, Не мора рачно да ги додавам сите овие броеви на списокот. Наместо тоа, постои следнава кратенка:
Ако, на пример, би сакал да бидат наведени целосните броеви од 1 до 100, но број 48 треба да биде исклучени, тогаш ова работи како што следува:
Таквата низа на соседни вредности не смее да има повеќе од 2 ^ 31 (2.147.483.647) вредности. На пример, погледнете ја следната дефиниција за список:
Поради фактот што тука се повикуваат на опсег на броеви поголеми од 2.147.483.647, се враќа следнава порака за грешка:
Континуираните броеви не смеат да бидат бесконечно големи
Сепак, ова не значи дека самата листа може да нема повеќе ставки, бидејќи како што веќе беше споменато, списоците можат да бидат бесконечно големи. Следната дефиниција враќа валиден резултат:
Исто така, може да се примени синтаксата „.“ за соседен опсег на цели броеви карактери.
Списоци со соседни карактери
Постапката што ја прикажав за последователни броеви е исто така можна за букви и знаци. На пример, валидно е да се дефинира следнава листа:
Резултатот потоа изгледа како што следува:
Можеби не е изненадувачки што Power Query „знае“ дека по „a“ доаѓа „b“, но погледнете го списокот и неговиот резултат:
Помеѓу буквите „З“ и „а“ има и голем број на специјални карактери. Која е основата на оваа листа и тоа е редослед по ред?
Списоците со карактери се засноваат на Уникод
Карактерот на функцијата М. ToNumber () ја открива тајната:
Списоците со карактери се засноваат на Уникод
Списоци со карактери што користат „.“ - синтакса внатрешно употреба на Уникод дефиниција да ги дефинира и ликовите и нивниот редослед. Значи, списокот е внатрешно претворен во и, конечно, во список на карактери со уникод. Ако сакате да го видите соодветниот знак на Уникод за посебна нумеричка вредност, можете да ја користите функцијата Charater.FromNumber (). На пример, Character.FromNumber (91) резултира во "[" .
Оваа наредена низа од уникодни знаци е причината што произведува празна листа: Списокот е внатрешно претворен во неговите нумерички вредности, што во овој случај значи. Бидејќи почетокот на дефинираната листа е пред крајот на списокот, резултатот е празен список.
Рачно дефинирање списоци е еден начин. Ајде да погледнеме како да креирајте списоци со соодветните функции.
2. Користење на природни функции М, кои создаваат списоци
За време на пишувањето, имаме 63 функции во М. кои враќаат список. Најочигледни од нив се списокот. * Функции (но не сите создаваат списоци). Популарни примери се:
Исто така, лесни за идентификување се функциите за конверзија * .ToList () (за кои ќе разговарам подетално подоцна), како што се:
Сите тие функции создаваат списоци врз основа на влезните параметри. Но, постои и друг начин да се создаде список.
3. Упатување на колона/поле во табела
Третиот начин да се создаде список е упатување колона од табела користејќи ја следнава синтакса: Табела [Име на колона]:
Создавање список, со упатување колона во табела
Бидејќи ова можеби не е очигледно, тука ќе напоменам дека упатување на име на чекор (ако врати табела) има ист ефект како и упатувањето на израз на табела: # "име на чекор" [колона] .
Сега, кога знаеме што се списоци и како се креираат, ќе се фокусираме на справување со списоците.
има 3 оператори што може да се користи заедно со списоците: "=" и "<>" овозможуваат споредување на списоците, додека "&" ги комбинира списоците. Еве неколку примери за тоа како да го користите тоа:
- = =→ точно
- <>→ точно
- →. Ова исто така може да се постигне со употреба на функцијата List.Combine (<, >)
Друг аспект што е интересен во однос на списоците е како да пристапете до ставките во списокот.
Откако ќе имате список, понекогаш е потребно директно да пристапите до специјалните ставки во списокот.
Користење на операторот за позициски индекс <>
За пристап до ставка во список, можете да го користите т.н. оператор за позициски индекс "<>" Според неговиот нумерички индекс. На ставки во список се повикуваат на користење на индекс базиран на нула. Следниве примери детално го објаснуваат ова:
Земете ја следнава листа: MyList =. Бидејќи внатрешниот индекс на ставките од списокот започнува со нула, ги добивам следниве резултати:
MyList доведува до следната порака за грешка, велејќи дека се прави обид за пристап до ставка од списокот што не постои во списокот:
За да ја надминете оваа последна порака за грешка, можете да го користите таканаречениот избор на избор на ставка како што следува, што се враќа нула, доколку избраната ставка не постои:
MyList ? → нула
За да дознаете колку ставки има во списокот, можете да ја користите функцијата List.Count (). Список. Број (MyList) води до резултат 3, така што последната ставка во списокот има индекс 2 (List.Count (MyList) -1), бидејќи индексот е нула.
Покрај примерите прикажани погоре, постојат и разни природни функции M кои овозможуваат пристап до ставки во списокот.
Користење на природни функции М.
Библиотеката М нуди широк спектар на функции на списоци, од кои некои обезбедуваат пристап до ставки од списокот. За следниве примери, земете ја оваа листа како што е дадена: MyList =
Список. Прво ()
Оваа функција пристапува до првата ставка во списокот, што е еквивалентно на користење на операторот за позициски индекс со индекс 0 (како MyList).
Список.ПрвN ()
Оваа функција работи на два начина.
- Ако втор параметар на функцијата е а број, првите ставки од списокот се враќаат на овој број: List.FirstN (MyList, 2) =
- Ако втор параметар на функцијата е а состојба, сите тие ставки се враќаат додека состојбата веќе не се применува за прв пат: List.FirstN (MyList, each _
Список. Последен ()
Оваа функција пристапува до последната ставка во списокот. Следните два израза се идентични: Список.Последен (MyList) = MyList
Листа. ПоследнаN ()
Работи како List.FirstN, но обратно.
Список. Ранг ()
Враќа пребројување ставки почнувајќи од офсет. Список. Ранг (MyList, 2, 3) доведува до следниот резултат:
Список. Изберете ()
Оваа функција одредува ставки од списокот, не врз основа на нивната позиција во списокот, туку врз основа на одредени услови што оваа ставка мора да ги исполни. Следниот пример поминува низ список и ги избира оние ставки чија вредност е поголема од 2:
Список. Изберете (MyList, each _> 2) што ја враќа следнава листа како резултати:
Понекогаш сакате да користите одредена функционалност во М и да ја барате соодветната функција. Ако, на пример, сакам преименувај го името на колоната од табела со динамички имиња на колони, можам да го сторам ова во М со функцијата Table.RenameColumns (). Ако го игнорирам последниот изборен параметар на функцијата, тогаш нејзината структура може да се опише како што следува:
Табела. Преименувај колони (Табели со имиња на колони што треба да се променат, список со структурата)
Следната слика од екранот покажува скрипта М што ги преименува двете постојни колони на табелата и е подготвена за насловите на колоните на оригиналната табела да се сменат за време на следното извршување. Вистинското преименување на натписите во колоната се одвива во последниот ред на изразот let (2). Сите чекори опишани во црвената кутија (1) се користат за создавање на динамична листа на стари парови на име/ново име што ги бара табелата. Функција Преименувај колони ().
Преименување на динамички различни имиња на колони
Ајде следно да ги разгледаме функциите што генерираат списоци.
Многу функции во М генерираат списоци и најочигледни од нив се функциите *.
* .Функции на списокот со списоци
Binary.ToList () - Создава список надвор од бинарни.
Record.ToList () - Конвертира запис во список, кој ги содржи вредностите на полето на записот.
Пример за Record.ToList ()
Table.ToList () - Создава список од табела со одвојување на колоните ред по ред со сепаратор што може да се дефинира во опционалниот параметар на комбинаторот (на пример, Combiner.CombineTextByDelimiter (","))
Пример за Table.ToList ()
Text.ToList () - Креира список од текст со додавање на секој знак поединечно како ставка во списокот.
Пример за Text.ToList ()
Сепак, функциите *. ToList не се единствените функции што генерираат список од вредност од одреден тип.
Други функции, кои создаваат списоци
За некои од функциите, името не сугерира дека тие создаваат списоци. Пример за ова е функцијата Text.Split (). Замислете го следнава задача: Во долг текст сметајте го бројот на различни зборови. Следната скрипта го прави ова со употреба на Text.Split () во комбинација со други функции на списокот.
Користење на Text.Split () за броење (изразени) зборови
Други примери на функции, кои враќаат списоци, но не звучат како што се:
И покрај тоа што има многу повеќе да се каже за списоците и нивните можности, претпоставувам дека стана јасно дека списоците имаат свој шарм и дека е потребно да се справат со нив за да го совладаат М јазикот.
Поздрав од Германија,
Ларс е консултант, развивач и тренер за Microsoft Power BI. Тој е овластен експерт за Power BI и обучувач на Microsoft. За својата посветеност кон меѓународната заедница, на Мајкрософт од 2017 година, Ларс му ја доделува наградата МВП годишно. Прочитајте повеќе тука ...