Контекст във формули DAX

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

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

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

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

Подробна информация за контекста

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

=Maxx(Filter(Sales,[ProdKey]=EARLIER([ProdKey])),Sales[OrderQty])

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

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

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

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

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

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

Например можете да създадете тази проста формула, която сумира стойностите в колоната печалба от продажби table:=SUM('Sales'[Profit]).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Референтна цялост

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

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

Референтна цялост и релации в Power Pivot

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

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

Подробна информация за неизвестния член

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

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

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

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

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

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

Разширете уменията си в Office
Преглед на обучението
Получавайте първи новите функции
Присъединете се към участниците в Office Insider

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

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

Благодарим ви за вашата обратна връзка. Изглежда, че ще бъде полезно да ви свържем с един от нашите агенти по поддръжката на Office.

×