Witaj na Zine.net online Zaloguj się | Rejestracja | Pomoc

Dwa datasety w raporcie SSRS

Niedawno w trakcie tworzenia raportu SSRS natknęłam się na problem umieszczenia informacji z dwóch datasetów w jednym tablixie.

W systemie głównym przechowujemy pewne informacje. Dla uproszczenia niech to będzie tabela Entity:

Procedury bezpieczeństwa nie pozwalają na zmiany wartości 'SomeInformation' w bazie danych przez prostą edycję wartości. Zmiany takie muszą przejść skomplikowany proces zaczynający się od wniosku zmiany, a kończący się na zmianę danych w głównym systemie. Zmianami dotyczącymi obiektów Entity zajmuje sie drugi system, z osobnym serwerem aplikacji i - by bardziej skomplikować sprawę - z osobną bazą danych.

Wnioski zmiany trzymane są w tabeli ChageRequest:


Mając w głównym systemie dane:


oraz wnioski o zmiany w systemie drugim:


chcemy wyprodukować raport porównujący wnioski o zmiany z oryginalnymi wartościami:


I chcemy taki raport stworzyć za pomocą SSRS.

Teraz pytanie czy SSRS umożliwia wrzucenie do tabeli danych z dwóch różnych datasetów?
Element tablix może mieć przypisany tylko jeden dataset, ale raporty oferują przeróżne funkcje które pozwalają na wykorzystanie danych przez jawne podanie nazwy innego datasetu (np. First, Last, Max). Jednak nie do końca o to chodzi - nas interesuje join tych dwóch datasetów, a nie proste wyciągnięcie wartości.

Przeszukałam internet i najczęściej pojawiającą się radą były UNIONY tych dwóch tabel, oraz joiny między tabelami. Problem pojawia się gdy potrzebujemy joina po tabelach znajdujących sie w dwóch równych bazach danych na dwóch różnych serwerach.
Chcemy więc mieć możliwość stworzenia dwóch datasetów:

dsChangeRequests - select * from ChangeRequestTable
dsEntities - select * from EntityTable

Następnie ustalamy dane z dsChangeRequest - nic prostszego:

CodeName:       OldValue:        NewValue:       OriginalValue:
[CodeName]      [OldValue]         [Newvalue]        Expr

W kolumnie 'OriginalValue' powinno się znaleźć wyrażenie robiące cos w rodzaju:
Expr = select SomeInformation from dsEntities where EntityName = CodeName

Nie będzie to może super szybkie, ale z punktu widzenia danych jest to właśnie to, czego szukamy. A może jest lepszy sposób... ? - czekam na propozycje.

W końcu, po wielu bojach dotarłam do oczekiwanego rozwiązania :) :
Expr = Lookup(Fields!CodeName.Value, Fields!EntityName.Value, Fields!SomeInformation.Value, "dsEntities")

Opublikowane 9 marca 2011 14:08 przez fusion

Komentarze:

Brak komentarzy
Komentarze anonimowe wyłączone