Путаница уровня совместимости табличного куба службы анализа Azure 1608, но API возвращает 1600C#

Место общения программистов C#
Anonymous
Путаница уровня совместимости табличного куба службы анализа Azure 1608, но API возвращает 1600

Сообщение Anonymous »

У меня есть приложение, написанное на C#, которое, помимо прочего, подключается к службе анализа Azure, перемещает и оповещает табличные кубы. Как только я запускаю одну из функций, это функция «горячей замены», в которой я удаляю «производственный куб» и заменяю его. с «Temp Cube» (который затем переименовывается в производственный куб):

Код: Выделить всё

Tabular.Database d = ssasServer.Databases.FindByName(cubeDBName);
Tabular.Database dnew = ssasServer.Databases.FindByName(tempDBName);

ssasServer.Databases.Remove(d.ID);
ssasServer.Databases.Remove(dnew.ID);

dnew.Name = cubeDBName;
ssasServer.Databases.Add(d);
d?.Drop();

ssasServer.Databases.Add(dnew);
dnew.Update();
Отлично работает :) если предположить, что до этой функции я создал куб «dnew» в отдельной функции:

Код: Выделить всё

Tabular.Database d = new Tabular.Database()
{
Name = ssasServer.Databases.GetNewName(newDbName),
ID = newDatabaseName + $"_" + DateTime.Now.ToString("ddMMyyyyhhmmss"),
CompatibilityLevel = compatibilityLevel,
//This set to ssasServer.SupportedCompatibilityLevels.Split(',').Where(a => a.ToCharArray().Count() == 4).Select(Int32.Parse).Max() which resolves to 1608
StorageEngineUsed = StorageEngineUsed.TabularMetadata,
};

ssasServer.Databases.Add(d);
d.Update();
Однако... Если я создам куб с помощью функции выше, то «переподключюсь» к AAS:

Код: Выделить всё

Tabular.Server s = new Tabular.Server();
s.Disconnect();
s.Connect(GetTabular(ssasServerName, serviceAccountUserName, serviceAccountPassword));
Происходит странная вещь. Когда вызывается функция «ssasServer.Database.FindByName», для каждой возвращаемой «базы данных» устанавливается уровень совместимости «1600», это приводит к должно быть выдано следующее исключение:

Табличные базы данных не поддерживают понижение уровня совместимости. Текущий
уровень совместимости: '1608'. Запрошенный уровень совместимости: '1600'

Это легко обойти, установив уровень совместимости в функции горячей замены на 1608, но у меня вопрос: «почему?» , почему API «Microsoft.AnalysisServices.Tabular» возвращает 1600, когда в «SupportedCompatibilityLevels» указано 1608, И если вы перейдете на сервер в SSMS и проверите куб, для него установлено значение 1608?

Подробнее здесь: https://stackoverflow.com/questions/791 ... -but-api-r

Вернуться в «C#»