MDX obliczony filtr member według atrybutu dimension
Chcę utworzyć obliczony element i filtrować go według wymiaru. To działa przykład:
(
[Policy].[Policy Status].&[Void],
[Policy].[Tran Type].&[Renewal],
[Measures].[FK Policy Distinct Count]
)
Ale jeśli chcę to filtrować w ten sposób
(
[Policy].[Policy Status].&[Void],
[Policy].[Policy Status].&[Policy],
[Measures].[FK Policy Distinct Count]
)
To nie działa. Mówi, że ta sama hierarchia pokazuje się wiele razy w krotce.
Inna sprawa, jak wykluczyć wiersze? Oto pomysł...
(
![Policy].[Policy Status].&[Void],
![Policy].[Policy Status].&[Policy],
[Measures].[FK Policy Distinct Count]
)
2 answers
Po pierwsze, ważne jest, aby zrozumieć składnię MDX i to, jak odnosiła się ona do pojęć krotek, członów i zestawów.
Krotki
Użycie nawiasów oznacza krotkę:
(
[Policy].[Policy Status].&[Void],
[Policy].[Tran Type].&[Renewal],
[Measures].[FK Policy Distinct Count]
)
Krotka może zawierać tylko jednego członka z dowolnej hierarchii.
Zestawy
Aby pobrać wyniki z wielu członków w tej samej hierarchii, musisz wyszukać zestaw. Zestaw MDX oznaczany jest nawiasami klamrowymi:
{
[Policy].[Policy Status].&[Void],
[Policy].[Policy Status].&[Policy]
}
Zbiór jest, z definicji ,
Uporządkowany zbiór zero, jedna lub więcej krotek.
Tak więc, jeśli chcesz zapytać o miarę [FK Policy Distinct Count]
przeciwko obu tym elementom, krotki zbioru muszą zawierać miarę:
{
( [Policy].[Policy Status].&[Void], [Measures].[FK Policy Distinct Count] ),
( [Policy].[Policy Status].&[Policy], [Measures].[FK Policy Distinct Count] )
}
Aby uprościć to wyrażenie, możliwe jest skrzyżowanie dwóch zbiorów o różnej wymiarowości:
{
[Policy].[Policy Status].&[Void],
[Policy].[Policy Status].&[Policy],
[Policy].[Policy Status].&[Something],
[Policy].[Policy Status].&[Something else],
[Policy].[Policy Status].&[Yet another member]
}
*
{
[Measures].[FK Policy Distinct Count]
}
Z wyłączeniem wierszy
Teraz, gdy możemy zdefiniować zestawy, nadszedł czas, aby usunąć niektóre elementy z jednego. W twoim przykładzie brzmi to jak chcesz zacząć od poziomu (który, dla silnika MDX, jest tylko predefiniowanym zestawem w sześcianie, który zawiera każdy członek na tym poziomie hierarchii), i wykluczyć niektóre członkowie. MDX ma wiele funkcji, które działają na zestawach, a my użyjemy EXCEPT
.
Funkcja EXCEPT
pobiera dwa parametry, pierwszy to zestaw do usunięcia z, a drugi to zestaw, który powinien zostać usunięty z pierwszego. Zwraca zestaw.
W tym przykładzie zamierzam Załóżmy, że [Policy].[Policy Status]
jest hierarchią atrybutów i że jej jedyny poziom ma unikalną nazwę [Policy].[Policy Status].[Policy Status]
.
EXCEPT(
[Policy].[Policy Status].[Policy Status],
{
[Policy].[Policy Status].&[Void],
[Policy].[Policy Status].&[Policy]
}
)
Zwróci to wszystkich członków z poziomu [Policy].[Policy Status].[Policy Status]
, z wyjątkiem [Policy].[Policy Status].&[Void]
i [Policy].[Policy Status].&[Policy]
.
Aby uzyskać użyteczne wyniki, możemy połączyć wynik za pomocą miary:
EXCEPT(
[Policy].[Policy Status].[Policy Status],
{
[Policy].[Policy Status].&[Void],
[Policy].[Policy Status].&[Policy]
}
)
*
{
[Measures].[FK Policy Distinct Count]
}
Używanie zbioru jako pojedynczego członu
Zestawy są ładne, ale czasami wszystko, co chcemy od nich jest traktowanie ich jako jednego członka, jak w obliczonym wymogu członka. Aby to zrobić, musimy użyć funkcja agregacji. Funkcje agregujące przyjmują zbiór i zwracają element reprezentujący cały zbiór.
Jest ich wiele, a właściwy do użycia zależy od danych przechowywanych w twojej kostce: MIN
, MAX
, COUNT
, i SUM
to niektóre z nich (zobacz "Funkcje numeryczne" w odwołanie do funkcji MDX dla bardziej kompletnej listy). W tym przykładzie przyjmę Twoje Agregaty wymiarowe za pomocą sumy:
SUM(
EXCEPT(
[Policy].[Policy Status].[Policy Status],
{
[Policy].[Policy Status].&[Void],
[Policy].[Policy Status].&[Policy]
}
),
[Measures].[FK Policy Distinct Count]
)
Tutaj, przeszedłem środek, aby być zagregowane jako drugi parametr do sumy.
MDX jest złożonym językiem, który obsługuje wiele typowych i nietypowych operacji zestawów. Jeśli jeszcze tego nie zrobiłeś, radzę poświęcić trochę czasu na przeczytanie dokumentacji dostępnej online lub chwycić dobrą książkę MDX. Jest co wiedzieć:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-22 15:33:56
Wypróbuj tę składnię:
SUM({[Policy].[Policy Status].&[Void], [Policy].[Policy Status].&[Policy]}, [Measures].[FK Policy Distinct Count])
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-21 18:03:28