Тайм-аут табличной модели SSAS увеличен во время обработки

При выполнении полного процесса в табличной модели для модели службы анализа Azure через 10 минут обработки я получаю следующую ошибку:

Failed to save modifications to the server. Error returned: 'Microsoft SQL: Execution Timeout Expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.. The exception was raised by the IDbCommand interface.

Technical Details:
RootActivityId: cd0cfc78-416a-4039-a79f-ed7fe9836906
Date (UTC): 2/27/2018 1:25:58 PM
The command has been canceled.. The exception was raised by the IDbCommand interface.
The command has been canceled.. The exception was raised by the IDbCommand interface.
The command has been canceled.. The exception was raised by the IDbCommand interface.
The command has been canceled.. The exception was raised by the IDbCommand interface.

Источником данных для модели является хранилище данных Azure, и SSAS выполняет аутентификацию с помощью аутентификации SQL. Когда истекает тайм-аут, некоторые разделы получили все свои строки, но другие все еще обрабатывают. Модель содержит 11 таблиц, каждая с одним разделом.

Я получаю сообщение об ошибке как при обработке с помощью Visual Studio 2015, так и SSMS 2017. Я не вижу никаких свойств сервера SSAS с 10-минутным (600-секундным) таймаутом. Обработка отдельных таблиц может выполняться без тайм-аута, поскольку по отдельности все они выполняются менее чем за 10 минут.

Я попытался установить свойство timeout в объекте dataSources.connectionDetails в json-файле языка сценариев табличных моделей (например, Model.bim). Но при его редактировании учетные данные для аутентификации удаляются, а затем при сбросе учетных данных удаляется свойство timeout. Поэтому я не знаю, имеет ли это свойство вообще отношение к проблеме с ошибкой тайм-аута.

Пример выражения запроса секции, которое я использую:

let
    Source = #"SQL/resourcename database windows net;DatabaseName",
    MyQuery = 
    Value.NativeQuery(
        Source,
        "SELECT * FROM [dbo].[MyTable]"
    )
in
    MyQuery

person Peadar Doyle    schedule 27.02.2018    source источник
comment
Вы используете современный интерфейс получения данных (Power Query) или устаревший интерфейс?   -  person GregGalloway    schedule 27.02.2018
comment
@GregGalloway Я использую современный подход Power Query, который содержит собственный SQL-запрос.   -  person Peadar Doyle    schedule 28.02.2018


Ответы (1)


Итак, благодаря подсказке Грега Гэллоуэя я понял, что тайм-аут может быть установлен для каждого раздела с использованием языка Power Query M.

Итак, части доступа к данным моего объекта TMSL теперь выглядят так ...

model.dataSource выглядит так:

"dataSources": [
  {
    "type": "structured",
    "name": "MySource",
    "connectionDetails": {
      "protocol": "tds",
      "address": {
        "server": "serverName.database.windows.net",
        "database": "databaseName"
      },
      "authentication": null,
      "query": null
    },
    "options": {},
    "credential": {
      "AuthenticationKind": "UsernamePassword",
      "Username": "dbUsername",
      "EncryptConnection": true
    }
  }
]

И отдельные запросы Partition таковы (обратите внимание на параметр CommandTimeout):

let
    Source = Sql.Database("serverName.database.windows.net","databaseName",[CommandTimeout=#duration(0, 2, 0, 0)]),
    MyQuery = 
    Value.NativeQuery(
        Source,
        "SELECT * FROM [dbo].[MyTable]"
    )
in
    MyQuery

Итак, теперь я явно устанавливаю тайм-аут в 2 часа для запроса раздела.

person Peadar Doyle    schedule 01.03.2018