[Gelöst] - Custom Report Kontakte Firmen zuordnen

19. November 2009 14:14

Hallo zusammen,

wir haben unsere Kunden nach Standard, Target und Premium unterschieden. Zusätzlich haben wir in den Kontakten festgelegt, welche Personen "Key Player" sind und welche nicht.

Nun brauche ich einen Report (Visual Studio), welcher mir alle "Target"-Firmen auswirft. Diese werden nach jeweils auf einer eigenen Seite gruppiert. Das ist soweit kein Problem, wo ich jetzt allerdings feststecke ist, das ich unter jeder Target-Firma die jeweiligen "KeyPlayer" anzeigen möchte und wie wir diese bewerten. Dazu kommen dann später noch alle offenen Aktivitäten, Verkaufchancen und Angebote.

Ich habe jetzt ein Dataset für die Firmen wo ich eben über eine WHERE-Klausel die Target Firmen filtern kann. Dann habe ich ein Dataset für die Kontakte angelegt und das ist nun der Punkt wo ich nicht mehr weiterweiß. Irgendwie muss ich über die AccountId die entsprechenden Kontakte rausfiltern. Ich weiß nur nicht wie. ;)
Zuletzt geändert von CK82 am 25. November 2009 12:05, insgesamt 1-mal geändert.

Re: Custom Report Kontakte Firmen zuordnen

19. November 2009 17:22

Das Pferd mal anders aufgezäumt und um ein riesen SQL-Statement drumherum zu kommen.

Da ich ja für Firmen eine Art Übersicht zusammenstellen will ("Welche KeyPlayer", "Welche Opportunities", "Welche Aktivitäten", "Welche Angebote" etc), hab ich mir überlegt, zu jeder Frage die ich eben gestellt habe einen eigenen kleinen Report zu bauen und diese dann hinterher in einem übergeordneten Report zu aggregieren.
Nur wie verbinde ich jetzt die Subreports mit dem Übergeordneten Report, dass immer alle Subreports bei der gleichen Firma sind und nicht wild hin und her gesprungen wird? Oder mache ich da generell etwas falsch?

Re: Custom Report Kontakte Firmen zuordnen

19. November 2009 21:39

Hallo,
ich würde das alles in einem Report machen, es sei denn du möchtest die Teile des Reports auch noch in anderen Reports verwenden. Im Moment bin ich geschäftlich unterwegs, ich schicke dir am Samstag mal ein Beispiel, wie ich diesen Report aufbauen würde

Re: Custom Report Kontakte Firmen zuordnen

19. November 2009 22:03

Hallo CK82,

vielen Dank für deinen Beitrag, leider mussten wir feststellen, dass du das Thema durch eine Antwort auf deinen eigenen Beitrag wieder nach oben geschoben hast.

Wir bitten dich, zukünftig mindestens 24 Stunden zwischen zwei Antworten zu warten.
Falls du deinem Beitrag weitere Informationen hinzufügen möchtest, nutze hierzu bitte die [Ändern]-Funktion (rechts oben in jedem deiner Beiträge zu finden).


Vielen Dank für dein Verständnis.

Gruß, Timo Lässer
MSDynamics.de-Team

Re: Custom Report Kontakte Firmen zuordnen

23. November 2009 09:16

Hallo Michael,

danke für die Antwort - wann ist denn dein Wochenende vorbei? :P

Nein Mal im Ernst, wie geht man an so einen Report (über mehrere Tabellen und Entitäten) dran. Derzeit fehlen mir so ein wenig die Erfahrung mit so komplexen SQL-Statements, als das ich dass alles in einem Dataset realisieren könnte. Das was mir einfällt, wäre ein "Union"-Statement, allerdings ist das recht unperformant und man muss einheitliche Spalten haben (geht halt nicht).

Über einen Hinweis würde ich mich freuen. :)

@Timo: Jaja kommt nicht mehr vor, allerdings gings dabei nicht ums hochpushen sondern ich hab nur meine eigenen Gedanken dazu gepostet, bzw. einen ganz anderen Lösungsansatz geschrieben. Aber ich sag mal besser nichts dazu... ;)

Re: Custom Report Kontakte Firmen zuordnen

23. November 2009 10:12

Hallo,

um z.B. alle Firmen mit ihren Kontakten aufzulisen, kannst du ganz einfach diesen SQL-Befehl verwenden:
Code:
SELECT     FA1.name, FC1.lastname, FC1.firstname
FROM         dbo.FilteredAccount AS FA1 LEFT OUTER JOIN
                      dbo.FilteredContact AS FC1 ON FA1.accountid = FC1.accountid
WHERE FA1.<firmentyp> like 'target' AND FC1.<contacttyp> like 'keyplayer'


Die dazugehörigen Aktivitäten kannst du dann über ein weiteres join einfach hinzufügen

Re: Custom Report Kontakte Firmen zuordnen

23. November 2009 16:57

Hallo Michael,

danke für die Antwort. :-)

Und wie bekomme ich es jetzt hin, dass mir jede Verkaufschance nur einmal angezeigt werden soll und nicht für jeden Kontakt der vorkommt einmal. :-)

Code:
SELECT     FA1.name, FC1.fullname, FO1.name AS Verkaufschance
FROM         FilteredAccount AS FA1 LEFT OUTER JOIN
                      FilteredContact AS FC1 ON FA1.accountid = FC1.accountid LEFT OUTER JOIN
                      FilteredOpportunity AS FO1 ON FA1.accountid = FO1.accountid
GROUP BY FA1.name, FC1.fullname, FO1.name


Daran bin ich am Freitag so ein klein wenig gescheitert

Re: Custom Report Kontakte Firmen zuordnen

23. November 2009 17:10

ganz einfach, mache aus select FA1.name.... einfach SELECT DISTINCT FA1.name ...

Re: Custom Report Kontakte Firmen zuordnen

23. November 2009 17:16

Jut, das hatte ich gerade auch gefunden.

Code:
SELECT DISTINCT FA1.name, FC1.fullname, FO1.name AS Verkaufschance, FE1.description
FROM         FilteredAccount AS FA1 LEFT OUTER JOIN
                      FilteredContact AS FC1 ON FA1.accountid = FC1.accountid LEFT OUTER JOIN
                      FilteredOpportunity AS FO1 ON FA1.accountid = FO1.accountid LEFT OUTER JOIN
                      FilteredEmail AS FE1 ON FA1.accountid = FE1.regardingobjectid
GROUP BY FA1.name, FC1.fullname, FO1.name, FE1.description


Bekomme allerdings immer noch Redundanzen im ResultSet.

Beispiel:
Firma A Kontakt A Verkaufschance A
Firma A Kontakt A Verkaufschance B
Firma B Kontakt B Verkaufschance A
Firma B Kontakt B Verkaufschance B

Redundanzen bei den Firmen ist klar, da ich mehrere Kontakte zu den Firmen zugordnet habe. Allerdings ist es recht doof, wenn ich zu jeder Verkaufschance, Email, Telefonanruf díe ganzen Ergebnisse bekomme. Deswegen dachte ich eher an mehrere DataSets :|

Edit: So würd mit Emails aussehen...
Firma A Kontakt A Verkaufschance A Email A
Firma A Kontakt A Verkaufschance B Email B
Firma A Kontakt A Verkaufschance B Email C
Firma B Kontakt B Verkaufschance A Email A
Firma B Kontakt B Verkaufschance B Email B
Firma B Kontakt B Verkaufschance B Email C

Re: Custom Report Kontakte Firmen zuordnen

23. November 2009 17:34

ich mache sowas immer in einem Befehl und arbeite dann mit Selects im Select.

Wichtig ist tatsächlich, sich am Anfang genau zu überlegen, wie du die Daten abholen möchtest.

Group by verwende ich wenn möglich nicht, sondern mache diese Gruppierung erst im Report, da ich dann flexibler bin.

Dein Befehl könnte z.B. auch so aussehen:
Code:
SELECT DISTINCT FA1.name, FC1.fullname, FO1.name AS Verkaufschance, FE1.description,
(Select * from wasauchimmer WHERE accountId = FA1.accountId and ....)
FROM         FilteredAccount AS FA1 LEFT OUTER JOIN
                      FilteredContact AS FC1 ON FA1.accountid = FC1.accountid LEFT OUTER JOIN
                      FilteredOpportunity AS FO1 ON FA1.accountid = FO1.accountid LEFT OUTER JOIN
                      FilteredEmail AS FE1 ON FA1.accountid = FE1.regardingobjectid

Das holt dir dann zum Beispiel zu der Firma noch alle Datensätze aus der Tabelle wasauchimmer. Dies kannst du dann über die where Bedingung noch weiter einschränken.

Re: Custom Report Kontakte Firmen zuordnen

23. November 2009 17:39

OK, jetzt kommen wir der Sache näher (hoffe ich). :-)

Die geschachtelte Select-Abfrage kannte ich nicht. Das habe ich bisher über UNIONS gemacht und da ist man dann doch sehr eingeschränkt. Werde mir mal eine gescheihte Abfrage überlegen.

DANKE!

Edit sagt, dass Timo sagt ich soll editieren und nicht neu erstellen :-) Dementsprechend der Text unten :-P (und ich bin mal gespannt ob das wer lesen tut :-))

Hmmmm mit der geschachtelten Select Anweisung produziere ich auch fehler, bzw. ich bekomme jetzt nur ein Ergebnis zurück:

Probiert habe ich folgendes:
Code:
SELECT     FilteredAccount.name, FilteredContact_1.fullname,
                          (SELECT     fullname
                            FROM          FilteredContact
                            WHERE      (accountid = FilteredAccount.accountid)) AS Kontakte
FROM         FilteredAccount LEFT OUTER JOIN
                      FilteredContact AS FilteredContact_1 ON FilteredAccount.accountid = FilteredContact_1.accountid


Ergebnis:
Firmenname - fullname - Kontakte (Also zweimal den vollständigen Namen, aber eben nur ein einziges Ergebnis)

Fehlermeldung:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, != .....

Zweiter Versuch:
Code:
SELECT     name,
                          (SELECT     fullname
                            FROM          FilteredContact
                            WHERE      (accountid = FilteredAccount.accountid)) AS Kontakte
FROM         FilteredAccount


Ergebnis:
firmenname - Kontakte (fullname)
null - null

Fehlermeldung:
s.o.

Sehe ich das jetzt richtig, dass ich mit dem Subquery keine 1:n Beziehung abbilden / erhalten kann, sprich: 1 Firma hat mehrere Kontakte? :|


Edit 2 sagt:
Das folgende habe ich jetzt auch probiert, da bekomme ich einen TimeOut...

Code:
SELECT     name,
                          (SELECT     FilteredContact.fullname
                            FROM          FilteredContact LEFT OUTER JOIN
                                                   FilteredContact AS FilteredContact_1 ON FilteredAccount.accountid = FilteredContact.accountid) AS Kontakte
FROM         FilteredAccount
Zuletzt geändert von CK82 am 24. November 2009 10:43, insgesamt 1-mal geändert.

Re: Custom Report Kontakte Firmen zuordnen

24. November 2009 11:34

grr,

stimmt, da habe ich nicht aufgepasst. Eine Subquery darf immer nur einen Wert zurückgeben, was ja auch logisch ist.

Hmm, ich glaube, dann ist deine Idee mit den Subreports doch nicht so verkehrt sondern die praktikabelste Lösung.

Wenn ich weiter so über deine Anforderung nachdenke, kommt mir doch der Standard Reports Firmenübersicht und Firmenzusammenfassung in den Sinn. Hast du dir diesen Report schon einmal angesehen?
Ist das nicht schon so ziemlich das, was du benötogst? Noch ein paar Anpassungen an der Query und fertig, zumindest was die SQL-Query angeht?

Ach so, editieren sollst du nur am gleichen Tag. Am nächsten Tag sollst du sogar einen neuen Beitrag schreiben.

Re: Custom Report Kontakte Firmen zuordnen

24. November 2009 11:49

da oben steht aber 24 Stunden ;-)

Ja ich hab ja oben bereits geschrieben, dass ich durch die beiden Built-In Reports noch nicht wirklich durchblicke. Die Queries der Datasets sind fast so aufgebaut, dass man die nicht verstehen soll (so hats für mich zumindest den Anschein :-) - für mich sind die recht komplex... )

Außerdem schmeißt der mir beim Aufrufen des Subreports den Fehler "The CRM_GroupBy parameter is missing a value". Die Entsprechenden Datenquellen vom ParentReport und SubReport hab ich angepasst (von AdventureWorks auf unsere CRM Daten). Wo ich nun die GroupBys anpasse hab ich nicht gefunden.

Derzeit teste ich nebenbei ein wenig mit Access, ob es da eine "einfachere" Möglichkeit gibt. Aber ich bezweifel das etwas.

Re: Custom Report Kontakte Firmen zuordnen

24. November 2009 12:05

Hallo,

ich finde die Querys sehr logisch aufgebaut. Sie sind definitiv nicht einfach, aber die Anforderung von dir ist ja auch nicht einfach.

Ich würde an deiner Stelle tiefer in diese Reports einsteigen, das wird der schnellste weg sein.

Wo jetzt die Group By Parameter in VS eingestellt werden, weiß ich auhc nicht mehr auswendig, das muss ich mir dann heute abend mal ansehen.

Re: Custom Report Kontakte Firmen zuordnen

24. November 2009 12:09

ja sie dind durchaus logisch aufgebaut und ich werde da mich jetzt mit beschäftigen müssen, nur derzeit übersteigt das deutlich mein Wissen bzügl. Reports und Visual Studio. Aber naja muss ich jetzt wohl durch. Ich denke es wird Zeit für entsprechende Lektüre ;)

Kann man das Buch hier empfehlen?
http://www.amazon.de/Programming-Micros ... 325&sr=8-4

Re: Custom Report Kontakte Firmen zuordnen

24. November 2009 14:05

jupp, es ist das Standardwerk für die Programmierung im CRM

Re: Custom Report Kontakte Firmen zuordnen

25. November 2009 11:02

Moin wieder,

so, das Einbinden von SubReports ist jetzt kein Problem mehr, wenn man weiß wie man mit Parametern arbeitet... ;)

Allerdings habe ich jetzt folgende Frage:
Bei uns werden Verkaufschancen bund gemischt den Kontakten und den Firmen zugeordnet. Das führt zu Problemen im Report, da ich derzeit nach Firmenid filter und mir so die entsprechenden Kontakte raushole. Ich sehe aber nun unter jeder Firma alle Verkaufschancen (Firma aufrufen -> Verkaufschancen) egal ob diese der Firma direkt zugeordnet oder über einen Kontakt verknüpft sind. Ist diese Verknüpfung in irgendeiner Tabelle hinterlegt oder muss ich mir das selber zusammenbasteln?

Ich find da nichts... :(

Vielen Dank!

Edit:
Habs mir jetzt selber zusammengebaut und brauche dann denke ich nur noch einen Subreport und nicht für jede Entität einen. Kontakte und Verkaufschancen hole ich mir jetzt mit diesem Statement raus:
Code:
SELECT     FilteredContact.fullname, FilteredOpportunity.name
FROM         FilteredContact LEFT OUTER JOIN
                      FilteredOpportunity ON FilteredContact.contactid = FilteredOpportunity.customerid OR FilteredContact.accountid = FilteredOpportunity.customerid
WHERE     (FilteredContact.parentcustomerid = @accountid)


wobei die AccountID vom ParentReport an den SubReport übergeben wird. Alles andere hab ich ja dann im Subreport. Ausgegeben werden die Kontakte in einer Tabelle - die Verkaufschancen in einer Liste um Leerstellen zu vermeiden. Wahrscheinlich machen mehrere Datasets Sinn um die ResultsSets auch logisch voneiander zu trennen und das Ganze etwas wartbarer zu machen.

Re: [Gelöst] - Custom Report Kontakte Firmen zuordnen

25. November 2009 19:46

sehr schön. das freut mich, das wir dein Problem noch lösen konnten :-)

Re: [Gelöst] - Custom Report Kontakte Firmen zuordnen

7. Dezember 2009 12:49

Dazu hätte ich jetzt doch noch eine Frage:
Und zwar möchte ich ja eine Firmenzusammenfassung bauen und ich hänge gerade an der Abfrage für die Aktivitäten.

Wenn man eine Firma im CRM öffnet, bekommt man ja über die linken Navigationsleiste -> "Historie" / "Aktivitäten" sämtliche abgeschlossenen / offenen Aktivitäten. Ich bekomme es im Bericht nicht hin, mir diese Ansicht nachzubauen.

Ich versuche es über folgendes SQL Statement:
Code:
SELECT     FilteredActivityPointer.Description, FilteredActivityPointer.Subject, FilteredActivityPointer.ScheduledEnd, FilteredActivityPointer.OwnerIdName, FilteredActivityPointer.StateCode, FilteredActivityPointer.StatusCode, FilteredActivityPointer.ActivityTypeCode
FROM         FilteredActivityPointer LEFT OUTER JOIN
                      FilteredContact ON FilteredActivityPointer.RegardingObjectId = FilteredContact.contactid OR FilteredActivityPointer.RegardingObjectId = FilteredContact.accountid
WHERE     (FilteredContact.parentcustomerid = @accountid)


@accountid ist ein Parameter, der vom MainReport an den Subreport durchgereicht wird.
Ich bekomme auch eine Teilmenge der zugeordneten Aktivitäten, allerdings 1. nicht alle und 2. einige sind doppelt (ohne das ich ein Muster erkennen kann / ziemlich willkürlich). bei den anderen Datasets (zugehörige Aufräge, Verkaufschancen, Angebote, Kontakte funktioniert die obige Abfrage problemlos :-( )

Hat jemand schonmal versucht eine Historie / Aufgabenübersicht in einem Bereicht nachzubauen?

Danke und Beste Grüße,
Christian

Edit: Alternativ könnte ich mir sämtliche Aktivitätstabellen (EMail, Aufgabe, Termin...) separat abfragen, die bekomme ich dann allerdings nicht ordentlich zusammengefügt... :-(

Edit2: Einigermaßen gelöst, auch wenn die Abfrage nicht wirklich performant ist...