Делите путем


Динамичке вредности

Динамички је тип података у Повер Фк-у који може да садржи било коју структуру података, сложену или једноставну. Не може се користити директно и претворити у други тип података током извођења, било експлицитно или имплицитно. Пољима записа у динамичкој вредности може се приступити помоћу тачке нотације, а постојање поља се верификује само у време извођења.

Постоје два начина за креирање динамичке вредности:

Белешка

Динамиц се раније звао УнтипедОбјецт . Само име је промењено, нема промене у семантици. Једино место где би се име појавило у формули је у експерименталним верзијама кориснички дефинисаних функција и кориснички дефинисаних типова.

Једноставни типови

Вредност променљиве која садржи динамичку вредност не може се користити директно. Увек морате да га исправно укуцате користећи одговарајући конструктор типа или претварањем у одређени тип са АсТyпе и ПарсеЈСОН функцијама.

Следећи примери претварају вредност динамичке променљиве под називом DynValue.

Text(DynValue)
Value(DynValue)

У следећој табели су наведени типови података и одговарајуће функције за претварање динамичког у тај тип података.

Тип података Function Опис
Логичка вредност Боолеан() Приликом претварања Динамиц у Боолеан , основна вредност мора да представља боолеан или тип који се може аутоматски претворити (као што је стринг "труе").
Боја ЦолорВалуе () или РГБА() Боје могу бити представљене у каскадном опису дефиниције стила (CSS) као ниска или као појединачне RGBA компоненте. Динамиц се може претворити директно из низа дефиниције боја Цасцадинг Стиле Схеет (ЦСС) помоћу функције ЦолорВалуе () или из појединачних РГБА бројева у боју помоћу РГБА ( ) функције.
Валута, број Вредност() Приликом претварања динамичког у број , основна вредност мора представљати број или тип који се може аутоматски претворити (као што је низ "КСНУМКС").
Датум, датум-време, време ДатеВалуе(), ТимеВалуе() или ДатеТимеВалуе() Датум , време и датум могу се директно претворити из динамичког у одговарајући тип, када су представљени у ИСО 8601 формату. Друге формате прво морате конвертовати у текст помоћу функције Text(), а затим проследите у функцију DateValue(), TimeValue() или DateTimeValue() која ће подразумевано користити језик поставки тренутног корисника за интерпретацију датума и времена.
GUID ГУИД() Динамичка вредност може бити директно конвертована у ГУИД ако основни објекат представља ГУИД, или ако представља стринг.
Хипервеза, слика, медији Текст() Ови типови података су текстуални типови података и могу се конвертовати у текст, а затим користити у услузи Power Fx.
Избор, Две опције Прекидач () или ако () Избори и две опције су представљени као локализоване жице у Power Fx. Избори су подржани бројем и две опције као боолеанс. Нема директне конверзије из логичке вредности, броја или ниске у избор или две опције, али функције Switch() или If() могу да се користе на логичкој, текстуалној или бројчаној вредности да би се исправно доделила вредност избора или две опције.
Запис Није примењиво Не постоји директна конверзија из динамичке у структуру записа, али појединачна поља се могу преузети из динамичког да би се створио нови запис.
Референца записа Није примењиво Референце записа су јединствене за изворе података и немају значајну заступљеност у Динамичном .
Table Табела() и ФорАлл() Динамички може представљати низ, који се може претворити у табелу. Ти објекти могу бити низови записа или низови вредности које су практично табеле са једном колоном. ФорАлл () може се користити за креирање табеле са потпуно откуцаним записима. За више информација, погледајте примере даље у овом чланку.
Текст Текст() Текст се може директно конвертовати. Ако динамичка вредност представља број, прво морате претворити динамички у број користећи Валуе () пре претварања у текст.

Врсте записа

Можете приступити пољима на променљивој која представља динамички запис користећи редовну тачку-нотацију која се користи за записе. Међутим, постојање поља неће бити потврђено до извршавања. Као резултат тога, такође нема функције Intellisense. Ако поље не постоји или има основну вредност null, приступ ће резултирати вредношћу Blank().

Свако поље на записнику је такође типа Динамиц и мора бити правилно откуцано. Поље може бити динамички запис једноставног типа. У случају да је то запис, можете да уланчате тачкасту нотацију. Ако неко поље у ланцу не постоји, враћа се Blank().

Следећи примери користе поља из динамичке променљиве под називом DynRecord.

Text(DynRecord.StringField)
Value(DynRecord.Field.ChildField)

У случају да се име поља састоји од неважећег имена идентификатора, на пример, када имена поља почињу бројем или садрже неважеће знакове као што је цртица, имена поља можете да ставите у једноструке наводнике:

dynamic.'01'
dynamic.'my-field'

Динамички приступ колони

Понекад ће имена колона у запису бити динамична. Користите функцију ЦолумнНамес да бисте одредили која су имена колона доступна у запису, а затим користите функцију Цолумн да бисте преузели вредност именоване колоне.

На пример,

LettersUsed = ParseJSON( "{ ""d"": 2, ""p"": 3 }" );

Concat( ColumnNames( LettersUsed ) As Names, Names.Value, ", " )
// returns "d, p"

Sum( ForAll( ColumnNames( LettersUsed ) As Names, Column( LettersUsed, Names.Value ) ), Value )
// returns 5

Низови

Динамичка променљива може да садржи низ. Иако низ може бити или низ записа или низ једноставних типова, претварање динамичког низа у табелу помоћу функције Табле() ће увек резултирати табелом динамичке са једном колоном. Функције као што су ForAll() и Index() не захтевају да прво креирате Table() и као резултат тога не захтевају коришћење поља са једном колоном Value,

На пример, да бисте добили други број у низу динамичких вредности које садрже бројеве ( [1, 2, 3] ), следећа формула се може користити за преузимање другог реда у табели и претварање колоне у број:

Value( Index( UOArray, 2 ) )

Ако је Динамички претворен у Табелу () први, други ред у табели резултата са једном колоном је колона Value која садржи Динамично:

Value( Index( Table( UOArray ), 2 ).Value )

За низ записа који имају позвану текстуалну колону под називом Field, примењује се иста логика. Динамиц се може приступити директно, или ако се користи Табле() функција ће резултирати у једној колони табеле Динамицан.

Колони Field се може приступити директно из Динамиц враћене од стране Индеx() функције.

Text( Index( UORecordArray, 2 ).Field )

Када користите функцију Табле(), прво преузмите колону са једном колоном Value да бисте добили Динамицс , а затим приступите колони: Field

Text( Index( Table( UORecordArray ), 2 ).Value.Field )

Да бисте конвертовали низ записа у типизирану табелу, можете да користите функцију ForAll() и конвертујете свако појединачно поље.

ForAll( UORecordArray, { FirstField: Value(ThisRecord.FirstField), SecondField: Text(ThisRecord.SecondField) } )

Ако се Динамиц прво претвори у табелу, опет, резултирајућа табела са једном колоном Динамиц ће захтевати да користите колону Value да бисте добили поља.

ForAll( Table(UORecordArray), { FirstField: Value(ThisRecord.Value.FirstField), SecondField: Text(ThisRecord.Value.SecondField) } )

Претварање у откуцане записе и табеле

Важно

Уместо претварања сваке једноставне вредности појединачно, функције ПарсеЈСОН, ИсТипе и АсТyпе могу се користити за претварање Динамиц у откуцани објекат у расутом стању. Користите функцију Тyпе да креирате тип који ће мапирати динамичку структуру на откуцану структуру.

На пример, овде тумачимо ЈСОН низове као вредности датума и времена, без потребе да позовемо функцију ДатеТимеВалуе:

Eclipse = ParseJSON( "{ ""Start"": ""2026-08-12T18:26:00.000Z"", ""End"": ""2026-08-12T18:33:00.000Z"" }",
                     Type( { Start: DateTime, End: DateTime } ) );

DateDiff( Eclipse.Start, Eclipse.End, TimeUnit.Minutes )
// 7