Из этого источника , мы видим, что TREATAS
работает следующим образом.
[Filtered Measure] :=
CALCULATE (
<target_measure>,
TREATAS (
VALUES ( <lookup_granularity_column> ),
<target_granularity_column>
)
)
эквивалентно
[Filtered Measure] :=
CALCULATE (
<target_measure>,
INTERSECT (
ALL ( <target_granularity_column> ),
VALUES ( <lookup_granularity_column> )
)
)
Важной частью является ALL
функция. Вот почему вы теряете контекст фильтра из строк в визуальном элементе.
Я не уверен, что это наиболее эффективное решение, но я думаю, что если вы добавите Inventory
в качестве фильтра table к вашей первой попытке, он должен поддерживать контекст фильтра в этой таблице из строки в визуальном элементе.
NumProductsfromSales1 =
CALCULATE (
[Count],
'Inventory',
TREATAS ( VALUES ( 'Sales'[Product] ), 'Inventory'[Product] )
)
Изменить: Что касается вашего комментария, попробуйте следующее:
a =
VAR top5prod =
SELECTCOLUMNS (
TOPN (
5,
SUMMARIZE ( Sales, Sales[Product], "Count", [Product Count] ),
[Count]
),
"Product", Sales[Product]
)
RETURN
CALCULATE (
[Product Count],
FILTER ( 'Inventory', 'Inventory'[Product] IN top5prod )
)
Использование FILTER
не так эффективно, как TREATAS
, но посмотрите, работает ли оно.
Очень сложно ответить на такой вопрос, не имея ничего воспроизводимого, с которым можно работать .