2016-11-09 9 views
0

メタデータからモデルを作成する簡単なツールを作成しようとしています。テーブルと列の作成には成功しましたが、モデルでは関係を作成できません。 ToTableプロパティとToTableプロパティをリレーションシップオブジェクトに追加しようとすると、これらのプロパティが読み取り専用であり、変更できないというエラーが発生しました。互換性レベル1200の表形式モデルプログラミングを使用してSSAS 2016でリレーションシップを作成できません

以下は、関係を作成するために使用しているサンプルコードです。

public void AddRelationshipsToModel() 
    { 
     OleDbDataReader reader = null; 
     try 
     { 
      OleDbConnection connection = new OleDbConnection(); 
      connection.ConnectionString = metadataConnInfo.ConnectionString; 
      connection.Open(); 
      OleDbCommand command = connection.CreateCommand(); 
      command.CommandText = "select source_parent_table_name,source_parent_column_name, source_child_table_name,source_child_column_name from HX_VIEWS_RMS.BI_TABULAR_RELATIONSHIPS where MODEL_NAME='"+database.Model.Name +"'"; 
      reader = command.ExecuteReader(); 
      while(reader.Read()) 
      { 
       string _toTable = srcAndTabularTableMap[reader.GetValue(0).ToString().Trim()]; 
       string _toColumn = srcTableAndTabularColMap[reader.GetValue(0).ToString().Trim()][ reader.GetValue(1).ToString().Trim()]; 
       string _fromTable = srcAndTabularTableMap[reader.GetValue(2).ToString().Trim()]; 
       string _fromColumn = srcTableAndTabularColMap[reader.GetValue(2).ToString().Trim()][reader.GetValue(3).ToString().Trim()]; 

       Table fromTable = Database.Model.Tables[_fromTable]; 
       DataColumn fromColumn = (DataColumn)fromTable.Columns[_fromColumn]; 
       Table toTable = Database.Model.Tables[_toTable]; 
       DataColumn toColumn = (DataColumn)fromTable.Columns[_toColumn]; 

       SingleColumnRelationship relationship = new SingleColumnRelationship(); 

       relationship.FromTable = fromTable; 
       relationship.FromColumn = fromColumn; 
       relationship.ToTable = toTable; 
       relationship.ToColumn = toColumn; 

       //database.Model.Relationships.Add(new SingleColumnRelationship() { FromColumn = fromColumn ,ToColumn =toColumn}); 
      } 
      connection.Close(); 
     } 
     catch(Exception ex) 
     { 
      logger.Error(ex.Message); 
     } 
    } 

答えて

1

これはblog postです。

[FromTable]と[ToTable]の設定ではなく、[FromColumn]と[ToColumn]プロパティを設定するだけです。オプションでは、コンストラクタの一部として、それらを設定することができます。

SingleColumnRelationship relationship = new SingleColumnRelationship() 
{ 
       FromColumn = fromColumn, 
       ToColumn = toColumn 
}; 
0

表形式のオブジェクトモデルAPIは、かなりの数の読み取り専用フィールド/プロパティがあります。基本的には、これらのフィールドを直接編集するのではなく、APIで埋めざるを得ないと伝えようとしています。

典型的な関係は、この

   Server = new Microsoft.AnalysisServices.Tabular.Server(); 
       [...] 
       Server.Databases["MyDatabaseName"].Model.Relationships.Add(new SingleColumnRelationship 
       { 
        Name = "Relationship name", 
        FromColumn = Server.Databases["MyDatabaseName"].Model.Tables["FromTableName"].Columns["FromColumnName"], 
        FromCardinality = RelationshipEndCardinality.Many, 
        ToColumn = Server.Databases["MyDatabaseName"].Model.Tables["ToTableName"].Columns["ToColumnName"], 
        ToCardinality = RelationshipEndCardinality.One, 
        CrossFilteringBehavior = CrossFilteringBehavior.BothDirections, 
        IsActive = false 
       }); 
のように見えます
関連する問題