Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Проблема с фильтрами

Добрый день. Имеется сводная с глубиной dimensionality()=4

ведется посдчет данных. Когда не раскрыт ни один уровень, цифры корректны(руками проверял), когда дохожу до 3ьего уровня, цифры пересчитываются( но не у всех), а если выбрать конкретную позицию также осуществляется пересчет. Есть ли идеи почему это происходит(и как в данном случае считает Qlik)я руками подобрать подобные расчеты не смог. И можно ли как то завязаться на то чтобы фильтры не влияли на расчет.

10 Replies
Chernov
Creator
Creator

А напишите хоть формулу которая не верно работает ?

Если вдруг используете aggr, то чтобы он корректно работал в сводной таблице, в определенных случаях нужно использовать вот так : aggr (nodistinct  ........ , .... )

Anonymous
Not applicable
Author

if (dimensionality()=4, substoryStatusWeight,

  if (dimensionality()=3, if(storyStoryPoints > 0, storyStoryPoints*storyStatusWeight/storyStoryPoints,0),

      if (dimensionality()=2,

                if ((SubStringCount (GetCurrentSelections(), 'epicKeySum') > 0) AND (SubStringCount (GetFieldSelections(epicKeySum), epicKeySum) > 0),

//                           if (sum(storyStoryPoints)>0, Round(epicStoryPointsepicStatusWeight/epicStoryPoints+sum(storyStoryPointsstoryStatusWeight)/sum(storyStoryPoints), 0.01), epicStatusWeight), epicStatusWeight),                if (sum(storyStoryPoints)>0, Round((epicStoryPointsepicStatusWeight+sum(storyStoryPointsstoryStatusWeight))/(epicStoryPoints+sum(storyStoryPoints)), 0.01), 0),

               if(epicStoryPoints > 0, epicStoryPoints*epicStatusWeight/epicStoryPoints,0)), 

                 if (dimensionality()=1,

                               if (sum(epicStoryPoints)>0 AND sum(storyStoryPoints)>0,

               Round((sum(epicStoryPointsepicStatusWeight)+sum(storyStoryPointsstoryStatusWeight))/(sum(epicStoryPoints)+sum(storyStoryPoints)), 0.01),                    

           if (sum(storyStoryPoints)>0, Round(sum(storyStoryPoints*storyStatusWeight)/sum(storyStoryPoints) , 0.01),                  

                   if (sum(epicStoryPoints)>0, Round(sum(epicStoryPoints*epicStatusWeight)/sum(epicStoryPoints), 0.01),0                                                                              

)

                                                                                )

                                                                              ) 

                                                               )              

                               )

                )                             

)

Барахлит видимо в "оранжевой части"

andrey_krylov
Specialist
Specialist

Добрый день, Александр. Дело в том что в сводной QV считает не так как Excel,  просто суммируя строки. Попробуйте агрегировать выражение и посмотрите, что получается

Sum(Aggr( Выражение, [Измерение 1], [Измерение 2], [Измерение 3]...))

[Измерение 1], [Измерение 2], [Измерение 3]... - все ваши измерения

Anonymous
Not applicable
Author

Вот тут немного сложнее , не освоил еще агрегирование.

  if (sum(epicStoryPoints)>0 AND sum(storyStoryPoints)>0,

               Round((sum(epicStoryPoints*epicStatusWeight)+sum(storyStoryPoints*storyStatusWeight))/(sum(epicStoryPoints)+sum(storyStoryPoints)), 0.01),        

Какое здесь выражение будет не подкажете?

Round((sum(Aggr (???)

epicStoryPoints*epicStatusWeight)+

sum(Aggr (???)storyStoryPoints*storyStatusWeight))/

(sum(Aggr (???)epicStoryPoints)+

sum(Aggr (???)storyStoryPoints)), 0.01),    

andrey_krylov
Specialist
Specialist

Добрый день, Александр. По выражению тоже сказать в чем проблема не получится. Можете выложить какой-то образец?

Anonymous
Not applicable
Author

попробую еще так изложить)

Есть иерархия Город-> к городу относится Epic или Story( при этом их количество не ограничено)-> к каждому Epic и Story относятся другие Story-> и тут уже появляется Substory.

При этом у каждого Epic и Story, Substory имеется storypoints и statusweight(которые участвуют в расчете.

Город->Epics(Stories)->Stories->Substories пытаюсь сделать расчет X для каждой позиции. При этом если не разворачивать данные то поверхностно цифра в Городе получается корректная. Но при раскрытии 3ей позиции, цифры меняются. При этом достаточно дойти до 3его уровня в любом городе, цифры меняются во всех Городах.

Chernov
Creator
Creator

Смотрю на вашу формулу, и не понимаю, почему вы на 1 и 2 уровнях используете sum() а на 3 и 4 - нет ?

В самом начале у вас, как раз где и возникает ошибка (3-ий уровень)

if (dimensionality()=4, sum(substoryStatusWeight),

if (dimensionality()=3, if( sum(storyStoryPoints) > 0, storyStoryPoints*storyStatusWeight/storyStoryPoints,0),


Не работает потому что у вас в 3 мерах могут быть NULL() значения:  storyStoryPoints / storyStatusWeight / storyStoryPoints

Покажите структуру данных (CTRL + T)

И еще, вместо того чтобы использовать везде : Round() - сделайте лучше переопределение типа данных на Number так:

Qv_2018-09-14_16-35-57.png

Anonymous
Not applicable
Author

SnipImage.JPG

Chernov
Creator
Creator

Вот это проверили?

if (dimensionality()=4, sum(substoryStatusWeight),

if (dimensionality()=3, if( sum(storyStoryPoints) > 0, storyStoryPoints*storyStatusWeight/storyStoryPoints,0),