private IEnumerable<IEnumerable<string>> Aggregate(OutputData data, InputData inputData)
        {
            var groups =
                ExtractGroupCombinations(inputData.Configuration.GroupVariables.ToList())
                    .Distinct(comparer)
                    .ToList();
            var tables = GetTables(data).ToList();

            yield return GetHeaders(groups.SelectMany(g => g.Select(t => t.Name)).Distinct(), tables.First());

            for (var i = 0; i < groups.Count; i++)
            {
                yield return GetRow(groups[i], tables[i]);
            }
        }
        private IEnumerable<GroupTable> GetTables(OutputData data)
        {
            var result = new List<GroupTable>();
            var table = new List<List<string>>();

            foreach (var row in data.Rows.ToCompleteList().Where(IsMeaningRow))
            {
                if (row.IsEmptyStringCollection() && table.Any())
                {
                    result.Add(new GroupTable(table.ToList()));
                    table.Clear();

                    continue;
                }

                table.Add(row.ToList());
            }

            result.Add(new GroupTable(table.ToList()));
            table.Clear();

            return result;
        }