private void PopulateProperties()

in BismNormalizer/BismNormalizer/TabularCompare/MultidimensionalMetadata/Table.cs [143:415]


        private void PopulateProperties()
        {
            // find the datasourceid for the Table - and also the datasourceid
            foreach (DataSourceView dsv in _parentTabularModel.AmoDatabase.DataSourceViews)
            {
                _datasourceId = dsv.DataSourceID;
                foreach (DataTable tbl in dsv.Schema.Tables)
                {
                    if ((tbl.TableName == _amoDimension.ID) ||
                         (_amoDimension.Source is DsvTableBinding && tbl.TableName == ((DsvTableBinding)_amoDimension.Source).TableID)
                       )
                    {
                        _amoTable = tbl;

                        //_tableInDsv = tbl;
                        if (tbl.ExtendedProperties["DataSourceID"] != null)
                        {
                            _datasourceId = tbl.ExtendedProperties["DataSourceID"].ToString();
                            break;
                        }
                    }
                }
            }

            foreach (CubeDimension cd in _parentTabularModel.AmoDatabase.Cubes[0].Dimensions)
            {
                if (cd.ID == _amoDimension.ID)
                {
                    _amoCubeDimension = cd;
                    break;
                }
            }

            foreach (MeasureGroup mg in _parentTabularModel.AmoDatabase.Cubes[0].MeasureGroups)
            {
                if (mg.ID == _amoDimension.ID)
                {
                    _amoMeasureGroup = mg;
                    break;
                }
            }

            string baseColumns = "";
            string calculatedColumns = "";
            foreach (DimensionAttribute attribute in _amoDimension.Attributes)
            {
                // ignore key attribute - which is internal built in "RowNumber"
                //if (attribute.ID != _amoDimension.KeyAttribute.ID)
                if (attribute.ID != "__XL_RowNumber")  //if (attribute.ID != "RowNumber") //Before SQL 2016, was just "RowNumber"
                {
                    // if calculated column, show expression
                    if (attribute.NameColumn.Source is ExpressionBinding)
                    {
                        string expression = ((ExpressionBinding)attribute.NameColumn.Source).Expression;
                        calculatedColumns += "[" + attribute.Name + "]:=" + expression + "; " + SetColumnFormatAndVisibility(attribute) + "\n";
                    }
                    else
                    {
                        string baseColumn = "[" + attribute.Name + "]";

                        /*  DATA TYPE MAPPING
                            Text: WChar
                            Whole Number: BigInt
                            Decimal Number: Double
                            True/False: Boolean
                            Currency: Currency
                            Date: Date
                            Binary: Binary
                        */
                        // insert spaces to line up data types nicely
                        if (baseColumn.Length < _spacing)
                        {
                            baseColumn += new String(' ', _spacing - baseColumn.Length);
                        }

                        switch (attribute.KeyColumns[0].DataType)
                        {
                            case System.Data.OleDb.OleDbType.WChar:
                                baseColumn += " Data Type: Text, ";
                                break;
                            case System.Data.OleDb.OleDbType.BigInt:
                            case System.Data.OleDb.OleDbType.Integer:
                            case System.Data.OleDb.OleDbType.SmallInt:
                                baseColumn += " Data Type: Whole Number, ";
                                break;
                            case System.Data.OleDb.OleDbType.Double:
                                baseColumn += " Data Type: Decimal Number, ";
                                break;
                            case System.Data.OleDb.OleDbType.Boolean:
                                baseColumn += " Data Type: True/False, ";
                                break;
                            case System.Data.OleDb.OleDbType.Currency:
                                baseColumn += " Data Type: Currency, ";
                                break;
                            case System.Data.OleDb.OleDbType.Date:
                                baseColumn += " Data Type: Date, ";
                                break;
                            case System.Data.OleDb.OleDbType.Binary:
                                baseColumn += " Data Type: Binary, ";
                                break;
                            default:
                                break;
                        }

                        // Format & visibility
                        baseColumn += SetColumnFormatAndVisibility(attribute);

                        baseColumns += baseColumn + "\n";
                    }
                }
            }

            _objectDefinition += "Base Columns:\n" + baseColumns + "\n";
            _objectDefinition += "Calculated Columns:\n" + calculatedColumns + "\n";

            _objectDefinition += "Hierarchies:\n";
            if (_amoDimension.Hierarchies.Count == 0)
            {
                _objectDefinition += "\n";
            }
            else
            {
                foreach (Hierarchy hierarchy in _amoDimension.Hierarchies)
                {
                    _objectDefinition += "[" + hierarchy.Name + "] ";
                    //if ((_parentTabularModel.ComparisonInfo.OptionsInfo.OptionDisplayFolders || _parentTabularModel.ComparisonInfo.OptionsInfo.OptionTranslations) && hierarchy.Name.Length + 2 < _spacing)
                    //{
                    //    _objectDefinition += new String(' ', _spacing - hierarchy.Name.Length - 2);
                    //}

                    //if (_parentTabularModel.ComparisonInfo.OptionsInfo.OptionDisplayFolders)
                    //{
                    //    _objectDefinition += "Display Folder: ";
                    //    if (hierarchy.DisplayFolder != null)
                    //    {
                    //        _objectDefinition += hierarchy.DisplayFolder;
                    //    }
                    //    if (_parentTabularModel.ComparisonInfo.OptionsInfo.OptionTranslations) _objectDefinition += ", ";
                    //}
                    //if (_parentTabularModel.ComparisonInfo.OptionsInfo.OptionTranslations)
                    //{
                    //    _objectDefinition += "Hierarchy Translations: ";
                    //    if (hierarchy.Translations.Count > 0)
                    //    {
                    //        _objectDefinition += "[";
                    //        foreach (Translation hierarchyTranslation in hierarchy.Translations)
                    //        {
                    //            _objectDefinition += CultureInfo.GetCultureInfo(hierarchyTranslation.Language).DisplayName + ": " + hierarchyTranslation.Caption + ", ";
                    //        }
                    //        _objectDefinition = _objectDefinition.Substring(0, _objectDefinition.Length - 2) + "]";
                    //    }

                    //    if (_parentTabularModel.ComparisonInfo.OptionsInfo.OptionDisplayFolders)
                    //    {
                    //        _objectDefinition += ", Display Folder Translations: ";
                    //        if (hierarchy.Translations.Count > 0)
                    //        {
                    //            _objectDefinition += "[";
                    //            foreach (Translation hierarchyTranslation in hierarchy.Translations)
                    //            {
                    //                _objectDefinition += CultureInfo.GetCultureInfo(hierarchyTranslation.Language).DisplayName + ": " + hierarchyTranslation.DisplayFolder + ", ";
                    //            }
                    //            _objectDefinition = _objectDefinition.Substring(0, _objectDefinition.Length - 2) + "]";
                    //        }
                    //    }
                    //}
                    
                    _objectDefinition += "\nLevels:\n";
                    foreach (Level level in hierarchy.Levels)
                    {
                        _objectDefinition += "   [" + level.Name + "]";
                        //if (_parentTabularModel.ComparisonInfo.OptionsInfo.OptionTranslations && level.Name.Length + 4 < _spacing)
                        //{
                        //    _objectDefinition += new String(' ', _spacing - level.Name.Length - 4);
                        //}

                        //if (_parentTabularModel.ComparisonInfo.OptionsInfo.OptionTranslations)
                        //{
                        //    _objectDefinition += "Level Translations: ";
                        //    if (level.Translations.Count > 0)
                        //    {
                        //        _objectDefinition += "[";
                        //        foreach (Translation levelTranslation in level.Translations)
                        //        {
                        //            _objectDefinition += CultureInfo.GetCultureInfo(levelTranslation.Language).DisplayName + ": " + levelTranslation.Caption + ", ";
                        //        }
                        //        _objectDefinition = _objectDefinition.Substring(0, _objectDefinition.Length - 2) + "]";
                        //    }

                        //    if (_parentTabularModel.ComparisonInfo.OptionsInfo.OptionDisplayFolders)
                        //    {
                        //        _objectDefinition += ", Display Folder Translations: ";
                        //        if (level.Translations.Count > 0)
                        //        {
                        //            _objectDefinition += "[";
                        //            foreach (Translation levelTranslation in level.Translations)
                        //            {
                        //                _objectDefinition += CultureInfo.GetCultureInfo(levelTranslation.Language).DisplayName + ": " + levelTranslation.DisplayFolder + ", ";
                        //            }
                        //            _objectDefinition = _objectDefinition.Substring(0, _objectDefinition.Length - 2) + "]";
                        //        }
                        //    }
                        //}
                        _objectDefinition += "\n";
                    }
                    _objectDefinition += "\n";
                }
            }

            if (_amoCubeDimension != null)
            {
                _objectDefinition += "Format & Visibility:\nHidden:" + (!_amoCubeDimension.Visible).ToString();

                //if (_parentTabularModel.ComparisonInfo.OptionsInfo.OptionTranslations)
                //{
                //    _objectDefinition += ", Table Translations: ";
                //    if (_amoCubeDimension.Translations.Count > 0)
                //    {
                //        _objectDefinition += "[";
                //        foreach (Translation tableTranslation in _amoCubeDimension.Translations)
                //        {
                //            _objectDefinition += CultureInfo.GetCultureInfo(tableTranslation.Language).DisplayName + ": " + tableTranslation.Caption + ", ";
                //        }
                //        _objectDefinition = _objectDefinition.Substring(0, _objectDefinition.Length - 2) + "]";
                //    }

                //    if (_parentTabularModel.ComparisonInfo.OptionsInfo.OptionDisplayFolders)
                //    {
                //        _objectDefinition += ", Display Folder Translations: ";
                //        if (_amoCubeDimension.Translations.Count > 0)
                //        {
                //            _objectDefinition += "[";
                //            foreach (Translation tableDisplayFolderTranslation in _amoCubeDimension.Translations)
                //            {
                //                _objectDefinition += CultureInfo.GetCultureInfo(tableDisplayFolderTranslation.Language).DisplayName + ": " + tableDisplayFolderTranslation.DisplayFolder + ", ";
                //            }
                //            _objectDefinition = _objectDefinition.Substring(0, _objectDefinition.Length - 2) + "]";
                //        }
                //    }
                //}
                
                _objectDefinition += "\n";
            }

            if (_parentTabularModel.ComparisonInfo.OptionsInfo.OptionPartitions && _amoMeasureGroup != null)
            {
                _objectDefinition += "\nPartitions:\n";

                List<string> partitionNames = new List<string>();  // put in here to sort
                foreach (Partition partition in _amoMeasureGroup.Partitions)
                {
                    partitionNames.Add(partition.Name);
                }
                partitionNames.Sort();

                foreach (string partitionName in partitionNames)
                {
                    foreach (Partition partition in _amoMeasureGroup.Partitions)
                    {
                        if (partition.Name == partitionName)
                        {
                            _objectDefinition += "Name: [" + partition.Name + "]\nSQL:\n" + ((QueryBinding)partition.Source).QueryDefinition + "\n";
                            break;
                        }
                    }
                }
            }

            foreach (Microsoft.AnalysisServices.Relationship relationship in _amoDimension.Relationships)
            {
                _relationships.Add(new Relationship(this, relationship));
            }
        }