Od 2012 roku widać pewną tendencję w działaniach Microsoftu jeśli chodzi o zmiany i kierunek rozwoju wbudowanych w SQL Server usług analitycznych. Na przestrzeni czasu usługi te były rozpoznawalne dzięki wielowymiarowym kostkom OLAP, które dawały duże pole do popisu i pozwalały (właściwie nadal pozwalają) osiągnąć bardzo fajne efekty. Jednakże z pewnych względów Microsoft postanowił niejako odwrócić się od kostek i postawić na technologię in-memory kryjącą się pod nazwą VertiPaq (później przemianowaną na xVelocity) zaimplementowaną w nowym trybie działania Analysis Services o nazwie Tabular. Zdając sobie sprawę z ugruntowanej pozycji kostek, Microsoft postanowił nadal je wspierać jednakże każdy z nas dostrzega, iż większość prac rozwojowych i ulepszeń jest kierowanych nie do nich, a właśnie dla modelu tabelarycznego. Nie licząc drobnych poprawek od 2012 roku w modelu kostek analitycznych nie wydarzyło się za wiele – w przeciwieństwie do modelu tabelarycznego, którego kolejne przeobrażenia są coraz to bogatsze w nowe, ulepszone opcje. Na ten stan rzeczy ma wpływ nie tylko obecność modelu tabelarycznego w usługach analitycznych, ale również w innych technologiach jak Power Pivot, czy też bardzo mocno promowany Power BI. Nie inaczej jest w opisywanej wersji SQL Server 2016 gdzie model oparty o silnik VertiPaq otrzymał naprawdę wiele przydatnych ulepszeń – jedną z nich są translacje o których chciałem napisać parę słów w niniejszym artykule.
Zanim przejdziemy do meritum chciałem wspomnieć o czymś równie ważnym o ile nie ważniejszym od translacji – chodzi mianowicie o nowe okno umożliwiające przegląd tworzonego rozwiązania tabelarycznego tj. Tabular Model Explorer. Nowy widok na tworzone projekty jest dostępny w Visual Studio i można go włączyć klikając View ->Other windows ->Tabular Model Explorer tak jak zostało to przedstawione poniżej:
Naszym oczom powinien ukazać się nowy eksplorator ukazujący w bardziej przystępnej formie tworzone przez nas rozwiązanie oparte o Analysis Services Tabular. Samo okno jest typowym podglądem na projekt i dodatkowo zostało ono wyposażone w dodatkowo opcje wyszukiwania. Ponadto znak plusa i minusa widoczny obok okna wyszukania pozwala na rozwinięciu bądź zwinięcie wszystkich widocznych folderów.
Niby mała rzecz, a jednak cieszy. Powstaje tylko jedno pytanie – dlaczego tak późno? Na to pytanie nie poznamy odpowiedzi – ważne, że nie musimy teraz poruszać się po modelu klikając po kolei poszczególne tabele lub widok diagramu… na szczęście.
Przechodząc już do samych translacji – jest to obiekt umożliwiający tłumaczenie nazw obiektów w modelu na nazwy w innych językach. Do tej pory w modelu tabelarycznym tego typu obiektów nie można było tworzyć (oczywiście istniały dodatki umożliwiające tego typu działania lecz sam produkt takowych możliwości nie zapewniał). Ważne podkreślenia jest tutaj to, że obiekty tego typu służą do tłumaczenie obiektów a nie samych danych. Tak więc stwórzmy sobie jakieś tłumaczenie – możemy to zrobić klikając prawym przyciskiem myszy na folder Translations i tam z menu kontekstowego wybrać Manage translations. Naszym oczom powinno pokazać się okno z różnymi językami podobne do poniższego
Z dostępnej listy należy zaznaczyć język, na który będzie tłumaczony model i przenieść go do prawej części okna. Po przeniesieniu trzeba go zaznaczyć i kliknąć Export selected languages. Pozwoli nam to na zapisanie pliku translacji zapisanym (tak jak wszystko w nowym tabularze) w standardzie JSON. Plik ten należy otworzyć w dowolnym edytorze tekstu i odnaleźć w nim frazę Translations.
Samo tworzenie translacji polega przede wszystkim na tym aby obiekty, które chcemy przetłumaczyć odnaleźć właśnie w tej sekcji pliku i wpisać dla nich tłumaczenie we właściwości translatedCaption. Dodatkowo do dyspozycji mamy również translatedDescription, który jak sama nazwa wskazuje pozwala nam na przetłumaczenie opisu danego elementu modelu. Po wprowadzeniu tychże zmian plik należy zapisać, a następnie w Visual Studio kliknąć prawym przyciskiem myszy i wybrać Import translations. Samo okno nie charakteryzuje się niczym szczególnym i zostało przedstawione poniżej. Oprócz wskazania pliku JSON z pożądanymi tłumaczeniami można w tym oknie:
- nadpisać translację, która już w projekcie istnieje,
- zignorować błędnie zapisane translacje w pliku,
- zapisać do dziennika status importu,
- zrobić kopię zapasową istniejących translacji w momencie ich nadpisywania.
Szczególnie polecam tą ostatnią opcję ponieważ gdy nadpisujemy istniejące translacje zawsze warto mieć możliwość powrotu do wcześniejszego stanu.
Po kliknięciu Import wszystko powinno być gotowe i potwierdzone krótkim powiadomieniem o sukcesie importu. Aby przetestować cały mechanizm można podłaczyć się do bazy Workspace z poziomu Excela lub po prostu kliknąć dostępny na pasku Analyze in Excel. W tym oknie ważne jest to aby wybrać ustawienie Culture – po rozwinięciu naszym oczom powinien ukazać się tylko język domyślny oraz języki dla których mamy skonfigurowane translacje (w moim przypadku zaimportowałem język polski):
Po wybraniu odpowiedniej perspektywy należy potwierdzić klawiszem OK i poczekać na uruchomienie Excela. Stworzone przez nas translacje powinny być widoczne w oknie wyboru pól tabeli przestawnej – jak widać poniżej przetłumaczyłem DimCurrency na WymiarWaluta i całe tłumaczenie zadziałało bez żadnych dodatkowych ustawień.
Całe działanie jest dosyć proste dlatego tez dobrze byłoby stworzyć jakąś graficzną nakładkę umożliwiającą edycję tego typu ustawień. Póki co takiej zakładki nie ma, ale można sobie na własne potrzeby napisać prosty edytor plików JSON, lub też skorzystać z już dostępnych w internecie (np. ten dedykowany właśnie do zarządzania plikiem translacji z poziomu graficznego interfejsu użytkownika).
Mimo paru niedogodności uznaję translację (a już z całą pewnością Tabular Model Explorer) za miłe ulepszenie dostępne dla modeli tabelarycznych. Cieszę się, że technologia ta z edycji na edycję daje coraz więcej możliwości i my jako deweloperzy będziemy mogli rozwiązywać coraz więcej problemów biznesowych przy jej użyciu. Oczywiście to nie wszystkie zmiany w modelu tabelarycznym w wersji SQL Server 2016 – postaram się je opisać w kolejnych artykułach. Stay tuned!
- Avoiding Issues: Monitoring Query Pushdowns in Databricks Federated Queries - October 27, 2024
- Microsoft Fabric: Using Workspace Identity for Authentication - September 25, 2024
- Executing SQL queries from Azure DevOps using Service Connection credentials - August 28, 2024
Dzięki za artykuł. Wszystko fajnie, ale translacje rozwiązuję problem tłumaczenia metadanych. A jak sobie poradzić z sytuacją kiedy mamy wymiar DimProduct, w którym mamy różne kolumny określające nazwę produktu w różnych językach. Czy można to zaimplementować jakoś w modelu?
Wg mnie Tabular Model Explorer powinien być elementem Solution Explorer, a edycja plików translacji powinna być dostępna z poziomu VS – może kiedyś to zrobią, byłoby miło 🙂
Tłumaczenie samych danych można oprzeć o perspektywy tj. stworzyć osobną perspektywę dla każdego języka i w każdej z nich wyświetlać tylko te kolumny, które są istotne w danym języku. Jest to chyba najprostsze rozwiązanie jakie przychodzi mi do głowy.
Co do tego, że Model Explorer powinien być w jakiś sposób zintegrowany i edycja translacji powinna być dostępna z GUI to zgadzam się w 100% i zapewne zostanie to wprowadzone w przyszłości (przynajmniej jeśli chodzi o edycję translacji).