it-swarm.com.de

Umgang mit mehrstufigen hierarchischen Strukturen und Aggregationen gleichen Typs

Dies ist keine reine Entwicklungs- oder UI-Frage, sondern eine Verhaltensfrage, aber ich finde anscheinend nicht die richtige StackExchange-Gruppe, um sie zu veröffentlichen. Bitte stimmen Sie mich nicht ab, wenn diese Frage nicht angemessen ist, sondern weisen Sie mich auf die richtige Gruppe hin.

In meiner Anwendung habe ich eine hierarchische Struktur von Elementen, die alle vom gleichen Typ sind. Z.B. Abteilungen, in denen Abteilungen anderen Abteilungen angehören können.
Ich habe auch Berichte, die alle Abteilungen mit ihren Merkmalen zeigen, z. den Arbeitsaufwand jeder Abteilung oder die von jeder Abteilung erzielten Einnahmen.
Wenn eine Abteilung andere Abteilungen enthält, sollten die Werte der Unterabteilungen zum Wert der Abteilung selbst addiert werden.

Z.B. Nehmen wir an, wir haben die Abteilungen A1, A2, B1 und B2, und die Abteilungen A1 und A2 gehören zur Abteilung A0, und die Abteilungen B1 und B2 gehören zur Abteilung B0. Nehmen wir an, sie haben alle 100 Arbeitseinheiten ausgeführt, als der Bericht dies zeigen würde:

  • A0: 300
  • A1: 100
  • A2: 100
  • B0: 300
  • B1: 100
  • B2: 100

Probleme beginnen, wenn der Benutzer beschließt, Aggregationen für diese Abteilungen durchzuführen. Z.B. Gruppieren Sie alle Abteilungen nach ihrer letzten Ziffer:

  • gruppe 0: 600
  • gruppe 1: 200
  • gruppe 2: 200

Dies scheint immer noch ziemlich logisch, aber was ist, wenn eine Aggregation sowohl Abteilungen der obersten Ebene als auch Abteilungen der unteren Ebene enthält? Z.B. Abteilungen, gruppiert nach der Nationalität des Abteilungsleiters (fiktives Beispiel):

  • gruppe {A0, A1, B1}: 300 (also nicht A1 und A2 zu A0 hinzufügen)? oder 500 (Hinzufügen von A1 und A2 zu A0)? oder 400 (nur A2 zu A0 hinzufügen)?
  • gruppe {B0, A2}: 200 (ohne Hinzufügen von B1 und B2 zu B0)? oder 500 (Hinzufügen von B1 und B2 zu B0)?
  • gruppe {B2}: 100

Die Dinge werden noch komplexer, wenn der Benutzer Abteilungen herausfiltern kann (z. B. berücksichtigen Sie keine Abteilungen, die weniger als 5 Personen enthalten).

Natürlich könnten wir dem Bericht noch eine Konfigurationsoption hinzufügen, in der der Benutzer angeben kann, ob Unterabteilungen berücksichtigt werden sollen oder nicht, aber dies scheint das Problem auf den Benutzer zu übertragen.

Gibt es bekannte Artikel, die sich mit solchen Problemen befassen?

3
Patrick

In diesem Fall würde ich einen anderen Ansatz verfolgen und nur Berichtsstunden auf hierarchischer Blattebene zulassen. Auf diese Weise können Sie im Baum immer nach oben rechnen, unabhängig von der Tiefe der Hierarchie.

Auf diese Weise können Sie beliebige Assoziationen haben, da Sie nur die Blätter des Baumes berechnen.

Selbst wenn Sie die Linien der Berechnungen neu zeichnen, sind sie immer noch gültig - und der oberste Knoten (mit allen Blättern) hat immer den richtigen Wert, unabhängig davon, wie die Blätter darunter berechnet werden.

Bearbeiten (Werte existieren nicht nur auf den Blättern)

mockup

bmml source herunterladen - Wireframes erstellt mit Balsamiq Mockups

Dem Kommentar zufolge existieren Knotenwerte noch weiter oben in der Hierarchie. Um dieses Problem zu lösen, benötigen wir auf jedem Knoten unterschiedliche Wertetypen. (1) der Wert des Knotens selbst und (2) der berechnete Wert des Knotens.

Der berechnete Wert (in roter Schriftfarbe im obigen Bild) ist die Summe aller Werte der untergeordneten Knoten + dieses Knotenwerts. Diese Technik erfordert eine fortgeschrittenere Programmierung, ist jedoch recht einfach zu implementieren. Immerhin können Computer sehr gut rechnen.

3
Benny Skogberg

Entweder machen Sie eine Vermutung über den Benutzer oder Sie entscheiden sich für ihn. Es hängt vom Kontext und seinem Beosin ab. In diesem Fall würde ich mich ohne Kenntnis des Kontextes für ihn entscheiden, wobei eine Fußnote die Auswahl der Seiten angibt.

"Alle Unterabteilungen werden automatisch in das Ergebnis einer Abteilung aufgenommen", was die folgende Lösung ergibt:

  • Gruppe {A0, A1, B1}: 400,
  • Gruppe {B0, A2}: 400,
  • (Berücksichtigen Sie beispielsweise nicht die Abteilungen mit weniger als 5 Personen). : Wenn A1 drei Personen enthält, sind A0-Standbilder immer gleich 300.

Eine andere Spur, betrachten Sie A0 als zwei separate Elemente, den Baum gegen sein Ergebnis. Umformulieren, bot die Wahl zwischen:

  • "Das Ergebnis der Mannschaft nur A0"
  • "Das Ergebnis aller Abteilungen von A0, einschließlich A0"
2
Antoine F.