【问题标题】:Unable to create relationships in SSAS 2016 using tabular model programming for compatability level 1200无法使用兼容级别 1200 的表格模型编程在 SSAS 2016 中创建关系
【发布时间】:2016-11-09 06:45:53
【问题描述】:

我正在尝试创建一个从元数据创建模型的简单工具。我成功地创建了表和列,但无法在模型下创建关系。在尝试将 FromTable 和 ToTable 属性添加到关系对象时,我收到一条错误消息,指出这些属性是只读的并且无法更改。

下面是我用来创建关系的示例代码。

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

【问题讨论】:

    标签: sql-server-2016 ssas-tabular


    【解决方案1】:

    这个blog post 是一个很好的浏览。

    尝试只设置 FromColumn 和 ToColumn 属性,而不是 FromTable 和 ToTable 设置。您可以选择将它们设置为构造函数的一部分:

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

    【讨论】:

      【解决方案2】:

      表格对象模型 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
                      });
      

      【讨论】:

        【解决方案3】:

        尝试使用此类 - Microsoft.AnalysisServices.Tabular.SingleColumnRelationship

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多