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));
}
}