Faire en sorte que COUNTIFS compte les valeurs en double une seule fois

2

J'ai toutes ces données sur les tests:

controller  start   end start ts    end ts
1           1:13    1:15    1:00    1:30
1           2:08    2:25    2:00    2:30
4           4:02    4:16    4:00    4:30    
4           4:17    5:35    4:00    6:00
2           4:03    5:39    4:00    6:00

Bien que chaque test commence et se termine à une heure précise, le planificateur pour les tests réserve une plage de temps entière d'une demi-heure. Par conséquent, j'indique les temps avec FLOOR et CEILING.

Chaque test utilise un contrôleur spécifique et pendant l'exécution, aucun autre test ne peut utiliser ce contrôleur.

À partir de ces données, je souhaite calculer le nombre maximal de contrôleurs simultanés utilisés pour une période donnée. Pour ce faire, j'ai pensé pouvoir calculer le nombre de contrôleurs utilisés lors du démarrage d'un test donné, car c'est le seul moment où le nombre de contrôleurs utilisés augmentera.

Donc, ma formule était la suivante: (en utilisant la très belle syntaxe de données de table de 2010)

=COUNTIFS([start timeslot],"<="&[@[start timeslot]],[end timeslot],">"&[@[start timeslot]])

Cependant, étant donné que l'arrondi de plages horaires introduit un chevauchement entre les tests qui ne se chevauchent pas réellement, les compteurs compteront les tests sur le même contrôleur autant de fois qu'ils se produiront.

J'ai besoin d'un moyen de faire en sorte que COUNTIFS compte les valeurs en double une seule fois quand elles se produisent dans les plages correspondantes.

Voici un fichier Excel avec des exemples de données et mes formules:

http://dl.dropbox.com/u/123900/sumproducttest.xlsx

Plus d'informations:

J'ai en fait construit une formule matricielle qui calcule les nombres que je veux:

{=SUM(--([start timeslot]<=[@[start timeslot]])*--([end timeslot]>[@[start timeslot]])*IFERROR(1/COUNTIFS([controller],[controller],[start timeslot],"<="&[@[start timeslot]],[end timeslot],">"&[@[start timeslot]]),0))}

Les objets COUNTIF dans cette formule génèrent un tableau pondéré du nombre de fois qu'un contrôleur spécifique se produit dans l'ensemble de tests en cours d'exécution au démarrage du test en cours. Ainsi, la fonction sum comptera deux tests qui utilisent le contrôleur chacun comme 1/2, ce qui entraîne le comptage de ce contrôleur une seule fois au total.

Cependant, mon jeu de données réel compte plus de 3 000 lignes et ma formule matricielle apporte un mauvais Excel à genoux. (Même ma fonction de compte-rendu erronée COUNTIFS prend environ 30 secondes sur mon ancien ordinateur portable dual-core. La formule matricielle correspond à 1% en calculant toutes les minutes environ; _;)

Steven Ruppert
la source
Pourquoi ne pas éliminer le chevauchement en soustrayant 1 minute de votre end tscolonne lors du calcul de la endcolonne?
Mike Insch
Le problème de chevauchement ne se produit pas au début et à la fin des intervalles de temps; Cela est pris en charge par [fin de la plage horaire], ">" & [@ [début de la plage horaire]]. Le chevauchement qui me préoccupe est que deux tests exécutés sur le contrôleur 4 entraîneront le calcul de la formule par le contrôleur 4 à deux reprises si les deux tests sont exécutés pendant le démarrage d'un autre test. Je veux attraper que le contrôleur 4 est utilisé à ce moment-là, mais ne le surévaluez pas.
Steven Ruppert
OK, pourquoi créez-vous ces formules pour chaque ligne, alors que vous ne les voulez que par intervalle de temps. Il semble que vous utilisiez une autre table. Il n'est pas étonnant que vos formules vous tuent. De plus, sumproduct n'a pas besoin d'être une formule matricielle, il gère les tableaux en interne.
Lance Roberts
Je travaille sur ce projet depuis longtemps, et c'est un problème difficile à résoudre.
Lance Roberts
Eh bien, après quelques heures, je pense que vous aurez besoin de faire quelques colonnes intermédiaires, mais je reviendrai là-dessus plus tard.
Lance Roberts

Réponses:

1

À partir de ces données, je souhaite calculer le nombre maximal de contrôleurs simultanés utilisés pour une période donnée.

Eh bien, si vous voulez le faire dans Excel, pourquoi ne pas utiliser un tableau croisé dynamique. Ils ont été conçus pour un résumé de données comme ceci:

(S'il vous plaît noter le compte dans la colonne extérieure droite)

Excel avec données source et pivot et à droite du pivot

PS Vous pouvez sélectionner n’importe quel groupe de données que vous souhaitez (début, fin, début, fin, .....)

racine-11
la source