Как добавить структурированный источник данных ODBC в табличную модель с помощью табличной библиотеки AMO - PullRequest
0 голосов
/ 23 июня 2019

Добавление структурированного источника данных ODBC в мою модель приводит к ошибке.

Я хочу сгенерировать табличную модель на сервере служб аналитики SQL с уровнем совместимости 1400 с использованием библиотеки Microsoft.AnalysisServices.Tabular с использованием структурированной(т. е. M / Power Query), не устаревшие (т. е. ProviderDataSource) источники данных.Я установил библиотеку с помощью пакета NuGet Microsoft.AnalysisServices.retail.amd64 (16.3.0).

Вот мое определение источника данных.

                myDatabase.Model.DataSources.Add(new StructuredDataSource()
                {
                    Name = "ODBC",
                    Description = "An structured ODBC data source definition",
                    ConnectionDetails = new ConnectionDetails()
                    {
                        Protocol = DataSourceProtocol.Odbc
                    },
                    Credential = new Credential()
                    {
                        AuthenticationKind = AuthenticationKind.UsernamePassword,
                        EncryptConnection = false,
                        Username = "MYUSERNAME",
                        Password = "MYPASSWORD"
                    }
                }

Когда я запускаю этот код, я получаю:

COM error: Microsoft.Data.Mashup; The given data source reference is not a valid data source.

Это не дает мне никаких указаний, где искать или что конкретно не так.Я подозревал, что для определения нужен адрес сервера, но свойство address объекта ConnectionDetails не может быть установлено в соответствии с документацией.

ConnectionDetails.Address Property

Address of this connection. It can't be set, instead it should be modified directly.

1 Ответ

2 голосов
/ 23 июня 2019

При рассмотрении моего вопроса и, конечно же, дальнейшего изучения документации, я разработал это решение.Для тех, кто борется с той же проблемой, я решил, что было бы неплохо опубликовать это здесь.

Credential credential = new Credential()
{
    AuthenticationKind = AuthenticationKind.UsernamePassword,
    EncryptConnection = false,
    Username = "MYUSERNAME",
    Password = "MYPASSWORD" // Please note that this won't persist.
};

ConnectionDetails connectionDetails = new ConnectionDetails("{ 'protocol': 'odbc', 'address': { 'options': { 'dsn': 'MYODBCDSN' } }, 'authentication': null, 'query': null }");

dbWithDataSource.Model.DataSources.Add(new StructuredDataSource()
{
    Name = "ODBC",
    Description = "An ODBC structured (ie. non-legacy) data source definition",
    ConnectionDetails = connectionDetails,
    Credential = credential,
    Options = new DataSourceOptions( "{ 'hierarchicalNavigation': true }" )
}

Что я в основном сделал, это передал строку JSON в конструкторе ConnectionDetails, установив 'readтолько адресное свойство.

...