#powerbi #dax
Вопрос:
Я создал эту таблицу в Power BI:
DimProduct = UNION(
ROW("ProductId", 1, "Product", "AB","ProductType","A"),
ROW("ProductId", 2, "Product", "AC","ProductType","A"),
ROW("ProductId", 3, "Product", "AD","ProductType","A"),
ROW("ProductId", 4, "Product", "BB","ProductType","B"),
ROW("ProductId", 5, "Product", "BC","ProductType","B")
)
Затем я создал эту таблицу:
DimProductSelectedType =
VAR vSelectedProduct=
SELECTEDVALUE('DimProduct'[Product])
RETURN
ROW("Col1",vSelectedProduct)
Я упал DimProduct[Product]
в ломтерезку
Я попал DimProductSelectedType
в список
Я ожидаю, что, когда я выберу один продукт из слайсера, он появится в списке. Но список всегда остается пустым.
Я думал, что значение SELECTEDVALUE будет отражать любое отдельное значение, выбранное в срезе
Это моя непосредственная проблема, и это можно резюмировать следующим образом
Столбцы таблицы, в которых используются вычисления DAX, оцениваются во время импорта. Меры оцениваются во время выполнения
То, над чем я на самом деле работаю, так это:
- Выберите продукт в слайсере
- Определите этот тип продуктов
- Показать визуализации, сравнивающие выбранный продукт со всеми другими продуктами этого типа
На самом деле я начал с этого, а теперь возвращаюсь.
DimProductTypeSelected =
VAR vSelectedProduct=
SELECTEDVALUE('DimProduct'[Product])
VAR vSelectedProductType=
SUMMARIZE(
FILTER(
ALLSELECTED(DimProduct),
DimProduct[Product]=vSelectedProduct
),
DimProduct[ProductType]
)
RETURN
FILTER(
ALLSELECTED(DimProduct),
DimProduct[ProductType]=vSelectedProductType
)
Ответ №1:
При выборе элемента в срезе он уже создает более подходящий контекст на других визуальных элементах, поэтому нет необходимости перезаписывать его вручную. Что вам нужно будет сделать, так это создать более подходящий контекст для всех продуктов, например, с помощью ALL
или ALLSELECTED
для компараторов. Но для того, чтобы это было динамичным, вам нужно использовать меры, таблицы статичны и не пересчитываются с изменениями пользовательского интерфейса.
Чтобы объяснить, почему вы получаете свои результаты с помощью текущего подхода, таблицы обновляются один раз и после этого не меняются. Поэтому vSelectedProduct
всегда возвращает пустое значение, так как в момент обновления этой таблицы контекст фильтра отсутствует DimProduct[Product]
, поэтому по умолчанию он пуст
Если вы создадите меру Measure = SELECTEDVALUE('DimProduct'[Product])
и поместите DimProduct[Product]
ее в срез, он покажет выбранный продукт для одного выбора, а пробел для нескольких выбранных (или всех значений)
ОТРЕДАКТИРУЙТЕ вторую часть своего вопроса — выбор продукта создаст контекст фильтра только для этого продукта в других визуальных элементах. Тогда вы могли бы использовать, например,:
CountRowsPerType =
VAR vSelectedType =
SELECTEDVALUE('DimProduct'[ProductType])
RETURN
CALCULATE( COUNTROWS(DimProduct), ALL(DimProduct[Product]), 'DimProduct'[ProductType] = vSelectedType )
что вернет количество для всех продуктов этого типа, даже если в визуальном элементе будет отображаться только выбранный продукт
Комментарии:
1. Я вижу, что вы говорите, что вычисления столбцов на основе DAX не реагируют на фильтры, но вычисления измерений реагируют
2. Хотя об этом упоминается только во второй половине моего вопроса, это все еще оставляет меня озадаченным тем, как я создаю визуализацию, показывающую все типы продуктов, выбранных в слайсере.
3. Мой настоящий вопрос находится во второй части, но я думаю, что будет справедливо, если я создам новый вопрос для этого.
4. Вычисляемые столбцы и вычисляемые таблицы, отображаемые в модели, не реагируют на фильтры пользовательского интерфейса, они статичны. Если вы создадите таблицу/добавите вычисляемый столбец в меру (поэтому они являются только временными и, например, не могут быть помещены в срез), он сохранит контекст фильтра, в котором вычисляется мера