/// <summary>
        /// Get content from the intermediate file and join with the rest of the values
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="valueIndex"></param>
        internal void JoinIntermediateFromFile(string fileName, int valueIndex)
        {
            Log.WriteLine("joining intermediate " + fileName);

            Intermediate srcIntermediate = new Intermediate();;

            srcIntermediate.ReadFromFile(fileName);

            Intermediate indexedIntermediate = srcIntermediate.GetIndexedValues(valueIndex);

            this.intermediate.Expand(indexedIntermediate, Path.GetDirectoryName(fileName).Split('\\').Last());
        }
        /// <summary>
        /// Get content from the intermediate file and join with the rest of the values
        /// </summary>
        /// <param name="project"></param>
        /// <param name="testrun"></param>
        /// <param name="category"></param>
        /// <param name="entity"></param>
        /// <param name="valueIndex"></param>
        internal void JoinIntermediateFromDatabase(string project, string testrun, string category, string entity, int valueIndex)
        {
            Log.WriteLine(string.Format("joining intermediate {0}/{1}/{2}/{3}/{4}", project, testrun, category, entity, valueIndex));

            // read testrun intermediate from database
            Intermediate srcIntermediate = new Intermediate();
            int          cnt             = srcIntermediate.ReadFromDatabaseValues(project, testrun, category, entity);

            Log.WriteLine(string.Format("num of values read for entity [{0}/{1}]: {2}", category, entity, cnt));

            // filter only one indexed value per key
            Intermediate indexedIntermediate = srcIntermediate.GetIndexedValues(valueIndex);

            // add filtered list to result/target intermediate
            this.intermediate.Expand(indexedIntermediate, testrun);
        }