/// <summary>
        /// Write the columns
        /// </summary>
        /// <param name="mappedValues">
        /// The mapped components and their values 
        /// </param>
        /// <param name="tabularInfo">
        /// The current data retrieval state 
        /// </param>
        protected virtual void WriteColumns(MappedValuesFlat mappedValues, DataRetrievalInfoTabular tabularInfo)
        {
            tabularInfo.TabularWriter.StartColumns();
            foreach (var dimensionValue in mappedValues.DimensionValues)
            {
                tabularInfo.TabularWriter.WriteColumnKey(dimensionValue.Key.Id);
            }

            if (tabularInfo.MappingSet.Dataflow.Dsd.TimeDimension != null)
            {
                tabularInfo.TabularWriter.WriteColumnKey(tabularInfo.MappingSet.Dataflow.Dsd.TimeDimension.Id);
            }

            foreach (var measureValue in mappedValues.MeasureValues)
            {
                tabularInfo.TabularWriter.WriteColumnMeasure(measureValue.Key.Id);
            }

            foreach (var attributeValue in mappedValues.AttributeValues)
            {
                tabularInfo.TabularWriter.WriteColumnAttribute(attributeValue.Key.Id);
            }
        }
        /// <summary>
        /// Write data to <see cref="DataRetrievalInfoTabular.TabularWriter"/> from the specified <paramref name="tabularInfo"/>
        /// </summary>
        /// <param name="mappedValues">
        /// The map between components and their values 
        /// </param>
        /// <param name="tabularInfo">
        /// The current Data Retrieval state 
        /// </param>
        protected override void WriteData(MappedValuesFlat mappedValues, DataRetrievalInfoTabular tabularInfo)
        {
            base.WriteData(mappedValues, tabularInfo);

            foreach (var localColumn in mappedValues.GetLocalValues())
            {
                tabularInfo.TabularWriter.WriteCellAttributeValue(localColumn.Value);
            }
        }
        /// <summary>
        /// Write data to <see cref="DataRetrievalInfoTabular.TabularWriter"/> from the specified <paramref name="tabularInfo"/>
        /// </summary>
        /// <param name="mappedValues">
        /// The map between components and their values 
        /// </param>
        /// <param name="tabularInfo">
        /// The current Data Retrieval state 
        /// </param>
        protected virtual void WriteData(MappedValuesFlat mappedValues, DataRetrievalInfoTabular tabularInfo)
        {
            tabularInfo.TabularWriter.StartRecord();
            foreach (var dimensionValue in mappedValues.DimensionValues)
            {
                tabularInfo.TabularWriter.WriteCellKeyValue(dimensionValue.Value);
            }

            if (tabularInfo.MappingSet.Dataflow.Dsd.TimeDimension != null)
            {
                tabularInfo.TabularWriter.WriteCellKeyValue(mappedValues.TimeValue);
            }

            foreach (var measureValue in mappedValues.MeasureValues)
            {
                tabularInfo.TabularWriter.WriteCellMeasureValue(measureValue.Value);
            }

            foreach (var attributeValue in mappedValues.AttributeValues)
            {
                tabularInfo.TabularWriter.WriteCellAttributeValue(attributeValue.Value);
            }
        }