Проблема расчета смешанной агрегации Tableau

Я пытаюсь объединить 2 источника данных в Tableau.

Когда поле переносится из вторичного источника данных в вычисляемое поле в первичном источнике данных, оно вынуждает выполнять агрегирование в этот момент.

Мой расчет представляет собой умножение, и когда Tableau подводит промежуточные итоги, он делает это интересным образом:

Formula = SUM(primary.a) x MAX(secondary.b)

Expected subtotal method = SUM(SUM(primary.a) x MAX(secondary.b))

Actual behavior seen = SUM(SUM(primary.a)) x MAX(secondary.b)

Он суммирует поле a, а затем применяет максимальное умножение b после.

Любые идеи, как контролировать способ выполнения этого расчета?


person Phil5p    schedule 14.11.2014    source источник


Ответы (2)


Была точно такая же проблема несколько дней назад. Фактическое поведение правильное, потому что оно зависит от разделов (размеров на листе), которые вы используете. Позволь мне объяснить. Предположим, у вас есть таблица A и таблица B:

A:

Id  MeasureA
1   10
2   20
3   15
4   25
5   10
6   5

B:

Id  MeasureB
1   5
2   10
3   20
4   5
5   15
6   25

Теперь, если вы перетащите идентификатор в строки, а свою формулу в столбцы (в гистограмме), у вас должно получиться что-то вроде:

Id  MeasureB
1   50
2   200
3   300
4   125
5   150
6   125

Для первой строки у вас будет SUM(A.MeasureA) = 10, а MAX(B.MeasureB) = 5. А умножение равно 50.

Теперь, если вы удалите идентификатор из строк, у вас будет SUM(A.MeasureA) = 85, а MAX(B.MeasureB) = 25. И умножение будет 2125, а не 950, как вы ожидаете ( сумма значений в моей третьей таблице)

Помните, что агрегирование происходит на уровне измерений, которые явно указаны на листе.

Чтобы получить точные результаты, вам нужно присоединиться к столам, прежде чем подключаться к Tableau. Я думаю, это не очень сложно сделать на SQL. Невозможно получить то, что вы хотите (только в агрегации самого низкого уровня) только путем смешивания данных

person Inox    schedule 14.11.2014

если вы хотите воспроизвести логику SUM(SUM(primary.a) × MAX(secondary.b)), я думаю, вам понадобится выражение LOD, которое присваивает максимум secondary.b каждой строке в primary.a.

Я думаю, что выражение, как:

{EXCLUDE[id]:MAX[secondary.b]}

… должно помочь.

person Adrienne Tiley-Lerner    schedule 07.06.2019