Witam, kiedy stosować named sety statyczne, a kiedy dynamiczne? Jak zdefiniować zapytanie z named setem dynamicznym w sekcji WHERE?
Witam, kiedy stosować named sety statyczne, a kiedy dynamiczne? Jak zdefiniować zapytanie z named setem dynamicznym w sekcji WHERE?
Nazwane zestawy domyślnie tworzone są jako statyczne, co oznacza, że ich konstrukcja odbywa się podczas przetwarzania kostki i jest stała do momentu kolejnego przetwarzania. Konsekwencją jest brak możliwości kontekstowego wykorzystania takiego zestawu w zapytaniach mdx wykorzystujących oś przecięcia.
Rozważmy następujący przykład:
CREATE SET InternetSalesCountries AS NonEmpty( [Customer].[Geography].[Country].Members, [Measures].[Internet Sales Amount]);
Definiowany przez instrukcję CREATE SET zestaw zostanie utworzony ze wszystkich składowych poziomu [Country] posiadających wartość na przecięciu z miarą [Internet Sales Amount]. Ponieważ statyczny zestaw nie zmienia się wraz z zastosowaniem przecięcia, poniższe przykłady zwrócą identyczny zestaw elementów poziomu [Country]:
//sprzedaż internetowa rok 2012 SELECT [Measures].[Internet Sales Extended Amount] ON COLUMNS, InternetSalesCountries ON ROWS FROM [Sales] WHERE ([Date].[Calendar].[Calendar Year].&[2012]) //sprzedaż internetowa rok 2013 SELECT [Measures].[Internet Sales Extended Amount] ON COLUMNS, InternetSalesCountries ON ROWS FROM [Sales] WHERE ([Date].[Calendar].[Calendar Year].&[2013])
Aby wyświetlić jedynie te kraje z których pochodzili klienci w roku 2012 i odpowiednio 2013, należy utworzyć zestaw dynamiczny:
CREATE DYNAMIC SET InternetSalesCountries AS NonEmpty( [Customer].[Geography].[Country].Members, [Measures].[Internet Sales Amount]);
w takim przypadku poniższe zapytanie zwróci jedynie kraje klientów z roku 2012:
SELECT [Measures].[Internet Sales Extended Amount] ON COLUMNS, InternetSalesCountries ON ROWS FROM [Sales] WHERE ([Date].[Calendar].[Calendar Year].&[2012])
Ponieważ zestaw dynamiczny uwzględnia oś przecięcia z klauzuli WHERE, ale nie uwzględnia pozostałych osi, kryteria dla dynamicznego zestawu powinny zostać umieszczone właśnie w klauzuli WHERE.