2017-02-20 2 views
0

Надеюсь, кто-то может помочь, так как я вытягиваю свои волосы часами ... У меня есть две таблицы в PowerBI. Один из названных «Fact_WorstInstance» содержит строки (Index, Instance). Например:DAX: Используйте результат измерения, чтобы заполнить расчетный столбец без пересчета в строке

1,2 
2,1 
3,2 

Один называется 'Fact_AllInstances' содержит строки (Index, Instance, Value). Например:

1,1,'Red' 
1,2,'Green' 
2,1,'Amber' 
2,2,'Red' 
2,3,'Brown' 
3,1,'Green' 
3,2,'Blue' 

В первой таблице, по существу, указатель на худшую запись во второй таблице для данного индекса (согласно классификации некоторой внешней системы).

Существует слайсер, на котором индексы видны пользователю.

Что я хочу сделать, это найти наихудшее значение экземпляра для самого заметного индекса в таблице «Fact_WorstInstance», а затем получить все строки индекса и значения из таблицы «Fact_AllInstances» для этого экземпляра.

Например, если фильтрация ломтерезки разве тогда (3,2) должна быть активной строки из из таблицы «Fact_WorstInstance», и это должно быть использовано, чтобы получить экземпляр 2 из таблицы «Fact_AllInstances»

1,2,'Green' 
2,2,'Red' 
3,2,'Blue' 

из таблицы «Fact_AllInstances».

Я попытался сделать это разными способами, создав меру на «Fact_WorstInstance», которая дает наивысшую видимую строку. И затем используйте эту меру для создания расчетного столбца на «Fact_AllInstances», с 1 для худшего и 0 для не худшего. А затем используйте этот вычисленный столбец в качестве фильтра в PowerBI.

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

Моя мера:

Worst Entry = CALCULATE(FIRSTNONBLANK(Fact_WorstInstance[Instance],1),filter(ALLSELECTED(Fact_WorstInstance),Fact_WorstInstance[Index]=MAX(Fact_WorstInstance[Index]))) 

Моя колонка:

WorstColumn = if(Fact_AllInstances[Instance]=[Worst Entry],1,0) 

Так вместо того, чтобы выход выше, я получаю

1,2, 'Зеленый' 2,1, «Амбер» -> потому что для индекса 2 мера дает индекс 1 как наихудший 3,2, 'синий'

Любая помощь будет принята с благодарностью. Thanks Rich

ответ

1

Это возможное решение, которое вы, возможно, захотите реализовать.

Прежде всего, расчетные столбцы не зависят от фильтров слайсеров/страниц, вам нужно будет создать меру для этого, так что способ оценки проблемы не будет работать.

Создайте дополнительную расчетную таблицу, содержащую уникальные значения экземпляров. На вкладке «Моделирование» Power BI есть значок для создания New Table, где вы можете использовать выражение для создания таблицы.

Используйте это выражение:

IsntancesCalcTable = VALUES(Fact_WorstInstance[Instance]) 

Теперь у вас есть таблица с именем InstancesCalcTable в вашей модели.

Перетащите Instance столбец в InstancesCalcTable и поместите его в Instance колонке Fact_WorstInstance, это создаст связь между InstancesCalcTable и Fact_WorstInstance через Instance. Строка между обеими таблицами будет нарисована в представлении Relationships, дважды щелкните эту строку, и вы увидите окно Edit Relationship.

Убедитесь, что она выглядит следующим образом:

enter image description here

Затем сделать то же самое для создания отношений между InstancesCalcTable и Fact_AllInstances.

Вы закончите с моделью, как это:

enter image description here

Затем вы можете использовать Index столбец в Fact_WorstInstance таблицы, в ломтерезках, и он будет фильтровать Fact_AllInstances таблицы, чтобы получить только экземпляры выбранных.

enter image description here

Однако, если у вас нет какого-либо фильтра будут отображаться все строки в Fact_AllInstances.

Дайте мне знать, если это поможет.

Смежные вопросы