2012-04-13 12 views
0

Helo.LibreOffice Spreadsheet: Wählen Sie zufällige Zelle mit bestimmten Filter

Ich habe das folgende Szenario auf Libreoffice Spreadsheet

  • In einer Tabelle Ich habe Einträge mit bestimmtem Zustand

zB:

id state  name 
---------------------------- 
1 open  OpenState 
2 closed ClosedState 
3 resolved ResolvedState 
... 
  • In der anderen Tabelle Ich habe Liste der Projekte, die zufällig State-I haben D von der ersten Tabelle. Das funktioniert gut.

z:

id state ProjectName 
------------------------ 
1 1  Proj_1 
2 1  Proj_2 
3 2  Proj_3 
... 
  • Ich habe Probleme mit der dritten Tabelle. In dieser Tabelle möchte ich Testdaten generieren. Die Einträge haben auch den Status aus der ersten Tabelle. Jetzt brauche ich eine Libreoffice-Funktion jeden Eintrag ein Zufall Projekt aus der zweiten Tabelle zugeordnet werden, die den gleichen Zustand wie der Eintrag Zustand

zB hat:

id state project EntryName 
-------------------------------- 
1 1  2   Entry_1 
2 1  1   Entry_2 
3 1  1   Entry_3 
4 2  3   Entry_4 
... 

Antwort

0

IMO diese Aufgabe übersteigt Calc Möglichkeiten. Das Hauptproblem besteht darin, dass es anscheinend keine Formel gibt, die eine Teilmenge von Zeilen zurückgibt (die Projekte, die denselben Status haben). Dies würde eine Filterung erfordern, aber es scheint keine Möglichkeit zu geben, die Filterung während des Betriebs anzuwenden. Also, das wird nicht funktionieren, ohne die zweite Tabelle vorzubereiten, die den Status jedes Projekts enthält.

Also, IMO die einfachste Lösung wäre, drei persistente Filterergebnisse zu erstellen, die Projekte mit identischem Status auflisten. Mit diesen Filterergebnissen können Sie die Funktionen INDEX und RANDBETWEEN verwenden, um eines der Projekt-IDs zufällig auszuwählen.

die Projekte Filtern zu diesem Blatt führen:

Projects

Mit jeder der drei Filterergebnisse als benannte Bereiche definiert (ProjState1: $E$1:$G$4 etc.), können Sie die folgende Formel:

=IF(($B2=1);INDEX(ProjState1;RANDBETWEEN(2;ROWS(ProjState1));1) ;IF(($B2=2);INDEX(ProjState2;RANDBETWEEN(2;ROWS(ProjState2));1);INDEX(ProjState3;RANDBETWEEN(2;ROWS(ProjState3));1))) 

RANDBETWEEN gibt eine Zufallszahl zwischen zwei Ganzzahlen zurück; der erste ist 2 (weil ich die Header als Zeile 1 der Bereiche eingefügt habe), der zweite ist die letzte Zeile des Bereichs. INDEX wählt den Wert der zufällig zurückgegebenen Zeile aus.

auf mehreren Linien Aufgeteilt:

=IF(
    ($B2=1); 
    INDEX(
     ProjState1; 
     RANDBETWEEN(
      2; 
      ROWS(ProjState1) 
     ); 
     1 
    ); 
    IF(
     ($B2=2); 
     INDEX(ProjState2;RANDBETWEEN(2;ROWS(ProjState2));1); 
     INDEX(ProjState3;RANDBETWEEN(2;ROWS(ProjState3));1) 
    ) 
) 

mit dieser "Einträge" Tabelle:

Entries

+0

Dank für die Lösung. Ich werde es versuchen. – WebDucer

Verwandte Themen