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

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

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

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

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

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

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

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

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

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

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

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

Да предположим например, че създавате изчисляема колона, =[Навло] + [Данък]

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

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

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

= [Навло] + RELATED('Region'[TaxRate])

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

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

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

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

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

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

=MAXX(FILTER(Sales;[ProdKey]=EARLIER([ProdKey]));Продажби[OrderQty])

За подробен преглед на тази формула вж. ПО-РАНО.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Функциите ПО-РАНО и EARLIEST ви позволяват да преминавате през таблици, като извършвате изчисления, като същевременно препращате към стойност от вътрешен цикъл. Ако сте запознати с концепцията за повторение и с вътрешните и външните контури, ще оцените силата, която предоставят функциите ПО-РАНО и EARLIEST. Ако сте нови в тези понятия, трябва внимателно да следвате стъпките в примера, за да видите как се използват вътрешните и външните контексти в изчисленията.

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

Цялост на референциалната информация

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

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

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

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

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

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

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

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

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

Третиране на празни стойности спрямо празния ред

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

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

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

Разширете уменията си

Преглед на обучението >

Получавайте първи новите функции

Присъединете се към Microsoft приобщени >

Беше ли полезна тази информация?

Доколко сте доволни от качеството на езика?
Какво е повлияло на вашия потребителски опит?

Благодарим ви за обратната връзка!

×