Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
OWC PivotTable: Программное получение списка отфильтрованных членов Field.ExcludedMembers
|
|||
|---|---|---|---|
|
#18+
Добрый день! Вопрос такой. Мне необходимо программно получить список ExcludedMembers из фильтра (пройтись по ExcludedMembers для каждого наложенного фильтра). Делаю примерно так: FilterAxis = PivotTable.ActiveData.FilterAxis; for (long i = 0; i < FilterAxis.FieldSets.Count; i++) { FieldSet = FilterAxis.FieldSets.Item(i); for (long j=0; j<FieldSet.Fields.Count; j++) { Field = FieldSet.Fields.Item(j); // И здесь беру Field.ExcludedMembers и использую его … } } Иногда все работает нормально. А иногда Field.ExcludedMembers возвращает мне пустое место – нету ничего, хотя на самом деле фильтр по этому полю наложен, какие-то члены исключены. Причем в совершенно идентичных условиях (один и тот же куб, одна и та же структура сводной таблицы, одни и те же наложенные фильтры) то срабатывает, то нет. Кто-нибудь подскажет, в чем дело? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 12:50 |
|
||
|
OWC PivotTable: Программное получение списка отфильтрованных членов Field.ExcludedMembers
|
|||
|---|---|---|---|
|
#18+
Ты не в ту сторону капаешь, Оно правильно не всегда будет работать Тебе нужно делать так Function RecGetStatus(ByVal oPM) Dim oFUpd 'OWC10.PivotFilterUpdate Dim nState Dim c Dim i As Int16 c = Pvt.Constants oFUpd = oPM.Field.FieldSet.CreateFilterUpdate nState = oFUpd.StateOf(oPM) If nState = c.plMemberStateChecked Then sResults = sResults & oPM.UniqueName & vbCrLf lbFlt.Items.Add(" " & oPM.Name) ElseIf nState = c.plMemberStateGray Then For i = 0 To oPM.ChildMembers.Count - 1 RecGetStatus(oPM.ChildMembers(i)) Next ElseIf nState = c.plMemberStateClear Then End If End Function ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 14:41 |
|
||
|
OWC PivotTable: Программное получение списка отфильтрованных членов Field.ExcludedMembers
|
|||
|---|---|---|---|
|
#18+
Проблема все-таки остается в том, что для решения этим способом мне нужны PivotMember'ы, а я не пойму как из области фильтра (которая FilterAxis) получить PivotMember'ы. Итак, проблема такая. Надо пройтись по Member'ам всех уровней измерений, которые помещены в область фильтра и узнать для каждого Member'а, включен он или исключен. Whether it is included or excluded, как написали бы где-нибудь в MSDN -)) Подскажите, как это можно сделать, а то я что-то туплю!.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 13:35 |
|
||
|
OWC PivotTable: Программное получение списка отфильтрованных членов Field.ExcludedMembers
|
|||
|---|---|---|---|
|
#18+
'сначала из фильтра вытаскиваем все мемберы For dimens = 0 To Main.PT.ActiveView.FilterAxis.FieldSets.Count - 1 StrCreateCube = StrCreateCube & "DIMENSION [" & CStr(Main.PT.ActiveView.FilterAxis.FieldSets.Item(dimens).Name) & "]," StrCreateCube = StrCreateCube & "LEVEL [" & CStr(Main.PT.ActiveView.FilterAxis.FieldSets.Item(dimens).AllMember.Name) & "] TYPE ALL," 'strCreateCube = strCreateCube & "LEVEL [" & CStr(Main.PT.ActiveView.FilterAxis.FieldSets.Item(dimens).Name) & "]," For dimenslevel = 0 To Main.PT.ActiveView.FilterAxis.FieldSets.Item(dimens).Fields.Count - 1 StrCreateCube = StrCreateCube & "LEVEL [" & CStr(Main.PT.ActiveView.FilterAxis.FieldSets.Item(dimens).Fields.Item(dimenslevel).Name) & "]," Next dimenslevel Next dimens надеюсь сможешь разобраться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 16:30 |
|
||
|
OWC PivotTable: Программное получение списка отфильтрованных членов Field.ExcludedMembers
|
|||
|---|---|---|---|
|
#18+
2 Валек: Нет, это не то - таким образом мы всего лишь получаем список level'ов, но не member'ов (в комментарии имеется в виду, что в запросе по созданию куба, для которого очевидно предназначен этот код, указав level, мы укажем брать все его мемберы). Нашел интересную вещь. Для того, чтобы сделать способом, который предложил Guestic, надо, соответственно, получить все PivotMember'ы, которые есть в фильтре. У каждого из FieldSet'ов в фильтре есть свойство AllMember, оно возвращает PivotMember уровня [All] для level'а, засунутого в фильтр. То есть, например, если у нас в измерении [Страна] есть единственный уровень [Страна], и мы засунем это измерение в область фильтра, то в FilterAxis будет 1 FieldSet, и его свойство FieldSets.Item(0).AllMember вернет PivotMember с именем [All Страна]. И тут я подумал, что у PivotMember есть свойство ChildMembers, которое вернет коллекцию мемберов-потомков - в данном случае это должны быть мемберы [Russia], [USA], [Canada] и т.п. И эти PivotMember'ы - как раз и будет то, что надо! Попробовал. ' Мембер [All Страна] PivotMember_All = FilterAxis.FieldSets.Items(0).AllMember; ' Мемберы потомки - [Russia], [USA],.. for i (...от начала и до PivotMember_All.Count ) child_member = PivotMember_All.Item(i); Потрясающе! Count у PivotMember_All действительно соответствует числу потомков (стран), но когда мы получаем сам мембер-потомок... Там лежит какая-то фигня, без имени и без всяких опознавательных знаков! То есть Count правильный, а вот сами ChildMember'ы не дают! Что такое? Почему не получаются мемберы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2004, 17:00 |
|
||
|
OWC PivotTable: Программное получение списка отфильтрованных членов Field.ExcludedMembers
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2004, 17:15 |
|
||
|
OWC PivotTable: Программное получение списка отфильтрованных членов Field.ExcludedMembers
|
|||
|---|---|---|---|
|
#18+
Гениально! Все получилось! :) Function Button1_OnClick() Dim oChildren Dim sFS sFS = lstFieldsets.options(lstFieldsets.selectedIndex).Text Set oChildren = PTable.ActiveView.FieldSets(sFS).Member.ChildMembers sResults = "State of All Members: " & vbCrLf & vbCrLf For i = 0 To oChildren.Count - 1 Recurse1 oChildren(i), 0 Next txtResults.innerText = sResults End Function Function Recurse1(oPM, nLevel) Dim oFUpd 'OWC10.PivotFilterUpdate Set oFUpd = oPM.Field.FieldSet.CreateFilterUpdate sResults = sResults & aStates(oFUpd.StateOf(oPM)-1) & vbTab & _ Space(nLevel * 3) & "- " & oPM.Name & vbCrLf For i = 0 To oPM.ChildMembers.Count - 1 Recurse1 oPM.ChildMembers(i), nLevel + 1 Next End Function И проблемы решены. И знаете, что самое интересное? Я попытался сделать это через свойство FieldSet.AllMember, а в данном примере делается абсолютно то же самое, но через свойство FieldSet.Member. В доке по OWC описание свойств AllMember и Member - почти идентично!!! Там написано: AllMember: Returns a PivotMember object that represents the top member object IN the specified field set. Member: Returns a PivotMember object that represents the top member object FOR the specified field set. Какова разница между предлогами IN и FOR для Microsoft??? Огромная. AllMember не работает, Member работает. Дух Microsoft. ) Алекс, с меня пиво! :)) Как раз буду в Киеве на следующих выходных! ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2004, 18:16 |
|
||
|
|

start [/forum/topic.php?fid=49&tid=1872673]: |
0ms |
get settings: |
4ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
49ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 339ms |

| 0 / 0 |
