Mam problem, z którym spotykam się za każdym razem, gdy decyduję się na zbudowanie sześcianu, i jeszcze nie znalazłem sposobu na jego rozwiązanie.
Problem polega na tym, jak zezwolić użytkownikowi na automatyczne definiowanie zakresu rzeczy bez konieczności kodowania ich na stałe w wymiarze. Wyjaśnię mój problem na przykładzie.
Mam tabelę o nazwie Klienci :
to są dane w tabeli:
Chcę wyświetlać dane w stylu przestawnym i grupować wynagrodzenie i wiek w określonych zakresach, takich jak poniżej:
Napisałem ten skrypt i zdefiniowałem zakresy:
SELECT [CustId]
,[CustName]
,[Age]
,[Salary]
,[SalaryRange] = case
when cast(salary as float) <= 500 then
'0 - 500'
when cast(salary as float) between 501 and 1000 then
'501 - 1000'
when cast(salary as float) between 1001 and 2000 then
'1001 - 2000'
when cast(salary as float) > 2000 then
'2001+'
end,
[AgeRange] = case
when cast(age as float) < 15 then
'below 15'
when cast(age as float) between 15 and 19 then
'15 - 19'
when cast(age as float) between 20 and 29 then
'20 - 29'
when cast(age as float) between 30 and 39 then
'30 - 39'
when cast(age as float) >= 40 then
'40+'
end
FROM [Customers]
GO
Moje zakresy są zakodowane na stałe i zdefiniowane. Kiedy kopiuję dane do Excela i przeglądam je w tabeli przestawnej, wygląda to tak jak poniżej:
Mój problem polega na tym, że chcę utworzyć kostkę, przekształcając tabelę klientów w tabelę faktów i tworząc tabele 2 wymiarów SalaryDim i AgeDim .
SalaryDim tabeli ma 2 kolumny ( SalaryKey, SalaryRange ) i AgeDim tabela jest podobna ( ageKey, ZakresWieku ). Tabela faktów mojego klienta zawiera:
Customer
[CustId]
[CustName]
[AgeKey] --> foreign Key to AgeDim
[Salarykey] --> foreign Key to SalaryDim
Nadal muszę zdefiniować zakresy w tych wymiarach. Za każdym razem, gdy podłączam element przestawny Excela do mojej kostki, widzę tylko te zdefiniowane na stałe zakresy.
Moje pytanie dotyczy tego, jak dynamicznie definiować zakresy bezpośrednio z tabeli przestawnej, bez tworzenia wymiarów zakresu, takich jak AgeDim i SalaryDim . Nie chcę utknąć tylko w zakresach zdefiniowanych w wymiarze.
Określony zakres to „0–25”, „26–30”, „31–50”. Może chciałbym zmienić to na „0-20”, „21-31”, „32-42” itd., A użytkownicy za każdym razem żądają różnych zakresów.
Za każdym razem, gdy go zmieniam, muszę zmieniać wymiar. Jak mogę ulepszyć ten proces?
Byłoby wspaniale mieć rozwiązanie zaimplementowane w kostce, aby dowolne narzędzie klienckie BI łączące się z kostką mogło zdefiniować zakresy, ale nie miałbym nic przeciwko, jeśli istnieje dobry sposób używania tylko Excela.
źródło
Za pomocą języka MDX można tworzyć niestandardowe elementy, które będą definiować zakresy. Poniższe wyrażenie zdefiniowało obliczonego członka, który reprezentuje wszystkie wynagrodzenia między 501 a 1000:
Możesz zrobić to samo z wymiarem wieku:
W tym artykule wyjaśniono, jak dodawać te obliczone elementy w programie Excel (patrz sekcja „ Tworzenie obliczonych elementów / miar i zestawów w tabelach przestawnych OLAP programu Excel 2007 ”). Niestety w programie Excel nie ma interfejsu użytkownika. Niemniej jednak można znaleźć klientów BI obsługujących język MDX , które pozwalają zdefiniować zakresy w zapytaniach.
źródło
Salary
iAge
.