none
Bachelorarbeit - Wirtschaftsinformatik RRS feed

  • Allgemeine Diskussion

  • Hallo liebe SQL Server User!

    Ich studiere Wirtschaftsinformatik und bin gerade dabei meine Bachelorarbeit zu schreiben.

    Das Thema ist eine Anwendungsgestützte Optimierung der Kundenprojekt-Rechnung in einem Segment eines großen Unternehmens.

     

    Mal eine kurze Beschreibung der IST-Situation:

    Systeme/Dateien die verwendet werden: Datenerfassung (Excel): Mit der Datenerfassungs-Datei werden die Daten der Fachabteilungen gesammelt. Dort gibt es also Tabellen für Einkauf, Logistik usw. Es gibt immer eine Datei pro Projekt. Sie wurde nur für das Segment entwickelt, in dem ich die Arbeit schreibe. Berechnungsdatei (Excel) Diese Datei ist vom Konzern vorgegeben und sollte nicht verändert werden. Die Daten aus der Datenerfassungsdatei werden derzeit manuell in diese weitere Excel-Datei übertragen. Hier gibt es sehr viele Formeln. Manche dieser Formeln (z.B. die Berechnung des internen Zinsfußes) sind Näherungsverfahren. Es gibt also eine Position x die einen Wert y annehmen soll. Nun werden die verknüpften Werte a, b und c so lange geändert bis x den Wert y hat. Das kann man in Excel wohl unter anderem mit der IKV-Funktion (Interne-Kapitalverzinsungs-Funktion) darstellen. Freigabeworkflow (Lotus Notes) Die Berechnungsdatei wir in eine Lotus Notes Anwendung geladen. Es folgt ein Freigabeprozess für das Projekt.

     

    Problematik:

    Also Problematisch ist bei der ganzen Sache, dass die Daten aus der Datenerfassung immer manuell übertragen werden müssen. Das dauert lange und kann natürlich auch zu Fehlern führen. Außerdem ist es total Umständlich eine Übersicht der ganzen Excel-Tabellen zu behalten. Es wäre also toll wenn man eine Datenbank hätte, in der man sich ein bestimmtes Projekt abrufen kann, um dann Änderungen einzupflegen, Auswertungen durchzuführen usw.

     

    Lösung:

    Was das Controlling möchte ist also Eine Anwendung, welche die derzeitige Datenerfassung ersetzt und alle Projekte speichern kann. Da es oft Änderungen gibt oder verschiedene Angebote für ein Projekt (wo dann ein paar Werte anders sind) soll es möglich sein verschiedene Projektstände oder -versionen anzeigen zu lassen. Optimal wäre: Projekt900.01 ist im System. Nun gibt es Änderungen an diesem Projekt. Der Controller ruft also das Projekt auf, ändert ein paar Werte und kann es unter Projekt900.02 abspeichern. Es sollte außerdem Möglich sein die Projektdaten in die Berechnungsdatei (Excel) zu übertragen. Selbst wenn die Formeln innerhalb der Datenbank realisierbar sind, braucht das Controlling die gefüllte Datei für den Freigabeworkflow. Eine weitere Anforderung ist, dann man hinterher auch mit den Daten arbeiten können soll und zwar im Excel-Format. Also die Berichte sollten sozusagen im Excel-Format erfolgen

     

    Anforderungen:

    Die Anwendung soll folgende Anforderungen erfüllen:

    • Umsetzung der Datenerfassung
    • Einfache Übertragbarkeit der Projektdaten aus der Anwendung in die Berechnungsdatei
    • Einfacher re-import der berechneten Daten
    • Geringer Aufwand bei der Nutzerverwaltung
    • Möglichkeit verschiedenen Versionen von Projekten zu speichern
    • Benutzerfreundliches Frontend
    • Ausgabe der Projektdaten im Excel-Format
    • Die Auswahl der Software muss sich auf im Unternehmen verwendete beschränken (SAP, Lotus Notes, MSSQL Server 2005/08, Excel, Access)

    Meine Fragen:

    Ich habe bisher leider nur begrenzt Erfahrung mit Datenbanken (2 Semester, aber kaum Praxis) und in der Programmierung (3 Semester, aber auch kaum Praxis) sammeln können. In dem Segment, in dem ich diese Arbeit schreibe kann ich leider nicht viel Hilfe bekommen. Erfahrung im Bereich Datenbankerstellung fehlt hier leider. Ich bin daher sehr viel auf das Interner und Literatur angewiesen.

    Dies ist nicht das erste Forum in dem ich schreibe, somit weiß ich schon, dass die beschriebene Anwendung in allen aufgezählten Systemen realisierbar zu sein scheint. Jetzt steht die Entscheidung für eins der Systeme vor der Tür. Ich hab gemerkt das es sehr schwer ist an Vergleichswerte zu kommen, daher werde ich in der Arbeit mit Pro- und Con-Argumentationen arbeiten müssen. Meine erste Frage lautet in diesem Zusammenhang also: Wo seht ihr Vor- und Nachteile bei den verschiedenen Systemen (speziell MSSQL Server, aber gerne auch bei den anderen, wenn ihr sie kennt).

    Mein aktueller Favorit ist MSSQL Server 2008 mit Excel Frontend. Ich muss zwar noch einiges Wissen ansammeln um die Anwendung zu realisieren, aber dass müsste ich bei den anderen Systemen auch.

    Die Vorteile die ich bei MSSQL//Excel sehe:

    • Die Benutzer der Anwendung sitzen alle an Windows Systemen
    • Die Nutzer sind an Excel gewöhnt und nutzen es jeden Tag
    • Der Server auf dem die Datenbank laufen würde ist ein Windows 2003 Server-System
    • Einfache Benutzerverwaltung durch Windows-Kennung
    • Gute Schnittstellen
    • Frontend kann bei Bedarf gewechselt werden
    • Einfache Übertragbarkeit der Projektdaten in die Berechnungsdatei (und reimport)

     

    Welche Probleme seht ihr bei diesem Projekt? Gibt es jemanden der das Projekt so lösen könnte und mir bei meinem Lösungsweg Hilfestellung/Tipps geben kann? Wer kennt gute Literatur oder sonstige Quellen aus denen ich mir das benötigte Wissen aneignen kann? Ich hoffe ich habe verständlich zusammengefasst um was es geht. Falls ihr noch weitere Infos braucht fragt bitte nach oder schaut mal in den anderen Foren, in denen ich dieses Thema schon ein wenig länger diskutiere (Lotus Notes-, SAP- und MSSQL-Forum)

    Ich freue mich über jeden der sich entschließt mir zu helfen!!!

    Vielen Dank fürs lesen ;)


    Mittwoch, 18. April 2012 12:38

Alle Antworten

  • hallo,

    also ich arbeitete bis vor kurzem auch an meiner Bachelorarbeit. Mein Thema war es, für eine firmeninterne Datenbank ein geeignetes Datenbanksystem zu finden und ein entsprechendes Datenbankentwicklungstool, um eine brauchbare Datenbankanwendung zu erstellen.

    Die alte Lösung war in Access realisiert und konnte nur von einem geöffnet/bearbeitet werden. Außerdem war der Aufbau sehr komplex, sodass man diese auf jedenfall hätte erneuern müssen.

    Als Datenbanksystem habe ich auch den MS SQL Server 2008 (Express) aus der Auswahl von Oracle Express, Postgresql und MySQL gewählt. Der Grund war, dass das DBS so einfach wie möglich sein sollte und die alten Access-Daten ohne Probleme in SQL migriert werden könenn (was bei Access über den Upsizing-assistent geht).

    Jetzt hast du nach Vor-NAchteilen solcher Systeme gefragt;

    + Datenbanksysteme sind selbstständige Diestne, die auf einer Hardware laufen. Es können mehrere Arbeiter gleichzeitig mit den Daten arbeiten. Das würde bei Access auch gehen, aber stell dir vor, der Strom fällt aus oder das Netzwerk ist fehlerhaft, d.h. deine Access-Datenbank könnte danach schrott sein. der MS SQL Server hingegen führt das sogenannte Transaktionsprotokoll. Dadurch lässt sich die Datenbank wiederherstellen.

    + Benutzerverwaltung: den MS SQL Server kannst du in eine Windows Domäne aufnehmen. Du kannst dann Gruppen bilden, und diesen Berechtigungen im DBMS geben. Benutzer, die rausfallen, müssen nur im Active Directory aus der Gruppe entfernt werden. Zudem können die Benutzer über die integrierte Windowsauthentifizierung sich anmelden am SQL Server, wodurch du kein Login Fenster mit Passworteingabe realisieren musst.

    So, mehr fällt mir gerada nicht ein.

    du willst als Frontend Excel verwenden ? Ich habe mein eigenes Frontend mit Visual Studio generiert. Geht relativ leicht über Drag&Drop.

    Gruß

    Felix

    Freitag, 20. April 2012 14:00
  • Hi, ich arbeite schon viele Jahre im SQL Server Umfeld und kann dir hier noch ein paar Tipps geben:

    Warum SQL Server 2008 und nicht SQL Server 2012? hier hättest du als neues Feature FileTables, eine Erweiterung von Filtstream, damit wäre es dir möglich alle Ecel Dateien in einem Verzeichnis auf dem Server abzulegen und den gesamten Inhalt des Verzeichnisses hättest du in einer Tabelle und könntest die Dateien samt Inhalt sogar mit einem Volltextindex belegen und die Tabelle ist natürlich auch mit SQL bearbeitbar / abfragbar.

    Excel als Frontend!? Na gut, was muss das muss ;-) ich würde auch zu Visual Studio tendieren, und mir ein Frontend erstellen, von dort aus könntest du dann z.B. die Excel Dateien wie in einem kleinem DMS verwalten, ein und aus checken oder ähnliches realisieren, wenn es darum geht keine weitere Software auf den Rechnern zu installieren könnte man das ganze auch sehr schön und einfach mit ASP oder SilverLight entwickeln.

    Ich rufe auch noch mal eine weitere Technologie auf den Stand, hast du mal über Sharepoint nachgedacht, da Ihr ja sehr Dateilastig arbeitet, bietet Sharepoint auch in der kostenlosen Version sehr viele Möglichkeiten. Volltextindizierung, und automatische Versionierung von Dokumenten sein hier nur 2 Punkte.

    Du könntest also in Excel ein Macro schreiben, was die Daten in die entsprechenden Tabellen auf dem SQL Server schreibt und beim Speichern des Dokuments wird eine neue Version mit den geänderten Daten auf dem Sharepoint abgelegt. Mit Sharepoint könntest du sogar Workflows beim speichern von Dokumenten abarbeiten lassen etc. pp.

    ich weiß nicht wie wichtig euch Reports sind, diese bekommst du in form von den Reporting Services natürlich auch noch mit dem SQL Server mit geliefert, das wäre für mich ein weiterer Pluspunkt.

    Viele Grüße

    Theo

    Freitag, 20. April 2012 18:26
  • @Felix: Wow nice, kannst du mir evtl deine Quellen nennen? Ich suche dringed gute Quellen/Literatur/Tutorials.
    Bei dem Frontend bin ich auf eine Lösung hinaus, bei der ich wirklich sehr sehr geringen Programmieraufwand habe, da ich da wirklich nicht der beste bin. Mit welchen Part von Visual Studio hast du gearbeitet? Ich habe gestern LightSwitch entdeckt, dass Programm hat mich sehr überzeugt. Innerhalb weniger Minuten hatte ich eine Verbindung zum SQL Server und eine sehr gut aussehende Maske in der ich (im gegensatz zu Excel) auch sofort Daten schreiben und nicht nur lesen konnte. Ich bin nur nicht sicher, ob ich dass Programm vom Unternehmen bekommen kann.

    @Breimeyer: Mein Betreuer will die Kosten für das Projekt möglichst gering halten. Eine Lizenz für die 2008er ist vorhanden.
    Mit Sharepoint habe ich auch noch nicht gearbeitet. Mein Problem ist jetzt aber die Zeit. Es gibt scheinbar sehr viele Möglichkeiten und Lösungswege. Ich muss jetzt den, mit dem geringesten Programmieraufwand finden und dann den ersten Prototypen entwickeln. Erstmal sollen die Anforderungen erfüllt werden:

     - Anwendung mit Eingabemasken zum schreiben auf die Datenbank
     - Möglichkeit bestimmte Sichten oder Abfragen im Excel-Format zu exportieren
     - Möglichkeit bestimmte Daten direkt Zellen einer vorgegebenen Excel-Datei zu schreiben und bestimmte Werte wieder in die Datenbank zurück zu schreiben

    Die ersten beiden Punkte kann man sehr gut mit LightSwitch lösen. Kann mir jemand mit dem 3. Punkt weiterhelfen?

    Dienstag, 24. April 2012 12:08
  • zu was möchtest du die quellen haben ? ich habe halt einige Bücher über google und diverse msdnn seiten durchstöbert...

    lol. ich bin auch nicht gut im proggen, aber ich bin grad richtig überrascht, dass ich das hinbekommen habe.

    also ich habe die visual studio 2010 Express c# genommen. damit kannst du allerdings nur lokale sql server einbeziehen. du kannst aber (da du ja student bist, hast du sicherlich zugriff auf msdna) mit einer vollversion von vs den server anlegen und dann das projekt in der express version weiterarbeiten. oder du änderst den connection string in der express, das sollte dann auch gehen, ist aber etwas verzwickt.

    lightswitch kommt leider zu spät für mich, hört sich aber toll an.

    musst du denn einen vergleich von datenbanksystemen machen ?

    ich würde dir mal die webcasts von herrn dröge ans herz legen:

    http://www.microsoft.com/germany/msdn/webcasts/library.aspx?id=1032405667

    ab mitte mit ado.net fand ich es sehr interessant. es schadet auch nicht, wenn du dir die vorherigen videos anschaust.

    einen export nach excel habe ich auch schon realisiert, man muss nur etwas googlen :)

    export zu excel:

    http://csharp.net-informations.com/datagridview/csharp-datagridview-export-excel.htm

    http://www.tutorials.de/net-web-und-kommunikation/214924-datagridview-excel-exportieren.html

    import von excel (noch nicht getestet):

    http://csharp.net-informations.com/datagridview/csharp-datagridview-load-excel.htm

    ich denke, dass du bei 3) nicht um ein bisschen programmieren herum kommst. schau dir mal die links an. vlt. kommst du auf eine idee.

    oder wie meinst du das =? du willst in excel in eine zelle schreiben und das dann in die datenbank hochladen ? wenn du mit datagridviews arbeitest, brauchst du das doch nicht, oder ich versteh dein vorhaben nicht so ganz^^

    grüße

    felix

    Dienstag, 24. April 2012 12:57
  • Haha, ja cool das du es hinbekommen hast, obwohl du auch nicht der beste im Proggen biste.. das gibt mir etwas Hoffnung! =)

    Bei der Softwarewahl muss ich mich leider auf die Lizenzen des Unternehmens beschränken. Okay, ich denke so wie du es beschreibst würde ich die Datenanbindung hinbekommen, nur vor c# habe ich ein wenig Angst. :D

    Jop ich muss einen Vergleich von MSSQL, Access, SAP, Lotus Notes und jetzt neu: MySQL machen. Anschließend eine Nutzwertanalyse durchführen. Ich weiß das bei SAP und Lotus Notes sehr schwer ein Vergleich zu anderen Datenbanksystemen möglich ist, aber es geht auch mehr um den Vergleich der Lösungswege insgesamt. Also Front+Backend+Schnittstellen als Gesamtpaket.

    Um den Export noch einmal genauer zu erläutern:

    Bisher wird eine Datenerfassung im Excel-Format gelebt. Für jedes neue Projekt muss also eine neue Excel-Datei angelegt werden. Diese Datenerfassung soll jetzt von einer Datenbank+Frontend abgelöst werden. Soweit so gut.
    Bestimmte Werte aus dieser Datenerfassung müssen in eine andere Excel-Datei übertragen werden. Diese Excel-Datei ist vom Konzern vorgegeben und darf nicht verändert werden. Die Übertragung der Daten wird z.Z. manuell durchgeführt. Ein weiterer Teil der neuen Anwendung soll also die Übertragung dieser Daten per Knopfdruck sein.

    Also so nach dem Motto:

    Das Datum xy aus dem Tabelle abc der neuen Datenbank soll in die Excel-Tabelle in Zelle A1 der Tabelle was übertragen werden.
    Dabei soll das Schema immer gleich sein, da die Zieldatei immer den gleichen Aufbau hat.
    In dieser Excel Tabelle werden dann Berechnungen vorgenommen. Die Ergebnisse sollen dann wieder in die Datenbank übertragen werden.

    Ich hoffe es ist etwas deutlicher geworden, was ich mit dem Ex- und Import meine.

    Ich schau mir nachher mal an, was du mit den Datagridviews meinst (noch nix von gehört). :D

    Dienstag, 24. April 2012 14:33
  • hmmm,.

    mssql und mysql nehmen sich eigentlich nicht viel, wenn sie nur als backend eingesetzt werden. access ist bei euch halt schon da, aber was ich gelesen habe, ist access unsicherer als msswl...

    hast du dir denn schon gedanken gemacht, wie du die systeme vergleichst ? bei mir war es so, dass ich ein szenario erstellt habe, bestehend aus installation, import der Access-daten (bei dir import von Excel), bewertung des Management.-tool für den admin ...

    kurz gesagt: welches datenbanksystem ist leicht zu bedienen und erspart mir viel zeit. das unternehmen hat kein interesse daran, komplexe systeme einzusetzen, bei denen man dann noch externen support braucht. außerdem wird bei uns schon ein mssql server eingesetzt, d.h. die auswahl war dann leicht, man musste nur die punkteverteilung beachten, hat aber trotzdem gepasst.

    da ich mein system bald auch in sap umsetzen darf, habe ich schon gehört, dass sap schwierig ist und wenn du dich damit einarbeiten musst, geht dir viel zeit dadurch verlohren.

    Dienstag, 24. April 2012 14:58
  • Kann mir hier jemand sagen, ob es die Möglichkeite gibt, Werte einer Datenbank (abhägig von der Projektnummer) in ein bestehendes Excel-Sheet zu schreiben?

    Hinterher soll das in etwa so aussehen:

    In meiner Oberfläche (evtl. per LightSwitch entwickelt) wähle ich ein Projekt aus. Die Maske beinhaltet nun die Übersicht aller wichtigen Projektdaten. Nun gibt es einen Button "in Berechnungsdatei übertragen". Wenn ich diesen drücke möchte ich die Berechnungsdatei auswählen können und dort nach einem vorgegebenen Muster (das immer gleich bleibt) bestimmt Projektwerte in die vorgegebenen Zellen und Tabellen der Excel-Datei schreiben.

    Wie kann man so etwas realisieren? Kann ich da mit dem Management-Tool was stricken und das ganze mit dem Button in Lightswitch verbinden? Brauche dringend Rat!
    Donnerstag, 26. April 2012 12:48
  • sorry, war hier schon seit ner ewigkeit nicht mehr, weil ich mich auf ein kolloquium vorbereiten musste.

    wie möchtest du denn die Projektdaten auf deiner Oberfläche anzeigen lassen ? als Formularansicht oder Tabellenansicht ?

    Ich nehme mal an, dass die Berechnungsdateien alle unterschiedlich vorgegeben sind, d.h., du musst für jede Datei die Funktion zum Export irgendwie anpassen. Wenn du nur bestimmte Werte übertragen wilst, so würde es sich vlt. anbieten, Checkboxen einzuführen. Beim Export musst du dann eben bei jeder Zelle überprüfen, ob die Checkbox gecheckt war (vlt. etwas umständlich).

    hast du dir das mal angeschaut ? du wirst dann eben schauen müssen, dass du die Werte z.b. aus einem datagridview in die richtige Zelle in Excel exportierst

    http://csharp.net-informations.com/datagridview/csharp-datagridview-export-excel.htm

    Mittwoch, 2. Mai 2012 09:57
  • Hey, kein Problem! Wann musste denn? Wünsch dir auf jeden Fall viel Erfolg! =)

    Die Berechnungsdatei ist immer die gleiche!

    Daher stelle ich mir den Im-/Export auch relativ einfach vor:

    Optimal:
    Der Anwender hat einen Reiter "Projekt anzeigen". Dort kann er in ein Formularfeld die Projektnummer eintragen. Nun bekommt er alle wichtigen Daten des Projekts angezeigt. Er hat nun die möglichkeit über "Exportieren" eine leere Berechnungsdatei mit den Projektdaten zu füllen.

    Unschön:
    Ich Exportiere die Daten nicht direkt in die Zellen der Datei, sondern in ein extra Blatt. Dann muss ich noch ein extra Macro für Excel schreiben, welches die Daten den richtigen Zellen zuordnet.

    Die erste Variante wäre natürlich viel eleganter. Das mit dem Datagrid habe ich überflogen, meinst du, dass ich sowas damit hinbekommen kann? LightSwitch unterstützt ja auch C#, oh man ich seh da ein haufen Probleme auf mich zu kommen.
    Ich hab gedacht es gibt beim SQL-Server evtl. direkt sone Funktion mit der ich sowas schaffe.

    Mittwoch, 2. Mai 2012 11:26
  • war letzten freitag. lief wunderbar, trotzdem danke ;)

    werden die Projektdaten in einer Mastertabelle gespeichert oder gibt es für jede Abteilung dann eine eigene Tabelle ?(muss es ja, ansonsten wären die gleich aufgebaut).

    Ich stelle mal eine ganz dumme frage (lol) : warum verlegst du das Bearbeiten der Daten nicht von Excel in die neue Anwendung. wäre das nicht noch eleganter ? ein Programm für alles ? Ich meine, wenn ich die Daten von einem Programm in mein Excel-Sheet lade, bearbeite und wieder hochlade, kann ich diese Bearbeitung doch gleich im Programm machen. Zwar stehen mir dann nicht mehr die Excelfunktionen zur Verfügung, aber wenn ich diese nicht brauche, dann kann ein datagridview so eine Exceltabelle locker ersetzen. ist halt gewöhnungsbedürftig, aber das ist bei jedem Programm so. Mit dieser Methode verkleinerst du praktisch die Komplexität des Programmes. Aber nun gut, wenn der Boss es so haben will...

    Ich würde dir jedenfalls mal empfehlen, mit kleinen Testprojekten anzufangen (z.b. nimm eine Testtabelle und implementiere einen Export nach Excel - den Link habe ich hier ja schon hinzugefügt, musst also nicht viel umändern). Und dann in das große System integriern. Und am Besten machst du einen Zeitplan, wann du was tun möchtest, auch wenns grob ist. Dann kannst du sehen, wie weit du bist und somit fällt es dann leichter, bestimmte Anforderungen aus dem  Programm zu nehmen. Du sollst ja schließlich eine wissenschaftliche Arbeit abgeben. Notfalls kann dich der Betrieb ja noch etwas länger einstellen, damit du das Programm weiterentwickeln kannst. Ich würde jedenfalls erstmal mit dem Zeitplan nachsehen, was alles machbar ist, ich denke, dass du auch nur 3-6 Monate Zeit hast, also übernimm dich nicht mit zuvielen Funktionen - denke dran: Die Arbeit ist auch nicht über die Nacht geschrieben. einen Monat solltest du da schon investieren.

    back to Topic:

    ist Lightswitch bei dir jetzt das Entwicklungstool oder bist du noch beim rumschauen ? Lizenztechnisch sollte Lightswitch günstiger sein als eine VS-vollversion (mann, ich muss das lightswitch auch mal testen...)

    Ich jedenfalls würde dir empfehlen, die Bearbeitung ins Programm zu verlegen. Prüfe mal nach, warum es in Excel gemacht werden muss. Denn das würde dir viel Arbeit ersparen. Dann würde ich für jede Abteilung/Projekt eine eigene Tabelle pflegen und dort die Daten einspeichern. 

    Mittwoch, 2. Mai 2012 12:59
  • Ich brauche dringend Hilfe beim Erstellen von berechneten Spalten.

    Kurze Zusammenfassung:

    Ein Bauteil besteht aus mehreren Einzelteilen. Dieses Verhältnis wird in ZBauteileEinzelteile abgebildet.
    In der Zuordnung von Einzelteilen zu Geschäftsjahren werden z.b. die Kosten der Einzelteile für jedes einzelne Geschäftsjahr bestimmt. In der Zuordnung Baugruppen Geschäftsjahre möchte ich nun die Kosten pro Jahr haben, welche die Gesamtkosten der in dem Bauteil enthaltenen Kosten entspricht.

    Ich bekomme jedoch leider die Syntax nicht richtig hin. Kann mir da jemand helfen?
    Die Syntax sollte ähnlich lauten wie (zur Vereinfachung nehme ich ausgeschriebene Spaltennamen):
    SUM(Einzelpreis) from ZEinzelteileGeschäftsjahre
    where Geschäftsjahr.ZEinzeilteileGeschäftsjahre = Geschäftsjahr.ZBauteileGeschäftsjahre,
    OrderBy Geschäftsjahr.ZEinzelteileGeschäftsjahre, BauteilID.ZBauteileGeschäftsjahre

    Die Syntax ist natürlich falsch.. das soll nur mal darstellen, wie ich mir das ca. denke. Das ist auch nicht der einzige Fall, wo ich eine solche Summierung brauche. Es würde mich also sehr freuen wenn mir jemand behilflich seien kann. Alle computed column beschreibungen die ich finde, sind ohne solche Beziehungen beschrieben und helfen mir leider nicht weiter.

    Dienstag, 5. Juni 2012 11:35
  • Hallo!
    Da scheinst Du etwas zu verwechseln. Lies Dir doch mal diese beiden Artikel durch:
    http://www.insidesql.org/blogs/cmu/sql_server/berechnete-spalten
    http://msdn.microsoft.com/de-de/library/ms191250.aspx

    Damit werden die Möglichkeiten klar, aber diese Einschränkung ist ganz wichtig:
    Eine berechnete Spalte wird aus einem Ausdruck berechnet, der andere Spalten in derselben (!) Tabelle verwenden kann.

    Du willst aber über mehrere Tabellen gehen. Vielleicht solltest Du doch lieber eine View erstellen?
    Das könnte auch eine indizierte Sicht sein:
    http://msdn.microsoft.com/de-de/library/ms191432.aspx
    Erstellen von indizierten Sichten

    Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    www.insidesql.org/blogs/cmu

    Dienstag, 5. Juni 2012 12:26
  • Vielen Dank für die Antwort!

    Ich habe nun einen View erstellt, welcher mir auch die richtigen Ergenisse liefert. Nun habe ich aber das Problem, dass ich diesen View nicht in LightSwitch anzeigen lassen kann. LightSwitch braucht scheinbar immer einen PrimaryKey, diesen gibt es aber nicht, denn der View besteht immer aus der Kombination: BauteilNummer, Geschäftsjahr und Einzelpreis.

    Gibt es eine Möglichkeit das Ergebnis des Views in der Tabelle zu speichern?
    Mittwoch, 6. Juni 2012 09:23
  • Du könntest natürlich ein Update auf die Tabelle mache, aber dann sind die Daten nicht ganz aktuell.

    Falls Du also wirklich eine berechnete Spalte in der Tabelle benötigst, die aktuell ist, dann musst Du auf allen Tabellen, die zur Berechnung verwendet werden entsprechende Trigger anlegen, die mehr oder weniger Sätze aktualisieren würden.

    Leider hast Du nur sehr wenig zum Hintergrund der Anforderung verraten. LightSwitch kenne ich nicht, habe aber diese Info gefunden:
    VS Lightswitch 2011 zeigt nur Datenbank Views an, wenn diese einen Primary Key- oder mindestens eine Not Nullable Spalte enthalten (welche LS dann intern als Key nutzen kann). Alle anderen Views werden ohne weitere Meldung ausgeblendet.

    Auch noch interessant:

    http://kostaschristodoulou.blogspot.de/2012/02/re-views.html

    HTH!
     Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    www.insidesql.org/blogs/cmu


    Mittwoch, 6. Juni 2012 09:48
  • Mit Triggern hab ich bisher noch nicht gearbeitet, daher weiß ich nicht genau wo ich da was anlegen muss. Werde ich aber im laufe der Woche eh lernen müssen, da ich die Dinger wohl für eine "Versionierung" brauche.

    Welche Infos zur den Anforderungen benötigst Du genau? Im gesamten Thread sind die Anforderungen an die Anwendung selber beschreiben.

    Ich hatte bis eben noch nicht eingestellt welche Spalten "Nut Null" sein müssen. Laut dem Post den Du gerade gelinkt hast, kann sich LightSwitch einen Key aus den Not Null Spalten basteln. Ich werde mal versuchen, ob er den View jetzt nimmt.

    Als 2. Versuch habe ich mir gerade einfach einen ganz neuen Key zu generieren. Die Kombination aus Geschäftsjahr und BauteilID kann nur einmal vorkommen, daher müsste ein Key aus dieser Kombination funktionieren.

    So sieht das ganze bisher aus:

    SELECT   
    dbo.ZEinzelteileGeschäftsjahre.JAHR,
    SUM(dbo.ZEinzelteileGeschäftsjahre.Z_EG_EP * dbo.ZBauteileEinzelteile.Z_BE_ANZAHL) AS Z_BG_EP, 
    dbo.ZBauteileEinzelteile.BT_ID,
    dbo.ZEinzelteileGeschäftsjahre.JAHR & dbo.ZBauteileEinzelteile.BT_ID AS vID

    FROM        
    dbo.Einzelteile
    INNER JOIN dbo.ZBauteileEinzelteile ON dbo.Einzelteile.ET_ID = dbo.ZBauteileEinzelteile.ET_ID
    INNER JOIN dbo.ZEinzelteileGeschäftsjahre ON dbo.Einzelteile.ET_ID = dbo.ZEinzelteileGeschäftsjahre.ET_ID

    GROUP BY
    dbo.ZEinzelteileGeschäftsjahre.JAHR,
    dbo.ZBauteileEinzelteile.BT_ID


    Mittwoch, 6. Juni 2012 10:32
  • Okay, den View bekomme ich nun angezeigt. Nachdem ich die "Not Null" Kriterien eingestellt habe, hat LightSqitch den View genommen.

    Nur habe ich jetzt ein weiteres Problem.. wie ordne ich den Wert der Tabelle zu?
    Ich denke, dass es viel einfacher wäre, wenn ich das Ergebnis des Views direkt immer in der Tabelle stehen habe. Wenn das relativ einfach mit Triggern zu lösen ist, dann wäre ich sehr über eine kurze Erläuterung dankbar. Ich schaue natürlich parallel selber und versuche es, aber wenn jemand schon den Thread gelesen hat und weiß wie es geht, dann kommen da meist wertvolle Tipps heraus :)

    Mittwoch, 6. Juni 2012 10:47
  • Hallo! Beschreibe bitte mal Deine Tabellenstrukturen etwas genauer. Was ich bisher erahnen konnte:

    Create Table dbo.Einzelteile                                (        ET_ID int);
    Create Table dbo.ZBauteileEinzelteile                (        BT_ID int, Z_BE_ANZAHL
    int, ET_ID int);
    Create Table dbo.ZEinzelteileGeschäftsjahre (        ET_ID int, Z_EG_EP int,
    Jahr int);

    Hier bräuchte man noch Primärschlüssel, Foreign Key Constraints, weitere Unique-Indizes, um zu verstehen, was wie abgebildet werden soll.

    Wenn Du die Summe wie beschrieben irgendwo ablegen willst, brauchst Du ja eine Tabelle, wo JAHR und BT_ID in der Kombination eindeutig sind. Das sehe ich noch nicht.

    Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    www.insidesql.org/blogs/cmu

    Montag, 11. Juni 2012 11:35
  • Die Kombination JAHR und BT_ID sind in der Kombination in der Tabelle ZBauteileGeschäftsjahre eindeutig.
    Ich muss allerdings dazu sagen, dass ich keine eigene Tabelle für JAHR angelegt habe bisher. Das heißt man müsste dann irgenwie definieren können, dass View.Jahr=ZBauteileGeschäftsjahre.Jahr ist. Wenn es einfacher ist, kann ich aber auch eine eigene Tabelle für die Jahre anlegen.

    Schlüssel gibt es eigentlich nur 3

    BT_ID = BauteilID

    ET_ID = EinzelteilID

    JAHR = Geschäftsjahr

    In den Tabellen ZEinzelteileGeschäftsjahre und ZBauteileGeschäftsjahre werden jeweils Kosten dargestellt, welche von Jahr zu Jahr undterschiedlich sind. In der Tabelle ZBauteileEinzelteile wird definiert aus welchen Einzelteilen ein Bauteil besteht.
    Alle Zuordnungtabellen (mit dem Z davor) haben zusätzlich einen Primärschlüssel, der automatisch hochzählt. Diese habe ich nur definiert, weil LightSwitch immer einen Primärschlüssel braucht, um die Tabelle zu verwenden.

    Dienstag, 12. Juni 2012 08:50
  • Hallo!

    Irgendwie habe ich den Eindruck, dass uns Deine Bachelorarbeit noch etwas beschäftigen wird. Ich halte es daher für eine gute Idee die DDLs für das Grundgerüst der Tabelle mit einigen Beispieldaten zu posten, die bei Bedarf erweitert werden können.

    Die Tabelle ZBauteileGeschäftsjahre kannte ich bisher noch nicht! ;-)

    Wie wäre es jetzt mit einer weiteren View, die diese Tabelle und die andere View mit den Berechnungen joined (JAHR und BT_ID)?
    Updates müssen dann auf die Tabelle ZBauteileGeschäftsjahre laufen, Selects können über die View laufen, wenn sie auch den berechneten Wert benötigen.

    Warum muss der Wert unbedingt in der Tabelle stehen?
     Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    www.insidesql.org/blogs/cmu

    Mittwoch, 13. Juni 2012 12:31
  • Ich habe jetzt Views erstellt, welche jeweils die wichtigen Daten enthalten. In einem View stehen nun also nicht nur berechnete Spalten, sondern auch die Grunddaten. Soweit ist es kein Problem, doch ich bekomme diesen View in meinem LightSwitch Programm einfach nicht mit der richtigen Tabelle verbunden.

    Ich poste mal 2 Screens, welche die Sache etwas verdeutlichen werden.

    Im ersten BIld sieht man eine Makse wie sie okay ist. Man kann dort (in diesem Fall) nach Bauteilen sortieren und sieht beim ausgewähten Item die Details. In der Ecke unten-rechts sieht man die jeweiligen Verbindungstabellen. Dort kann ich z.B. die Jahresansicht wählen und dort die betreffenden Spalten füllen.
    Ein View wäre vom Prinzip her nur einer weiterer Reiter, jedoch kann ich in meinem Programm den View nicht mit der Tabelle verbinden.

    Das ist der Grund, warum ich die Werte aus dem View in die Tabelle geschrieben haben möchte. Dann können die Daten ganz normal im Reiter angesehen werden.

    Es gibt evtl. elegantere oder einfachere Lösungswege, aber die sind mir leider nicht bekannt.

    Alle DDLs zu posten wäre ein echtes Chaos, ich weiß nicht ob ich euch das wirklich antuen will. :D

    Donnerstag, 14. Juni 2012 16:28
  • Ich habe meine Bachelorarbeit inzwischen abgegeben und wollte mich bei allen bedanken die nützliche Tipps für mich hatten oder in mir auf eine andere Art und Weise geholfen haben, DANKE!! =)

    Während der Korrekturzeit darf ich weiter im Unternehmen arbeiten und werde noch etwas an meinem Programm und der Datenbank werkeln.

    Im aktuellen Stand sieht es so aus:

    Ich habe auf der Datenbank Shadow-Tabellen angelegt, die per Trigger (einer für Update, Insert und Delete) bei Änderungen mit dem alten Datensatz der Tabelle + User, Zeit usw. gefüllt werden. Es wird also alles was in der Datenbank passiert mitgeloggt.

    Das Verbinden der Views konnte ich lösen indem ich Tabellen und Views separat als zwei verschiedene Datenquellen angegeben habe. Mit diesem Vorgehen war es dann doch möglich Tabellen und Views in dem Programm selber zu verbinden.

     

    Jetzt habe ich aber noch immer das Problem, dass die Versionierung noch nicht so klappt, wie es eigeltich gedacht war. Das Shadow-Tabellen-Konzept loggt jetzt wirklich alles mit und eine Sicht auf diese Daten wäre auch eher unkomfortabel. Was das Controlling wirklich braucht ist folgendes:

    Ein Projekt wird angelegt: Projektnummer wird vergeben, Kunde eingetragen, Systeme verknüpft...

    Wenn nun alles festgelegt wurde, dann möchte der Controller den Stand dieses Projektes einfrieren und unter einer Version speichern. Projekt "X" soll also die Version "2" bekommen.

    Dieser Stand soll dann aber weiterhin verändert werden können. In der Maske soll es dann vom Prinzip her die Möglichkeit geben ein Projekt auszuwählen (Projekt "X") und danach eine Version dieses Projekts (Version "1" für Hauptversion und dann "2", "3" usw. für folgende). Diese Versionierung soll per Button passieren. Die Frage ist jetzt, wie man sowas auf nem SQL Server umsetzen kann. Brauche ich dafür eine gespeicherte Prozedur die ich mit dem Button verknüpfe oder einen Trigger? Ich kann mir sogar vorstellen, dass ich beides brauche. Wenn ich eine Version ziehe, dann muss ich ja nicht nur die Daten aus der Tabelle "Projekt" speichern. Es sind auch alle Verknüpften Tabellen betroffen, wie z.B. ProjekteGeschäftsjahre, ProejtekSysteme, ProjekteModule usw. Das Controlling braucht ein Werkzeug, in dem es möglich ist einen Stand einzufrieren, und diesen trotzdem noch bei Bedarf zu ändern. Wenn das mit der Änderungsanforderung nicht wäre, dann könnte man auch einfach eine Anfrage erstellen, die alle benötigten Werte liefert und dann eine Tabelle damit füllt. Ich hoffe es ist einigermaßen gut rübergekommen, was ich mir vorstelle. Ich hoffe, dass ich wieder ein paar Tipps von euch bekommen kann!

    Liebe Grüße gs3rr4

     

     

    Donnerstag, 5. Juli 2012 12:13