Този раздел описва как се създават филтри във формулите на изразите за анализ на данни (DAX). Можете да създадете филтри във формулите, за да ограничите стойностите от изходните данни, които се използват в изчисленията. Можете да направите това, като зададете таблица като входни данни за формулата и след това дефинирате израз за филтриране. Изразът за филтриране, който предоставите, се използва за заявка към данните и връща само подмножество от първичните данни. Филтърът се прилага динамично всеки път, когато актуализирате резултатите от формулата, в зависимост от текущия контекст на вашите данни.
В тази статия
Създаване на филтър в таблица, използвана във формула
Можете да приложите филтри във формули, които приемат за входни данни таблица. Вместо да въвеждате име на таблица, използвате функцията FILTER, за да дефинирате подмножество от редове от указаната таблица. Това подмножество след това се подава на друга функция за операции, като например агрегиране по избор.
Нека например да имате таблица с данни с информация за поръчки за дистрибутори, и искате да изчислите колко е продал всеки дистрибутор. Обаче искате да покажете сумата на продажбите само за тези дистрибутори, които са продали няколко бройки от вашите продукти с по-висока стойност. Следващата формула, базирана на примерната работна книга на DAX, показва един пример как можете да създадете това изчисление с помощта на филтър:
=SUMX(
FILTER ('ResellerSales_USD', 'ResellerSales_USD' [Количество] > 5 &&
'ResellerSales_USD'[ProductStandardCost_USD] > 100),
'ResellerSales_USD'[SalesAmt]
)
Първата част на формулата задава една от агрегатните функции на Power Pivot, която приема като аргумент таблица. SUMX изчислява сума върху таблица.
Втората част от формулата
FILTER(table, expression),указваSUMXкои данни да се използват.SUMXИзисква таблица или израз, който дава като резултат таблица. Тук вместо да използвате всички данни в таблица, използвате функцията,FILTERза да зададете кои редове от таблицата да се използват.
Изразът за филтър се състои от две части: първата част дава име на таблицата, към която се прилага филтърът. Втората част дефинира израз, който да се използва като условие за филтриране. В този случай филтрирате по дистрибутори, които са продали повече от 5 бройки, и продукти, които струват повече от 100 щ.д. Операторът && е логически оператор "AND", който показва, че и двете части на условието трябва да бъдат изпълнени, за да принадлежи редът към филтрираното подмножество.Третата част от формулата указва
SUMXна функцията кои стойности трябва да бъдат сумирани. В този случай използвате само сумата на продажбите.
Обърнете внимание, че функции като FILTER, които връщат таблица, никога не връщат таблицата или редовете директно, а винаги са вградени в друга функция. За повече информация относно FILTER и други функции, използвани за филтриране, включително още примери, вж. "Функции за филтриране (DAX)".Забележка
Изразът за филтъра се влияе от контекста, в който се използва. Ако например използвате филтър в мярка, а мярката се използва в обобщена таблица или обобщена диаграма, върнатото подмножество от данни може да бъде засегнато от допълнителни филтри или сегментатори, които потребителят е приложил в обобщената таблица. За повече информация относно контекста вж. "Контекст във формули на DAX".
Филтри, които премахват повторения
Освен филтриране за конкретни стойности, можете да върнете уникален набор от стойности от друга таблица или колона. Това може да бъде полезно, когато искате да преброите броя на уникалните стойности в колона или да използвате списък с уникални стойности за други операции. DAX предоставя две функции за връщане на различни стойности: функцията DISTINCT и функцията VALUES.
- Функцията DISTINCT проверява една колона, която сте задали като аргумент на функцията, и връща нова колона, съдържаща само различните стойности.
- Функцията VALUES връща също списък с уникални стойности, но също така връща неизвестния член. Това е полезно, когато използвате стойности от две таблици, които са свързани от релация, и една стойност липсва в едната таблица, а присъства в другата. За повече информация за неизвестния член вижте "Контекст във формули на DAX".
И двете функции връщат цяла колона със стойности; Затова използвате функциите, за да получите списък със стойности, който след това се подава на друга функция. Например можете да използвате следната формула, за да получите списък с отделните продукти, продавани от конкретен риселър, като използвате уникалния продуктов ключ, и след това да преброите продуктите в този списък с помощта на функцията COUNTROWS:
=COUNTROWS(DISTINCT('ResellerSales_USD'[ProductKey]))
Как контекстът влияе на филтрите
Когато добавяте DAX формула към обобщена таблица или обобщена диаграма, резултатите от формулата могат да бъдат повлияни от контекста. Ако работите в таблица на Power Pivot, контекстът е текущият ред и неговите стойности. Ако работите в обобщена таблица или обобщена диаграма, контекстът означава набора или подмножеството от данни, което се дефинира чрез операции като нарязване или филтриране. Проектът на обобщената таблица или обобщената диаграма също налага свой собствен контекст. Ако например създадете обобщена таблица, която групира продажбите по региони и години, в обобщената таблица ще се показват само данните, които се отнасят за тези региони и години. Следователно всички мерки, които добавяте към обобщената таблица, се изчисляват в контекста на заглавията на редовете и колоните плюс всички филтри във формулата за мярка.
За повече информация вж. "Контекст във формули на DAX".
Премахване на филтри
Когато работите със сложни формули, може да искате да знаете точно какви са текущите филтри или да промените филтриращата част от формулата. DAX предоставя няколко функции, които ви позволяват да премахвате филтри и да контролирате кои колони се запазват като част от контекста на текущия филтър. Този раздел предоставя общ преглед на начина, по който тези функции влияят върху резултатите във формула.
Заместване на всички филтри с функцията ALL
Можете да използвате ALL функцията, за да заместите филтрите, които са били приложени по-рано, и да върнете всички редове в таблицата на функцията, която извършва агрегатната или друга операция. Ако използвате една или повече колони вместо таблица като аргументи на ALL, ALL функцията връща всички редове, игнорирайки всякакви контекстни филтри.
Забележка
Ако сте запознати с терминологията за релационни бази данни, може да мислите за ALL генериране на естественото ляво външно съединение на всички таблици.
Да предположим например, че имате таблиците "Продажби" и "Продукти" и искате да създадете формула, която ще изчисли сумата на продажбите за текущия продукт, разделена на продажбите за всички продукти. Трябва да имате предвид факта, че ако формулата се използва в мярка, потребителят на обобщената таблица може да използва сегментатор за филтриране за конкретен продукт, като в редовете е изписано името на продукта. Следователно, за да получите истинската стойност на знаменателя, независимо от всички филтри или сегментатори, трябва да добавите функцията ALL, за да заместите всички филтри. Следващата формула е един пример как да използвате ALL, за да заместите ефектите от предишни филтри:
=SUM (Sales[Amount])/SUMX(Sales[Amount], FILTER(Sales, ALL(Products)))
- Първата част от формулата – SUM (Sales[Amount]) – изчислява числителя.
- Сумата взема предвид текущия контекст, което означава, че ако добавите формулата в изчисляема колона, се прилага контекстът на реда, а ако добавите формулата в обобщена таблица като мярка, се прилагат всички филтри, приложени в обобщената таблица (контекста на филтъра).
- Втората част от формулата изчислява знаменателя. Функцията ALL замества всички филтри, които може да са приложени към таблицата
Products.
За повече информация, включително подробни примери, вижте функцията ALL.
Заместване на определени филтри с функцията ALLEXCEPT
Функцията ALLEXCEPT също замества съществуващите филтри, но можете да зададете някои от съществуващите филтри да бъдат запазени. Колоните, които посочвате като аргументи на функцията ALLEXEN, указват кои колони ще продължат да се филтрират. Ако искате да игнорирате филтрите на повечето колони, но не на всички, ALLEXCEPT е по-удобно от ALL. Функцията ALLEXCEPT е особено полезна, когато създавате обобщени таблици, които може да са филтрирани по много различни колони, и искате да управлявате стойностите, използвани във формулата. За повече информация, включително подробен пример как да използвате ALLEXCEPT в обобщена таблица, вижте функцията ALLEXCEPT