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]
)
Author: Jonathan Leffler, 2011-12-21

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ć:)

 46
Author: Tullo_x86,
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])
 2
Author: Noe Zavala,
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