У меня есть простая табличная модель, созданная в SSDT, которую я развернул в своем локальном экземпляре SSAS (модель совместимости = Azure Analysis Services / SQL Server 2017 (1400) )
Ниже двух моих тестовых источников, один с локального сервера SQL 2017 и один из локального файла Excel. Оба источника имеют только одну таблицу с 4 строками в каждой.
"dataSources": [
{
"type": "structured",
"name": "SQL/localhost;MyDB",
"connectionDetails": {
"protocol": "tds",
"address": {
"server": "localhost",
"database": "MyDB"
},
"authentication": null,
"query": null
},
"credential": {
"AuthenticationKind": "UsernamePassword",
"kind": "SQL",
"path": "localhost;MyDB",
"Username": "MyUserName",
"EncryptConnection": false
}
},
{
"type": "structured",
"name": "FileExcel",
"connectionDetails": {
"protocol": "file",
"address": {
"path": "C:\\testExcelForSSAS.xlsx"
},
"authentication": null,
"query": null
},
"credential": {
"AuthenticationKind": "Windows",
"kind": "File",
"path": "c:\\testexcelforssas.xlsx",
"Username": "MyUserName"
},
"contextExpression": [
"let",
" #\"0001\" = Excel.Workbook(..., null, true)",
"in",
" #\"0001\""
]
}
],
Проблема: (полная) обработка источника таблицы Excel занимает менее 1 секунды,
(полная) обработка таблицы SQL занимает до 20 секунд.
Я сделал SQL Trace, и этот запрос (в ExecuteSQL EventSubClass) занимает 20 секунд:
let __AS_Query__ = let
Source = #"SQL/localhost;MyDB",
dbo_formulas = Source{[Schema="dbo",Item="formulas"]}[Data],
#"Added Custom" = Table.AddColumn(dbo_formulas, "NameWithID", each [NameEU] & " (" & Number.ToText([ID])) in
#"Added Custom" , __AS_Table__ = Table.FromValue(__AS_Query__) in Table.RemoveColumns(__AS_Table__, Table.ColumnsOfType(__AS_Table__, { type table, type record, type list }))
Для справки, это вызов данных Excel
let __AS_Query__ =
let
Source = #"FileExcel",
Table1_Table = Source{[Item="Table1",Kind="Table"]}[Data]
in
Table1_Table
, __AS_Table__ = Table.FromValue(__AS_Query__)
in
Table.RemoveColumns(__AS_Table__, Table.ColumnsOfType(__AS_Table__, { type table, type record, type list }))
Почему простой запрос для извлечения 4 строк из SQL занимает 20 секунд, а тот же объем данных из Excel занимает менее секунды?
EDIT:
Я сделал трассировку на сервере SQL, ниже результата. Реальный SQL-запрос (выделенный) почти не требует времени, но некоторые другие запросы до этого занимают довольно много времени. Это связано с некоторой конфигурацией соединения SSAS с этим сервером SQL?
Спасибо