Applies ToExcel за Microsoft 365 Excel 2024 Excel 2021 Excel 2019 Excel 2016

Контекстът ви позволява да извършвате динамичен анализ, в който резултатите от формулата могат да се променят, за да отразят текущия ред или селекция от клетки, както и всички свързани данни. Разбирането на контекста и ефективното използване на контекста са много важни за изграждането на високоефективни формули, динамични анализи и за отстраняване на проблеми във формулите.

Този раздел дефинира различните типове контекст: контекст на ред, контекст на заявка и контекст на филтър. Тя обяснява как се изчислява контекстът за формули в изчисляеми колони и в обобщени таблици.

Последната част от тази статия предоставя връзки към подробни примери, които илюстрират как резултатите от формулите се променят според контекста.

Разбиране на контекста

Формулите в Power Pivot могат да бъдат засегнати от филтрите, приложени в обобщена таблица, от релациите между таблиците и от филтрите, използвани във формулите. Контекст е това, което прави възможно извършването на динамичен анализ. Разбирането на контекста е важно за създаването и отстраняването на неизправности във формули.

Има различни типове контекст: контекст на ред, контекст на заявка и контекст на филтър.

Контекстът на реда може да бъде "текущият ред". Ако сте създали изчисляема колона, контекстът на реда се състои от стойностите във всеки отделен ред и стойностите в колоните, които са свързани с текущия ред. Има и някои функции (EARLIER и EARLIEST), които получават стойност от текущия ред и след това използват тази стойност при изпълнение на операция върху цялата таблица.

Контекст на заявката препраща към подмножеството от данни, което се създава неявно за всяка клетка в обобщена таблица, в зависимост от заглавките на редовете и колоните.

Контекст на филтъра е наборът от стойности, позволени във всяка колона, въз основа на ограниченията на филтъра, които са били приложени към реда или са дефинирани от изрази за филтриране във формулата.

Най-горе на страницата

Контекст на ред

Ако създадете формула в изчисляема колона, контекстът на реда за тази формула включва стойностите от всички колони в текущия ред. Ако таблицата е свързана с друга таблица, съдържанието включва и всички стойности от тази друга таблица, които са свързани с текущия ред.

Да предположим например, че създавате изчисляема колона = [Навло] + [Данък], която събира две колони от една и съща таблица. Поведението на тази формула е като при формулите в таблица на Excel, която автоматично препраща към стойности от същия ред. Обърнете внимание, че таблиците са различни от диапазоните: не можете да препращате към стойност от реда преди текущия ред с помощта на нотация за диапазон и не можете да препращате към произволна единична стойност в таблица или клетка. Винаги трябва да работите с таблици и колони.

Контекстът на реда автоматично следва релациите между таблиците, за да определи кои редове в свързаните таблици са асоциирани с текущия ред.

Например следващата формула използва функцията RELATED, за да извлече данъчна стойност от свързана таблица въз основа на региона, до който е изпратена поръчката. Стойността на данъка се определя с помощта на стойността за регион в текущата таблица, търсене на региона в свързаната таблица и след това получаване на данъчната ставка за този регион от свързаната таблица.

= [Навло] + RELATED('Регион'[Данъчна Ставка])

Тази формула просто получава данъчната ставка за текущия регион от таблицата Регион. Не е нужно да знаете или да задавате ключа, който свързва таблиците.

Контекст на няколко реда

Освен това DAX включва функции, които итерират изчисления в таблица. Тези функции могат да имат няколко текущи реда и контекст на текущия ред. В условията за програмиране можете да създавате формули, които се повтарят във вътрешния и външния цикъл.

Да предположим например, че вашата работна книга съдържа таблица " Продукти " и таблица "Продажби" . Може да искате да преминете през цялата таблица за продажби, която е пълна с транзакции, включващи множество продукти, и да намерите най-голямото поръчано количество за всеки продукт в една транзакция.

В Excel това изчисление изисква поредица от междинни обобщения, които ще трябва да бъдат възстановени, ако данните се променят. Ако сте опитен потребител на Excel, е възможно да можете да създавате формули за масиви, които биха свършили работата. Като алтернатива, в релационна база данни можете да напишете вложени подизбори.

С DAX обаче можете да създадете една формула, която връща правилната стойност, и резултатите се актуализират автоматично всеки път, когато добавяте данни към таблиците.

=MAXX(FILTER(Sales;[ProdKey]=EARLIER([ProdKey]));Sales[OrderQty])

За подробно описание на тази формула вж. функцията EARLIER.

Накратко, функцията EARLIER съхранява контекста на реда от операцията, която предхожда текущата операция. Във всеки един момент функцията съхранява два набора от контекст в паметта: един набор от контекст представлява текущия ред за вътрешния цикъл на формулата, а друг набор от контекст представлява текущия ред за външния цикъл на формулата. DAX автоматично подава стойностите между двата цикъла, така че да можете да създавате сложни агрегати.

Най-горе на страницата

Контекст на заявка

Контекст на заявка препраща към подмножеството от данни, които се извличат неявно за формула. Когато пуснете мярка или друго поле за стойност в клетка в обобщена таблица, Power Pivot ядро преглежда филтрите за заглавки на редове и колони, сегментатори и отчети, за да определи контекста. След това Power Pivot прави необходимите изчисления, за да попълни всяка клетка в обобщената таблица. Наборът от данни, който се извлича, е контекстът на заявката за всяка клетка.

Тъй като контекстът може да се промени в зависимост от това къде поставяте формулата, резултатите от формулата също се променят в зависимост от това дали използвате формулата в обобщена таблица с много групи и филтри, или в изчисляема колона без филтри и минимален контекст.

Да предположим например, че създавате тази проста формула, която сумира стойностите в колоната Печалба на таблицата "Продажби" :

=SUM('Продажби'[Печалба])

Ако използвате тази формула в изчисляема колона в таблицата "Продажби" , резултатите за формулата ще бъдат еднакви за цялата таблица, защото контекстът на заявката за формулата винаги е целият набор от данни на таблицата "Продажби" . Вашите резултати ще имат печалба за всички региони, всички продукти, всички години и т.н.

Обикновено обаче не искате да виждате същия резултат стотици пъти, но вместо това искате да получите печалбата за определена година, определена страна или регион, конкретен продукт или комбинация от тези и след това да получите общата сума.

В обобщена таблица е лесно да промените контекста, като добавяте или премахвате заглавки на колони и редове и като добавяте или премахвате сегментатори. Можете да създадете формула като тази по-горе по мярка и след това да я пуснете в обобщена таблица. Всеки път, когато добавяте заглавия на колони или редове към обобщената таблица, променяте контекста на заявката, в която се изчислява мярката. Операциите за изрязване и филтриране също засягат контекста. Следователно една и съща формула, използвана в обобщена таблица, се изчислява в различен контекст на заявката за всяка клетка.

Най-горе на страницата

Контекст на филтъра

Контекстът на филтъра се добавя, когато зададете ограничения на филтъра за набора от стойности, позволени в колона или таблица, като използвате аргументи във формула. Контекстът на филтъра се прилага върху друг контекст, като контекст на ред или контекст на заявка.

Например обобщената таблица изчислява стойностите си за всяка клетка на базата на заглавията на редовете и колоните, както е описано в предишния раздел в контекста на заявката. Обаче в мерките или изчисляемите колони, които добавяте към обобщената таблица, можете да зададете изрази за филтриране, за да контролирате стойностите, които се използват от формулата. Можете също да изчистите избирателно филтрите за определени колони.

За повече информация как да създавате филтри във формули, вижте Функции за филтриране.

За пример как могат да бъдат изчистени филтрите, за да се създадат общи суми, вж. функцията ALL.

За примери как избирателно да изчиствате и прилагате филтри във формули, вж. функцията ALLEXCEPT.

Затова трябва да прегледате дефиницията на мерките или формулите, използвани в обобщена таблица, така че да сте наясно с контекста на филтъра, когато интерпретирате резултатите от формулите.

Най-горе на страницата

Определяне на контекст във формули

Когато създавате формула, Power Pivot за Excel първо проверява за общ синтаксис и след това проверява имената на колоните и таблиците, които предоставяте, спрямо възможните колони и таблици в текущия контекст. Ако Power Pivot не може да намери колоните и таблиците, зададени от формулата, ще получите съобщение за грешка.

Контекстът се определя, както е описано в предишните раздели, като се използват наличните таблици в работната книга, всички релации между таблиците и всички филтри, които са били приложени.

Ако например току-що сте импортирали някои данни в нова таблица и не сте приложили никакви филтри, целият набор от колони в таблицата е част от текущия контекст. Ако имате няколко таблици, които са свързани с релации, и работите в обобщена таблица, която е филтрирана чрез добавяне на заглавия на колони и използване на сегментатори, контекстът включва свързаните таблици и всички филтри върху данните.

Контекстът е мощна концепция, която също може да затрудни отстраняването на неизправности във формули. Препоръчваме ви да започнете с прости формули и релации, за да видите как работи контекстът, и след това да започнете да експериментирате с прости формули в обобщени таблици. Следващият раздел предоставя и някои примери за това как формулите използват различни типове контекст, за да връщат динамично резултати.

Примери за контекст във формули

  • Функцията RELATED разширява контекста на текущия ред, така че да включва стойности в свързана колона. Това ви позволява да извършвате справки. Примерът в тази тема илюстрира взаимодействието на контекста на филтрирането и реда.

  • Функцията FILTER ви позволява да зададете редовете, които да бъдат включени в текущия контекст. Примерите в тази тема също илюстрират как да вградите филтри в други функции, които извършват агрегати.

  • Функцията ALL задава контекст във формула. Можете да го използвате, за да заместите филтрите, които се прилагат в резултат на контекста на заявката.

  • Функцията ALLEXCEPT ви позволява да премахнете всички филтри освен тези, които сте задали. И двете теми включват примери, които ще ви преведат през създаването на формули и разбирането на сложни контексти.

  • Функциите EARLIER и EARLIEST ви позволяват да обхождате циклично таблиците чрез извършване на изчисления, докато препращате към стойност от вътрешен цикъл. Ако сте запознати с концепцията за рекурсия и с вътрешните и външните цикли, ще оцените силата, която функциите EARLIER и EARLIEST предоставят. Ако сте начинаещи в тези концепции, трябва да следвате стъпките в примера внимателно, за да видите как се използват вътрешният и външният контекст в изчисленията.

Най-горе на страницата

Цялост на връзките

Този раздел описва някои разширени понятия, свързани с липсващи стойности в Power Pivot таблици, които са свързани с релации. Този раздел може да е полезен за вас, ако имате работни книги с множество таблици и сложни формули и искате помощ при разбирането на резултатите.

Ако сте нови в концепциите за релационни данни, ви препоръчваме първо да прочетете уводната тема – Общ преглед на релациите.

Цялост на връзките и Power Pivot релации

Power Pivot не изисква поддържането на целостта на връзките между две таблици, за да се дефинира валидна релация. Вместо това в края "един" на всяка релация "един към много" се създава празен ред и се използва за обработка на всички несъответстващи редове от свързаната таблица. Той ефективно се държи като SQL външно съединение.

Ако в обобщените таблици групирате данни от едната страна на релацията, всички несъответстващи данни от страната "много" на релацията се групират заедно и ще бъдат включени в общите суми със заглавие на празен ред. Празното заглавие е приблизително еквивалентно на "неизвестен член".

Разбиране на неизвестния член

Концепцията на неизвестния член вероятно ви е позната, ако сте работили с многомерни системи за бази данни, като например Услуги за анализ на SQL Server. Ако изразът е нов за вас, следващият пример обяснява какво представлява неизвестният член и как той влияе върху изчисленията.

Да предположим, че създавате изчисление, което сумира месечните продажби за всеки магазин, но в една колона в таблицата "Продажби" липсва стойност за името на магазина. Имайки предвид, че таблиците за магазина и продажбите са свързани с името на магазина, какво очаквате да се случи във формулата? Как трябва групата с обобщена таблица или да покаже стойностите за продажби, които не са свързани със съществуващо хранилище?

Този проблем е често срещан в складовете за данни, където големите таблици с данни за фактите трябва да бъдат логически свързани с таблици с размерности, които съдържат информация за хранилища, региони и други атрибути, които се използват за категоризиране и изчисляване на факти. За да разрешите проблема, всички нови факти, които не са свързани със съществуващ обект, временно се присвояват на неизвестния член. Ето защо несвързаните факти ще се показват групирани в обобщена таблица под празно заглавие.

Обработка на празни стойности спрямо празен ред

Празните стойности са различни от празните редове, които са добавени, за да поберат неизвестния член. Празната стойност е специална стойност, която се използва за представяне на нули, празни низове и други липсващи стойности. За повече информация относно празната стойност, както и други типове данни на DAX, вижте Типове данни в модели на данни.

Най-горе на страницата

Нуждаете ли се от още помощ?

Искате ли още опции?

Разгледайте ползите от абонамента, прегледайте курсовете за обучение, научете как да защитите устройството си и още.

Общностите ви помагат да задавате и отговаряте на въпроси, да давате обратна връзка и да получавате информация от експерти с богати знания.