Funkcja ALLSELECTED (język DAX)
Usuwa filtry kontekstowe z kolumn i wierszy w bieżącym zapytaniu, zachowując wszystkie inne kontekstowe lub jawne filtry.
Funkcja ALLSELECTED pobiera kontekst reprezentujący wszystkie wiersze i kolumny w zapytaniu, a jednocześnie zachowuje jawne filtry i konteksty inne niż filtry wierszy i kolumn. Za pomocą tej funkcji można tworzyć sumy wizualne w zapytaniach.
Składnia
ALLSELECTED([<tableName> | <columnName>])
Parametry
tableName
Nazwa istniejącej tabeli utworzona z użyciem standardowej składni języka DAX. Ten parametr nie może być wyrażeniem. Jest to parametr opcjonalny.columnName
Nazwa istniejącej kolumny utworzona z użyciem standardowej składni języka DAX, zazwyczaj w pełni kwalifikowana. Nie może być wyrażeniem. Jest to parametr opcjonalny.
Wartość zwracana
Kontekst zapytania bez filtrów kolumn i wierszy.
Uwagi
Ta funkcja przyjmuje jeden argument lub nie przyjmuje argumentów. Jeśli jest używany jeden argument, jest to argument tableName lub columnName.
Ta funkcja działa inaczej niż funkcja ALL(), ponieważ zachowuje wszystkie filtry bezpośrednio ustawione w zapytaniu oraz wszystkie filtry kontekstowe inne niż filtry wierszy i kolumn.
Przykład
W poniższym przykładzie pokazano sposób generowania różnych poziomów sum wizualnych w raporcie w formie tabeli przy użyciu wyrażeń języka DAX. W raporcie dwa (2) poprzednie filtry zostały zastosowane do danych Reseller Sales; jeden to Sales Territory Group = Europe, a drugi to Promotion Type = Volume Discount. Po zastosowaniu filtrów można obliczać sumy wizualne dla całego raportu, wartości All Years i wartości All Product Categories. Ponadto w celach informacyjnych zostanie też obliczona suma końcowa dla wartości All Reseller Sales. Jej obliczenie będzie wymagać usunięcia wszystkich filtrów z raportu. Obliczenie poniższego wyrażenia języka DAX spowoduje utworzenie tabeli, która będzie zawierać wszystkie informacje niezbędne do utworzenia tabeli z sumami wizualnymi.
define
measure 'Reseller Sales'[Reseller Sales Amount]=sum('Reseller Sales'[Sales Amount])
measure 'Reseller Sales'[Reseller Grand Total]=calculate(sum('Reseller Sales'[Sales Amount]), ALL('Reseller Sales'))
measure 'Reseller Sales'[Reseller Visual Total]=calculate(sum('Reseller Sales'[Sales Amount]), ALLSELECTED())
measure 'Reseller Sales'[Reseller Visual Total for All of Calendar Year]=calculate(sum('Reseller Sales'[Sales Amount]), ALLSELECTED('Date'[Calendar Year]))
measure 'Reseller Sales'[Reseller Visual Total for All of Product Category Name]=calculate(sum('Reseller Sales'[Sales Amount]), ALLSELECTED('Product Category'[Product Category Name]))
evaluate
CalculateTable(
//CT table expression
summarize(
//summarize table expression
crossjoin(distinct('Product Category'[Product Category Name]), distinct('Date'[Calendar Year]))
//First Group by expression
, 'Product Category'[Product Category Name]
//Second Group by expression
, 'Date'[Calendar Year]
//Summary expressions
, "Reseller Sales Amount", [Reseller Sales Amount]
, "Reseller Grand Total", [Reseller Grand Total]
, "Reseller Visual Total", [Reseller Visual Total]
, "Reseller Visual Total for All of Calendar Year", [Reseller Visual Total for All of Calendar Year]
, "Reseller Visual Total for All of Product Category Name", [Reseller Visual Total for All of Product Category Name]
)
//CT filters
, 'Sales Territory'[Sales Territory Group]="Europe", 'Promotion'[Promotion Type]="Volume Discount"
)
order by [Product Category Name], [Calendar Year]
Wykonanie w programie SQL Server Management Studio powyższego wyrażenia w odniesieniu do modelu AdventureWorks DW Tabular Model 2012 spowoduje uzyskanie następujących wyników:
[Product Category Name] |
[Calendar Year] |
[Reseller Sales Amount] |
[Reseller Grand Total] |
[Reseller Visual Total] |
[Reseller Visual Total for All of Calendar Year] |
[Reseller Visual Total for All of Product Category Name] |
---|---|---|---|---|---|---|
Accessories |
2000 |
80450596.9823 |
877006.7987 |
38786.018 |
||
Accessories |
2001 |
80450596.9823 |
877006.7987 |
38786.018 |
||
Accessories |
2002 |
625.7933 |
80450596.9823 |
877006.7987 |
38786.018 |
91495.3104 |
Accessories |
2003 |
26037.3132 |
80450596.9823 |
877006.7987 |
38786.018 |
572927.0136 |
Accessories |
2004 |
12122.9115 |
80450596.9823 |
877006.7987 |
38786.018 |
212584.4747 |
Accessories |
2005 |
80450596.9823 |
877006.7987 |
38786.018 |
||
Accessories |
2006 |
80450596.9823 |
877006.7987 |
38786.018 |
||
Bikes |
2000 |
80450596.9823 |
877006.7987 |
689287.7939 |
||
Bikes |
2001 |
80450596.9823 |
877006.7987 |
689287.7939 |
||
Bikes |
2002 |
73778.938 |
80450596.9823 |
877006.7987 |
689287.7939 |
91495.3104 |
Bikes |
2003 |
439771.4136 |
80450596.9823 |
877006.7987 |
689287.7939 |
572927.0136 |
Bikes |
2004 |
175737.4423 |
80450596.9823 |
877006.7987 |
689287.7939 |
212584.4747 |
Bikes |
2005 |
80450596.9823 |
877006.7987 |
689287.7939 |
||
Bikes |
2006 |
80450596.9823 |
877006.7987 |
689287.7939 |
||
Clothing |
2000 |
80450596.9823 |
877006.7987 |
95090.7757 |
||
Clothing |
2001 |
80450596.9823 |
877006.7987 |
95090.7757 |
||
Clothing |
2002 |
12132.4334 |
80450596.9823 |
877006.7987 |
95090.7757 |
91495.3104 |
Clothing |
2003 |
58234.2214 |
80450596.9823 |
877006.7987 |
95090.7757 |
572927.0136 |
Clothing |
2004 |
24724.1209 |
80450596.9823 |
877006.7987 |
95090.7757 |
212584.4747 |
Clothing |
2005 |
80450596.9823 |
877006.7987 |
95090.7757 |
||
Clothing |
2006 |
80450596.9823 |
877006.7987 |
95090.7757 |
||
Components |
2000 |
80450596.9823 |
877006.7987 |
53842.2111 |
||
Components |
2001 |
80450596.9823 |
877006.7987 |
53842.2111 |
||
Components |
2002 |
4958.1457 |
80450596.9823 |
877006.7987 |
53842.2111 |
91495.3104 |
Components |
2003 |
48884.0654 |
80450596.9823 |
877006.7987 |
53842.2111 |
572927.0136 |
Components |
2004 |
80450596.9823 |
877006.7987 |
53842.2111 |
212584.4747 |
|
Components |
2005 |
80450596.9823 |
877006.7987 |
53842.2111 |
||
Components |
2006 |
80450596.9823 |
877006.7987 |
53842.2111 |
W raporcie znajdują się następujące kolumny:
Reseller Sales Amount
Rzeczywista wartość Reseller Sales dla danego roku i kategorii produktów. Ta wartość jest widoczna w komórce na środku raportu, na przecięciu wartości roku i kategorii.Reseller Visual Total for All of Calendar Year
Wartość sumy dla kategorii produktów za wszystkie lata. Ta wartość jest widoczna na końcu kolumny lub wiersza dla danej kategorii produktów i wszystkich lat uwzględnionych w raporcie.Reseller Visual Total for All of Product Category Name
Wartość sumy dla roku we wszystkich kategoriach produktów. Ta wartość jest widoczna na końcu kolumny lub wiersza dla danego roku i wszystkich kategorii produktów uwzględnionych w raporcie.Reseller Visual Total
Wartość sumy dla wszystkich lat i kategorii produktów. Ta wartość zazwyczaj jest widoczna w prawym dolnym rogu tabeli.Reseller Grand Total
Jest to suma końcowa dla całej sprzedaży wszystkich odsprzedawców obliczona przed zastosowaniem filtrów; należy zauważyć, że jest ona inna niż suma [Reseller Visual Total]. Należy pamiętać, że ten raport zawiera dwa (2) filtry: jeden dla wartości Product Category Group, a drugi dla wartości Promotion Type.
W poniższym przykładzie pokazano użycie funkcji ALLSELECTED() bez argumentów w celu zaprezentowania sposobu obliczania stosunku dla wartości sumy w tabeli, która została przefiltrowana za pomocą fragmentatorów poziomych i pionowych. W tym przykładzie jest używany program SQL Server 2012, program PowerPivot for Excel oraz arkusz Przykładowe dane programu PowerPivot (DAX_AdventureWorks).
Na liście pól programu PowerPivot przeciągnij kolumnę ResellerSales[SalesAmount_USD] do obszaru Wartości.
Przeciągnij kolumnę Promotion[PromotionType] do obszaru Fragmentatory w pionie. Wybierz fragmentatory dla wartości Wycofany produkt, Zbyt duże zapasy i Rabat sezonowy.
Przeciągnij kolumnę SalesTerritory[SalesTerritoryGroup] do obszaru Fragmentatory w poziomie. Wybierz fragmentator dla wartości Europe.
Wartość Suma SalesAmount_USD powinna być równa 19 614,37 USD.
Przeciągnij kolumnę ProductCategory[ProductCategoryName] do obszaru Etykiety wierszy i kolumnę DateTime[CalendarYear] do obszaru Etykiety kolumn.
Tabela powinna wyglądać podobnie do następującej:
SalesTerritoryGroup
Europe
North America
Pacific
ND
PromotionType
Wycofany produkt
Suma SalesAmount_USD
Etykiety kolumn
Zbyt duże zapasy
Etykiety wierszy
2006
2007
2008
Suma końcowa
Nowy produkt
Accessories
$1,111.22
$3,414.43
$4,525.66
Brak rabatu
Bikes
$8,834.94
$6,253.78
$15,088.72
Rabat sezonowy
Suma końcowa
$9,946.16
$3,414.43
$6,253.78
$19,614.37
Rabat hurtowy
Używając kalkulatora ręcznego, sprawdź, czy kwota 3 414,43 USD (za towary z kategorii Accessories w 2007 roku) odpowiada 17,41% z kwoty 19 614,37 USD.
Używając kalkulatora ręcznego, sprawdź, czy kwota 6 253,78 USD (za towary z kategorii Bikes w 2008 roku) odpowiada 31,88% z kwoty 19 614,37 USD.
Używając kalkulatora ręcznego, sprawdź, czy kwota 15 088,72 USD (suma końcowa dla towarów z kategorii Bikes) odpowiada 76,93% z kwoty 19 614,37 USD.
Usuń kolumnę ResellerSales[SalesAmount_USD] z obszaru Wartości.
Utwórz miarę o nazwie Stosunek do sprzedaży odsprzedawców w tabeli ResellerSales, używając następującej formuły (sformatuj wyniki jako wartości procentowe):
=SUM(ResellerSales_USD[SalesAmount_USD])/ CALCULATE(SUM(ResellerSales_USD[SalesAmount_USD]), ALLSELECTED())
Tabela powinna wyglądać podobnie do następującej:
SalesTerritoryGroup |
||||||
Europe |
North America |
|||||
Pacific |
ND |
|||||
PromotionType |
||||||
Wycofany produkt |
Stosunek do sprzedaży odsprzedawców |
Etykiety kolumn |
||||
Zbyt duże zapasy |
Etykiety wierszy |
2006 |
2007 |
2008 |
Suma końcowa |
|
Nowy produkt |
Accessories |
5.67 % |
17.41 % |
23.07 % |
||
Brak rabatu |
Bikes |
45.04 % |
31.88 % |
76.93 % |
||
Rabat sezonowy |
Suma końcowa |
50.71 % |
17.41 % |
31.88 % |
100.00 % |
|
Rabat hurtowy |
Porównaj wyniki obliczeń wykonanych za pomocą kalkulatora ręcznego z wynikami miary Stosunek do sprzedaży odsprzedawców — powinny być takie same; ustaloną wartością mianownika jest wartość u dołu tabeli.
W mianowniku formuły CALCULATE jest używana funkcja ALLSELECTED, więc mianownik reprezentuje sumę końcową sprzedaży (u dołu tabeli), po zastosowaniu fragmentatorów pionowych, poziomych i strony, ale przed zastosowaniem fragmentatorów wierszy i kolumn.
Uwaga: jeśli w wyrażeniu znajdują się filtry bezpośrednie, również te filtry zostaną zastosowane do wyrażenia.