Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Добрый день. Имеется сводная с глубиной dimensionality()=4
ведется посдчет данных. Когда не раскрыт ни один уровень, цифры корректны(руками проверял), когда дохожу до 3ьего уровня, цифры пересчитываются( но не у всех), а если выбрать конкретную позицию также осуществляется пересчет. Есть ли идеи почему это происходит(и как в данном случае считает Qlik)я руками подобрать подобные расчеты не смог. И можно ли как то завязаться на то чтобы фильтры не влияли на расчет.
А напишите хоть формулу которая не верно работает ?
Если вдруг используете aggr, то чтобы он корректно работал в сводной таблице, в определенных случаях нужно использовать вот так : aggr (nodistinct ........ , .... )
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
)
)
)
)
)
)
)
Барахлит видимо в "оранжевой части"
Добрый день, Александр. Дело в том что в сводной QV считает не так как Excel, просто суммируя строки. Попробуйте агрегировать выражение и посмотрите, что получается
Sum(Aggr( Выражение, [Измерение 1], [Измерение 2], [Измерение 3]...))
[Измерение 1], [Измерение 2], [Измерение 3]... - все ваши измерения
Вот тут немного сложнее , не освоил еще агрегирование.
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),
Добрый день, Александр. По выражению тоже сказать в чем проблема не получится. Можете выложить какой-то образец?
попробую еще так изложить)
Есть иерархия Город-> к городу относится Epic или Story( при этом их количество не ограничено)-> к каждому Epic и Story относятся другие Story-> и тут уже появляется Substory.
При этом у каждого Epic и Story, Substory имеется storypoints и statusweight(которые участвуют в расчете.
Город->Epics(Stories)->Stories->Substories пытаюсь сделать расчет X для каждой позиции. При этом если не разворачивать данные то поверхностно цифра в Городе получается корректная. Но при раскрытии 3ей позиции, цифры меняются. При этом достаточно дойти до 3его уровня в любом городе, цифры меняются во всех Городах.
Смотрю на вашу формулу, и не понимаю, почему вы на 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 так:
Вот это проверили?
if (dimensionality()=4, sum(substoryStatusWeight),
if (dimensionality()=3, if( sum(storyStoryPoints) > 0, storyStoryPoints*storyStatusWeight/storyStoryPoints,0),