Wsparcie Techniczne

SAS OLAP Serwer

Najczęstsze problemy i pytania związane z architekturą SAS OLAP Serwer

Dowiedz się więcej na temat pracy z serwerem OLAP oraz naucz się korzystać z Olap Cube Studio.

Jaka jest aktualna wersja SAS i OLAP Cube Studio?

LAP Cube Studio 4.4 dla wersji SAS 9.4M1.

Gdzie znajdują się informacje o hot-fixach dla aktualnej wersji serwera OLAP?

Aktualne hotfixy dla wszystkich wersji SAS znajdują się tutaj.
Należy wybrać system operacyjny, stosowny produkt (WRS,EG etc.), ściągnąć i zainstalować poprawkę.

Gdzie znajduje się podręcznik użytkownika OLAP Server'a oraz języka MDX?

Podręczniki użytkownika OLAP Serwera oraz języka MDX dla wersji 9.1, 9.2, 9.3 oraz 9.4 są dostępne na amerykańskich stronach Wsparcia Technicznego.

Gdzie znajdują się informacje na temat zmian w wersji OlAP 9.4 w stosunku do wersji poprzedniej?

Wszystkie zmiany opisane są w dokumentacji: What's New in SAS(R) 9.4.

W jaki sposób przenieść (przemigrować) kostkę z wersji 9.1 do 9.2/9.3?

Przeniesienie kostki z SAS9.1 na środowisko 9.2/9.3 nie jest możliwe poprzez opcje export/import dostępne w OCS 9.1. Można to jednak uczynić poprzez narzędzie Export/Import Cubes co dokumentuje nota: SAS Note 36842.

Co zrobić, gdy pojawia się komunikat: "Cube "xxx" exists. Use the DELETE option in PROC OLAP to remove the cube and its registration."

Przed stworzeniem kostki należy usunąć fizyczne pliki kostki. Powyższy komunikat świadczy o tym, że nie zostały one usunięte. Należy to zrobić używając opcji DELETE procedury OLAP, np.

proc olap cube=nazwa_kostki delete;
metasvr host="" port=8561 protocol=bridge
userid="" pw="" repository="Foundation"
olap_schema="SASMain - OLAP Schema";
run;

lub opcji DELETE_PHYSICAL, np.:

proc olap cube=nazwa_kostki delete_physical;
metasvr host="" port=8561 protocol=bridge
userid="" pw="" repository="Foundation"
olap_schema="SASMain - OLAP Schema";
run;

Należy pamiętać, że opcja DELETE usuwa zarówno fizyczne pliki, jak i rejestrację kostki w metadanych, a więc po takiej operacji kostka będzie tworzona od nowa. Jeżeli chcemy zachować np. uprawnienia nałożone na kostkę, należy wykorzystać opcję DELETE_PHYSICAL, która usunie jedynie fizyczne pliki, a następnie uruchomić skróconą wersję proc OLAP:

proc olap cube=nazwa_kostki;
metasvr host="" port=8561 protocol=bridge
userid="" pw="" repository="Foundation"
olap_schema="SASMain - OLAP Schema";
run;

Ta druga możliwość jest stosowana w SAS OLAP Cube Studio przy ponownym tworzeniu kostki.

Co można zrobić, gdy w czasie przeglądania kostki w EG lub AMO dostaję błąd: "The number of components in the set exceeds the MAX SET SIZE limit"

Błąd wynika z ustawienia maksymalnej liczby kombinacji krotek w zapytaniu, które może obsłużyć serwer OLAP. Takie domyślne ograniczenie ma zapobiec sytuacji, w której wszystkie zasoby pamięciowe zostaną wykorzystane przez jedno zapytanie.
Aby zdjąć to ograniczenie należy:

  1. W SMC, rozwinąć Server Manager -> SASApp -> SASApp - Logical OLAP Server -> SASApp - OLAP Server
  2. Spod menu dostępnego pod prawym przyciskiem wybrać 'Properties'.
  3. Wybrać zakładkę options -> kliknąć na 'Advanced Options'.
  4. Ustawić wartość '0'(zero) dla opcji 'Maximum number of tuples in a set'.
  5. Zrestartować serwer OLAP.

Czy jest możliwość podglądu zapytań MDX przesyłanych przez WRS do serwera OLAP?

Aby zobaczyć jakie zapytania mdx są generowane w czasie pracy na kostkach (np. w WRS) należy aktywować logi 'jurnal files'.

Dokładny opis jak to zrobić znajduje się w nocie: 38429.

Czy jest możliwość odebrania użytkownikowi uprawnień do oglądania poszczególnych kolumn w tabeli drill-through na raporcie WRS?

Taka funkcjonalność jest dostępna od wersji SAS9.2M2.
Wystarczy w konsoli metadanych, na wybranej kolumnie odebrać użytkownikowi prawo 'readmetadata'. Wybrana kolumna/y nie będą dla niego widoczne w tabeli drill-through.

Czy dla serwera OLAP jest dostępny mechanizm load balancing?

Od wersji 9.2 jest możliwość wykorzystania techniki 'load balancing' dla serwera OLAP w celu podniesienia wydajności. Można zarówno dodać nową instancję serwera na tym samym środowisku jak i utworzyć ją na innym niezależnym host'cie. Dokładny opis techniki znajduje się w rozdziale Understanding Server Load Balancing, w podręczniku użytkownika: SAS 9.2 Intelligence Platform: Application Server Administration Guide.

Czy istnieją ograniczenia w nazewnictwie kostek OLAP i elementów z nimi związanych?

Kostki: nazwa jest ograniczona do 32 znaków i musi być zgodna z nazewnictwem SAS.
Jeżeli chcemy w nazwie kostki użyć znaków specjalnych (tj. spacje, nawiasy, ampersandy etc) należy ustawić opcję VALIDVARNAME=ANY dla workspace serwera.
Należy pamiętać, że między innymi ze względu na specyfikację języka MDX, używanie znaków specjalnych - []/\ w nazwie kostek nie jest dopuszczalne w żadnej sytuacji (również gdy używamy opcji VALIDVARNAME=ANY).

Wymiary, hierarchie, poziomy i miary: 32 znaki, zgodne z nazewnictwem SAS

Agregaty: 32 znaki. Można stosować znaki []/\ przy użyciu opcji VALIDVARNAME=ANY.

Czy są jakieś ograniczenia/zalecenia co do rozmiaru kostki?

Ograniczenia wynikają z limitów dopuszczalnej liczby wymiarów/hierarchii oraz poziomów, które można zdefiniować w ramach kostki. Zgodnie z zaleceniami SAS nie jest dobrym rozwiązaniem definiowanie kostek z liczbą wymiarów większą niż kilkanaście/kilkadziesiąt sztuk. Limit - 128 wymiarów dla kostki jest jedynie wyznaczeniem górnej granicy, która nie powinna być celem projektanta kostki. Zalecenia wiążą się między innym z ograniczeniami 32-bitowych systemów operacyjnych w stosunku do ilości pamięci jaką można przydzielić procesom oraz z bardzo dużą ilością pamięci jakiej przypuszczalnie będzie potrzebował serwer OLAP obsługując zapytania MDX przesłane do takiej kostki.

Ile wymiarów i hierarchii można zdefiniować dla jednej kostki?

Łączna liczba hierarchii zdefiniowanych dla wszystkich wymiarów nie może przekraczać 128, tzn. kostka może mieć zdefiniowanych:

  • 128 wymiarów z 1 hierarchią
  • 127 wymiarów, z których jeden ma 2 hierarchie, pozostałe po jednej
  • 64 wymiary z 2 hierarchiami itp.

Ile poziomów można zdefiniować dla 1 hierarchii?

Hierarchia może mieć maksymalnie 19 poziomów.

Ile maksymalnie poziomów może być zdefiniowanych dla kostki?

Kostka może mieć maksymalnie 256 poziomów.

Ile miar można maksymalnie zdefiniować w kostce?

1024

Ile elementów może być zdefiniowane dla hierarchii?

Maksymalnie 2^32 per hierarchia.

W mapie informacyjnej opartej o kostkę zdefiniowano filtry. Nie są one jednak widoczne w SAS Web Report Studio. Dlaczego?

Filtry zdefiniowane w mapie zbudowanej na kostce nie są widoczne w WRS. Dokumentuje to nota SN-12960.

Jak można tworzyć elementy wyliczane dla kostek?

Jest kilka metod tworzenia elementów wyliczanych:

  • OLAP Cube Studio
  • Enterprise Guide - można wykorzystać istniejący kreator albo edytor MDX
  • Proc OLAP - globalne elementy wyliczane mogą być tworzone podczas tworzenia kostki, albo dla kostki istniejącej poprzez instrukcję
    DEFINE MEMBER
    'kostka.nazwa' AS
    'wyrażenie_MDX
    <,<format_string="">
    <solve_order=>>';

  • Proc SQL - globalne, dostępne w obrębie sesji oraz tymczasowe; po nawiązaniu połączenia z serwerem OLAP należy wykonać instrukcję: execute (
    member
    kostka.nazwa as
    'wyrażenie_MDX
    <,<format_string="">
    <solve_order=>>'
    ) by olap;
  • Information Map Studio - elementy wyliczane dostępne jedynie poprzez mapy informacyjne

Jak usunąć definicję globalnego elementu wyliczanego?

Globalny element wyliczany może być usunięty za pomocą:

proc OLAP
UNDEFINE MEMBER
'kostka.nazwa';
proc SQL, po nawiązaniu połączenia z serwerem OLAP:
execute (
drop member kostka.nazwa
)by olap;
OCS lub edytor MDX w EG

W SAS OLAP Cube Studio został zdefiniowany nowy element wyliczany. Nie jest on jednak widoczny w żadnej aplikacji klienckiej. Dlaczego?

Po zdefiniowaniu elementu wyliczanego w OCS należy odświeżyć kostkę, gdyż dopiero wtedy elementy wyliczane będą widoczne z poziomu innych aplikacji.

Zadanie odświeżenia kostki jest dostępne w SAS Management Console w ramach SAS OLAP Server Monitor.

Jak w EG stworzyć pozycje wyliczane w innej hierarchii niż Measures?

Kreator elementów wyliczanych dostępny w EG pozwala na zdefiniowanie nowego elementu w dowolnym wymiarze, ale tylko na najwyższym poziomie. Jeżeli chcemy stworzyć element wyliczany na jakimś innym poziomie należy wykorzystać edytor MDX i wpisać kod definiujący nowy element, np.:

create member [Czas].[Cały rok].[2003].[1-półrocze] as
'[Czas].[Cały rok].[2003].[1]+[Czas].[Cały rok].[2003].[2]'

Jak zdefiniować format dla elementu wyliczanego?

Dla zmiennych wyliczanych format definiuje się przy ich definicji:

  • W proc OLAP:
    define member
    "[kostka].[Measures].[Revenue]" as
    '[Measures].[Revenue]/1000000,
    format_string="Dollar10.2"';
  • W proc SQL (lub w edytorze MDX EG):
    create <global> member
    "[kostka].[Measures].[Revenue]" as
    '[Measures].[Revenue]/1000000,
    format_string="Dollar10.2"';

  • W OCS:
    kreator ma domyślnie ustawiony format, który można zmienić poprzez rozwijane menu

Czy można użyć formatu zdefiniowanego przez użytkownika dla miar w kostkach?

Formaty użytkownika zdefiniowane dla miar są wspierane od wersji SAS9.3. Dla wersji poprzednich można zastosować obejście które dokumentuje to nota SN-11390.

Jak w MDX ograniczyć dane do kilku wybranych wartości wymiaru?

Zgodnie ze specyfikacją MDXa w wyrażeniu WHERE można podawać tylko krotkę (tuple), a nie set. Można to jednak obejść stosując funkcje agregujące i zmienne wyliczane, np.:

WITH MEMBER Geografia.Total AS
'AGGREGATE(
{Geo.[All Geo].[Mazowieckie],
Geo.[All Geo].[Podkarpackie]})'
SELECT
{Measures.aktualnaSum} ON COLUMNS,
Czas.[All Czas].Children ON ROWS
FROM Sport
WHERE (Geografia.Total)

Jak można stworzyć zbiory mianowane (named sets) dla kostki?

Zbiory mianowane dla kostki można stworzyć za pomocą:

  • proc OLAP - globalne zbiory mianowane; można tworzyć w trakcie budowy kostki lub dla kostki już istniejącej
    DEFINE SET 'kostka.nazwa'
    AS 'wyrażenie_mdx' ;
  • proc SQL, po nawiązaniu połączenia z serwerem OLAP:
    execute (
    create <global> set
    kostka.nazwa as
    'wyrażenie_mdx'
    ) by olap;

  • edytor MDX w EG

Jak usunąć definicję globalnego zbioru mianowanego?

Zbiór mianowany można usunąć za pomocą:

  • proc OLAP:
    UNDEFINE SET 'kostka.nazwa';
  • proc SQL, po nawiązaniu połączenia z serwerem OLAP:
    execute (
    drop set kostka.nazwa
    ) by olap;

Member properties - do czego służą i jak je wykorzystać?

Czasami w analizie danych potrzebne są pewne dodatkowe informacje, które mają wpływ na analizę, choć nie są danymi grupującymi. Na ogół są to dodatkowe informacje określające elementy poziomów, np.:

  • liczba ludności w województwie
  • wielkość opakowania
  • imię i nazwisko właściciela sklepu
  • powierzchnia magazynu

Takie informacje mogą być przechowywane jako member properties w kostce OLAP. Właściwości elementu definiuje się dla wybranego poziomu w momencie definiowania struktury kostki. Definiując właściwości elementu należy wskazać poziom, dla którego wprowadzamy definicję oraz kolumnę w danych wejściowych, zawierającą wartości, które mają być zapamiętane. Istotne jest, żeby dla każdej wartości poziomu istniała dokładnie jedna wartość zapamiętywana jako member properties.

Niektóre aplikacje umożliwiające analizę danych dostępnych w kostce pozwalają automatycznie wyświetlić member properties dla wybranego poziomu. Dla pozostałych należy zdefiniować zmienną wyliczaną, która będzie zwracać właściwości elementu.

Przykład:

with member Measures.liczba as
'geo.currentMember.Properties("Powierzchnia")'
SELECT
{Measures.liczba,[Measures].[wartSUM]} ON COLUMNS,
{Geo.[All Geo].Children} ON ROWS
FROM [Sport]

Funkcję Properties można wykorzystać do tworzenia globalnej zmiennej wyliczanej, która będzie dostępna z różnych sesji i aplikacji.

Uwaga! Przy korzystaniu z funkcji Properties należy uważać, żeby do właściwości odwoływać się z odpowiedniego poziomu. Odwołanie się z poziomu, dla którego member properties nie jest zdefiniowane powoduje błąd.

create global member
sport.measures.pow as
'iif(Geo.CurrentMember.Level is Geo.wojew,
Geo.CurrentMember.Properties("Powierzchnia"),
" ")'

Kolejny przykład wyświetli tylko właściwości elementów:

SELECT
{[Measures].[sas1234]} ON COLUMNS,
{[Geo].[All Geo].Children} PROPERTIES [Geo].[wojew].[Ludnosc]
ON ROWS
FROM [Sport]

  • Enterprise Guide - Począwszy od wersji 4.1 pozwala automatycznie wyświetlić właściwości elementów - w tym celu należy kliknąć prawym klawiszem myszy na poziomie, dla którego zdefiniowana jest właściwość i wybrać Pokaż właściwość nazwa.
  • Web Report Studio - Nie ma opcji pozwalającej automatycznie dodać member properties do raportu, ale można zdefiniować globalną zmienną wyliczaną dla kostki lub dodać nową pozycję bezpośrednio w mapie.
  • Web OLAP Viewer - Pozwala automatycznie wyświetlić właściwości elementów - w tym celu należy z pomocniczego menu dla poziomu wybrać Właściwości elementu. Pozycja ta jest dostępna niezależnie od tego, czy do raportu została wybrana kostka czy mapa.
  • Excel - Również pozwala automatycznie wyświetlać właściwości elementów - z menu Tabela przestawna należy wybrać opcję Pola właściwości...

Jaka jest różnica między stosowaniem apostrofu i cudzysłowu w definicji elementów wyliczanych?

Przy tworzeniu elementów wyliczanych lub zbiorów mianowanych dla kostek OLAP należy podać formułę wyliczającą wartości. Formuła będzie różnie traktowana, w zależności od tego, czy będzie wpisana w apostrofach, cudzysłowie, czy też po prostu jako tekst.

Czysty tekst i apostrofy powodują, że formuła jest wykonywana przy odwołaniu do danego elementu. Cudzysłów oznacza, że formuła będzie traktowana jako tekst.

W jaki sposób mogę ograniczyć użytkownikom możliwość przeglądania kostki tylko do wybranych wymiarów, poziomów etc.?

Można to zrobić poprzez SMC przy użyciu języka MDX. Szczegółowy opis, wraz z przykładami zapytań MDX znajduje się w dokumentacji: OLAP Member-Level Permissions

Na raporcie WRS nie mam możliwości podglądu faktów dla poszczególnych wartości, mimo iż w definicji kostki jest zdefiniowana tabela drill-through.

W zaistniałej sytuacji należy sprawdzić czy na mapie w IMS jest wybrana wartość 'yes' przy opcji 'allow drill-through to detail data' w panelu właściwości mapy.