Excel VBA создает подключение к модели данных для сводной таблицы Power для получения различных значений — ошибка

#excel #vba #powerpivot #datamodel #distinct-values

#excel #vba #powerpivot #datamodel #distinct-значения

Вопрос:

В макросе я пытаюсь подсчитать различные значения на основе 2 критериев. Раньше я использовал формулу во внешнем отчете для добавления counts =IFERROR(СТРОКИ(УНИКАЛЬНЫЕ(ФИЛЬТР(. Это работает для большинства поставщиков, но когда исходные данные, из которых он рассчитывает, становятся слишком большими для других поставщиков, он выдает ошибки и показывает только 1 или 0.

Я переключился на попытку добавить таблицу необработанных данных в сводную таблицу и добавить ее в модель данных в той же книге, что и таблица необработанных данных, чтобы я мог легко получить отдельный столбец count, а затем использовать GETPIVOTDATA для добавления счетчиков к строкам во внешнем отчете. Все это является частью более крупного макроса. Это отлично работает у некоторых поставщиков, у других ошибка при создании подключения к модели данных. «Ошибка 1004 во время выполнения: проблема с моделью данных не позволяет Microsoft Excel открыть эту книгу. Попробуйте перезапустить Microsoft Excel. «

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

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

Текущий код:

     Dim wsPivotModel As Worksheet
    Dim SDCPivotCache As PivotCache
    Dim PvtSDCmodel As PivotTable
    Dim SDCconnection As WorkbookConnection
    Set wsPivotModel = MainWB.Sheets.Add
    
    ' delete existing internal connections if necessary
    For Each SDCconnection In MainWB.Connections
        If SDCconnection.Type = xlConnectionTypeWORKSHEET Then SDCconnection.Delete
    Next SDCconnection
    
    'Create new connection
    Set SDCconnection = MainWB.Connections.Add2("WorksheetConnection_" amp; MainWB.Name amp; "!Table_SDCdata", "", _
        "WORKSHEET;" amp; DataPath amp; "" amp; MainWB.Name, MainWB.Name amp; "!Table_SDCdata", 7, True, False)
    
    'create and configure new pivotcache
    Set SDCPivotCache = MainWB.PivotCaches.Create(SourceType:=xlExternal, SourceData:=SDCconnection, Version:=6)
    With SDCPivotCache
        .RefreshOnFileOpen = False
        .MissingItemsLimit = xlMissingItemsNone
    End With
    
    'Create and configure new pivottable
    Set PvtSDCmodel = SDCPivotCache.CreatePivotTable(TableDestination:=wsPivotModel.Name amp; "!R1C1", TableName:="PvtSDCmodel", DefaultVersion:=6)


    With wsPivotModel.PivotTables("PvtSDCmodel")
        .RepeatAllLabels xlRepeatLabels

        With .CubeFields("[Table_SDCdata].[Region]")
            .Orientation = xlRowField
            .Position = 1
        End With
        With .CubeFields("[Table_SDCdata].[Format]")
            .Orientation = xlRowField
            .Position = 2
        End With
        
        .CubeFields.GetMeasure "[Table_SDCdata].[Site]", xlCount, "Count of Site"
        .AddDataField .CubeFields("[Measures].[Count of Site]"), "Count of Site"
        .InGridDropZones = True
        .RowAxisLayout xlTabularRow
        
        With .PivotFields("[Measures].[Count of Site]")
            .Caption = "Distinct Count of Site"
            .Function = xlDistinctCount
        End With
        
    End With
       
'Get store format count in province from SDC
    Dim ref As Variant
    Dim sFormula As String
    
    ref = "[" amp; MainWB.Name amp; "]" amp; wsPivotModel.Name
    sFormula = "=GETPIVOTDATA(""[Measures].[Distinct Count of Site]"",'" amp; ref amp; "'!$A$1,""[Table_SDCdata].[Region]"",""[Table_SDCdata].[Region].amp;[""amp;[@Region]amp;""]"",""[Table_SDCdata].[Format]"",""[Table_SDCdata].[Format].amp;[""amp;[@Format]amp;""]"")"
        
    With wb.Worksheets("Number of Stores Ranged").ListObjects("Table_Number_of_Stores_Ranged")
        With .ListColumns("Total Number of Stores : In Province").DataBodyRange
            .NumberFormat = "General"
            .Formula = sFormula
            .Value = .Value
        End With
               
  

Любые предложения о том, почему возникает эта ошибка, и после этого все мои параметры становятся серыми?
Или, если есть какие-либо другие предложения о том, как легко получить отчетное количество из большого объема данных без сбоев, если Power Pivot не будет работать (что должно)?

Комментарии:

1. Вы создали as MEASURE в PP для DISTINCTCOUNT? Если да, посмотрите на Excel-функции CUBEMEMBER() и CUBEVALUE(). С помощью этих функций вам не нужна сводная таблица, вы можете получить доступ непосредственно к Datamodel.

2. Спасибо, @Chris, я рассмотрю это, но сначала мне нужно решить проблему создания соединения для модели данных, которая является основной проблемой, из-за которой я получаю ошибку.