Как подключиться к постоянному набору записей ADODB через AdoDotNet Connector в Power Query? - PullRequest
0 голосов
/ 17 июня 2019

У меня есть код VBA, который сохраняет набор записей ADODB (Classic COM) на диск в виде XML.Я хотел бы загрузить этот набор записей в Excel PowerQuery (AKA Get Transform) в виде таблицы.Я ожидаю, что это можно сделать с помощью функции AdoDotNet.DataSource PowerQuery, но я получаю только ошибку.Я подозреваю, что моя строка подключения нуждается в корректировке.

Я пытаюсь это сделать, потому что я загружаю данные в модель PowerPivot, а затем мне нужен список уникальных членов каждой иерархии во всех измерениях.

Метод № 1 использовал функцию M List.Distinct для каждого столбца, чтобы получить отдельные элементы каждой таблицы, и это было решением некоторое время, но получение результатов в требуемом формате было чрезвычайно медленным.

Метод № 2 использует запрос схемы DVM на встроенном сервере SSAS за PowerPivot.Это именно та информация, которую я хочу.Хотя загрузка таблицы с помощью функции M Xml.Tables намного лучше, мне все равно придется вручную возиться с данными из вывода функции и, возможно, не будет надежно воссоздавать ее во всех случаях.Я думаю, что поставщик MSPersist будет более надежным.

Я слышал, что ADO.Net пытается поддерживать совместимость с классическим COM ADO, поэтому я предполагаю, что можно загрузить устаревший постоянный набор записей в ADO.Net через MSPersist.Поставщик.

Я также пытался сохранить в проприетарном формате .adtg.Та же ошибка.

Функция AdoDotNet.Query была бы более прямой, но я не представляю, каким будет имя таблицы для параметра запроса (SELECT * FROM TABLE)?

Что яя пытаюсь сделать МОЖЕ возможным, используя расширенный DAX или MDX, но, пожалуйста, ответьте, как загрузить набор записей, потому что A) я только начал переваривать эти языки и B) иногда может быть просто необходимо загрузить постоянный набор записей!

Я сохраняю набор записей через VBA как:

dim RS as ADODB.Recordset, Cxn as ADODB.Connection
Set Cxn = ThisWorkbook.Model.DataModelConnection.ModelConnection.ADOConnection
Set RS = Cxn.OpenSchema(adSchemaMembers)
RS.Save "C:\TEMP\Persist.xml", ADODB.PersistFormatEnum.adPersistXML

В PowerQuery я пытаюсь загрузить постоянный набор записей через

let Table = AdoDotNet.DataSource("System.data.oledb", [Provider="MSPersist", Source="C:\TEMP\Persist.xml"])

Я ожидаю, что таблица powerquery будет загружена с содержимымнабор записей.Вместо этого я получаю следующий текст в желтом поле ошибки:

DataSource.Error: ADO.NET: Multiple-step OLEDB operation generated errors. Check each OLEDB status value, if available. No Work was done.
Details:
    DataSourceKind=AdoDotNet
    DataSourcePath=system.data.oledb/provider=MSPersist;source=C:
Temp\Persist.xml
    Message=ADO.NET: Multiple-step OLEDB operation generated errors. Check each OLEDB status value, if available. No Work was done.
    ErrorCode=-21472177887
    ExceptionType=System.Data.OleDb.OleDbException
...