SUMX над табличной переменной разрывается при добавлении связей в базовую таблицу - PullRequest
1 голос
/ 27 апреля 2020

Среда

Я создал два запроса в Power Query

"Демо"

let
    Source = Table.FromList(List.Random(1000, 20200427),Splitter.SplitByNothing()),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}}),
    #"Split Column by Position" = Table.SplitColumn(#"Changed Type", "Column1", Splitter.SplitTextByPositions({0, 5, 7}, false), {"Month", "Amount"}),
    #"Changed Type2" = Table.TransformColumnTypes(#"Split Column by Position",{{"Month", type number}, {"Amount", type number}}),
    ConvetToMonthNumber = Table.TransformColumns(#"Changed Type2",{{"Month", each Number.RoundDown( 12 * _) + 1, Int64.Type}})
in
    ConvetToMonthNumber

и "MockCal"

let
    Source = Table.FromList( List.Repeat({1..4},3), Splitter.SplitByNothing(),{"CalQuart"}),
    #"Added Index" = Table.AddIndexColumn(Source, "Month", 1, 1)
in
    #"Added Index"

и затем в модели у меня есть два бита DAX

Running Amount = 
CALCULATE(
    SUM('Demo'[Amount]),
    FILTER(ALL('Demo'[Month]), 'Demo'[Month] <= MAX('Demo'[Month]))
)

и

WEIRD Run total = 

VAR CalcTable = SUMMARIZE(Demo,Demo[Month],"MonthlyRollingAmounts",[Running Amount])
VAR TotalAmount = SUMX(CalcTable,[MonthlyRollingAmounts])

RETURN IF(ISFILTERED(Demo[Month]), [Running Amount], TotalAmount)

С этим я могу создать следующий визуал:

enter image description here

Достигается желаемый результат: создайте меру, которая суммирует свои срезы по месяцам.

Однако, когда я создаю отношение вне этой таблицы, SUMX перестает работать, как ожидалось .

enter image description here enter image description here

Вопрос заключается в следующем: почему добавление этого отношения меняет поведение SUMX? Мне не кажется, что это должно иметь значение вообще. Помощь ценится, этот действительно сгибает мой мозг.

1 Ответ

1 голос
/ 27 апреля 2020

Причина этого в том, что по вашему Running Amount показателю вы удаляете любую фильтрацию на 'Demo'[Month], но это не распространяется вверх по течению до MockCal (которую я предполагаю, что вы используете в качестве первого столбца в вашем визуале ).

Как правило, вы хотите выполнить фильтрацию даты в таблице календаря, а не в таблице фактов. Попробуйте вместо этого:

Running Amount = 
CALCULATE(
    SUM('Demo'[Amount]),
    FILTER(ALL(MockCal), 'MockCal'[Month] <= MAX('MockCal'[Month]))
)

Ваш WEIRD Run total также должен быть обновлен, чтобы использовать таблицу календаря.

...