Страницы: 1
RSS
Фильтрация в сводной где более 10 000 значений
 
Доброго времени суток, по работе столкнулся с такой задачей:

Есть таблица с 10 000+ строк, по ней построена сводная. Через поиск в сводной все позиции находятся, мне необходимо выбрать несколько значений, которые находятся далеко друг от друга (например 1, 5 000, 12 000), но через поиск за раз их нельзя выбрать:(

Может кто-нибудь уже сталкивался с подобным?

Прикрепил пример файла
Версия: Office 365
 
По поиску ищешь что нужно и жмёшь "Добавить выделенный фрагмент в фильтр".
 
Цитата
написал:
По поиску ищешь что нужно и жмёшь "Добавить выделенный фрагмент в фильтр".
Но ведь таким способом добавляется только по одному значению, чтобы добавить например значения 2 000 и 10 001, мне необходимо сначала найти 2 000, нажать "ок" и только потом найти 10 001 и нажать "ок".

Тут необходимо как-то за один раз выделить несколько значений
 
Владислав Левченко, добавить столбец с формулой
 
Михаил Л, Интересный способ, в примере действительно работает))
Но к сожалению на рабочей задаче я не могу изменять исходную таблицу или что-то дописывать, тут остаётся средствами самой сводной таблицы обходиться
 
есть макрос, но он долго работает 3-4 минут
Код
Sub filterItems()
Dim sh As Worksheet
Dim pt As PivotTable
Dim pi As PivotItem
Dim var1, var2, var3, var4, var5 As String
Set sh = ActiveSheet
var1 = Worksheets(sh.Name).Cells(4, 7).Value
var2 = Worksheets(sh.Name).Cells(5, 7).Value
var3 = Worksheets(sh.Name).Cells(6, 7).Value
var4 = Worksheets(sh.Name).Cells(7, 7).Value
var5 = Worksheets(sh.Name).Cells(8, 7).Value
For Each sh In ThisWorkbook.Worksheets
For Each pt In sh.PivotTables
For Each pi In pt.PivotFields("Items").PivotItems
Select Case pi.Name
Case var1, var2, var3, var4, var5
pi.Visible = True
Case Else
On Error Resume Next
pi.Visible = False
End Select
Next pi
Next pt
Next sh
End Sub
 
Цитата
Владислав Левченко написал:
не могу изменять исходную таблицу или что-то дописывать
Почему не можете?
Изменено: Михаил Л - 06.11.2022 11:17:45
 
Цитата
написал:
Версия: Office 365
так и пользуйте на полную - добавьте таблицы в модель данных и в PowerPivot, свяжите таблицы по Items и создайте вычисляемый столбец. Там нужна-то одна функция - RELATED. И созданный столбец в вычисляемое поле.
Потом в таблице для отбора значений надо будет только изменить элементы(добавить, удалить или что там еще) и обновить сводную. Останутся только нужные элементы.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо всем за идеи, видимо функционалом самой сводной это не решается, будем использовать другой подход.
 
Цитата
написал:
есть макрос, но он долго работает 3-4 минут
Есть чуть-чуть иной макрос, работает 0,02 секунды.  :)

Код
Sub Test2()
  Dim pt As PivotTable, pf As PivotField, pi As PivotItem, str As String, v, t As Double
  t = Timer
  Set pt = ActiveSheet.PivotTables(1)
  pt.ManualUpdate = True
  Set pf = pt.PivotFields("Items")
  
  On Error Resume Next
  str = Chr(1)
  For Each v In Range("tbl_result").Value
    Set pi = Nothing
    Set pi = pf.PivotItems(v)
    If Not pi Is Nothing Then
      If pi.Visible = False Then pi.Visible = True
      str = str & v & Chr(1)
    End If
  Next
  
  ' удаляем лишнее
  For Each pi In pt.PivotFields("Items").VisibleItems
    If InStr(1, str, Chr(1) & pi.Name & Chr(1)) = 0 Then
      pi.Visible = False
    End If
  Next
  
  On Error GoTo 0
  pt.ManualUpdate = False
  Debug.Print Timer - t
End Sub

Изменено: sokol92 - 06.11.2022 21:28:51 (Чуть ускорил.)
Владимир
 
Цитата
Владислав Левченко написал:
Спасибо всем за идеи, видимо функционалом самой сводной это не решается, будем использовать другой подход.
А как этот выбор должен выглядеть? Можно создать умную таблицу, в которую будут вноситься строки со значениями, и добавить ее в модель данных. Далее можно только мерами, можно с помощью вычисляемого столбца выводить только значения из второй таблицы (или все, если она пуста).
Но ТУТ Вы пока не ответили, поэтому торопиться с вариантом не буду :)
Изменено: surkenny - 06.11.2022 20:46:40
 
Цитата
написал:
видимо функционалом самой сводной это не решается
Потестируйте #10 (для "обычной" сводной таблицы).
Изменено: sokol92 - 06.11.2022 21:31:37
Владимир
 
sokol92, приветствую!
Цитата
sokol92: vpt.ManualUpdate = True
я бы заострил внимание на этом, очень важном моменте, как сильно влияющем  на скорость  :)
Изменено: Jack Famous - 07.11.2022 09:46:50
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Добрый день, Алексей! Да, возможностью "пакетной" модификации объекта всегда нужно пользоваться. Еще один пример подобной возможности Application.PrintCommunication.
Кроме того, конструкция
Код
If object.property<>value Then object.property=value

часто эффективнее, чем "лобовое" присвоение
Код
object.property=value
Изменено: sokol92 - 07.11.2022 14:44:30
Владимир
 
Цитата
sokol92: эффективнее, чем "лобовое" присвоение
заметно же будет только в большом цикле - или вы о чём-то другом, а не о скорости?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
заметно же будет только в большом цикле - или вы о чём-то другом, а не о скорости?
В данной задаче (и подобных) цикл может быть и большим (если надо отобразить много значений).
Владимир
 
sokol92, большое спасибо!  :idea:
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
sokol92,
О май гад, работает, спасибо ;)  
Страницы: 1
Наверх