2017-02-20 140 views
0

我希望有人可以提供幫助,因爲我已經把我的頭髮拉出了幾個小時......我在PowerBI中有兩張桌子。一個名爲「Fact_WorstInstance」的行包含(Index,Instance)。例如:DAX:使用度量結果填充計算列而不需要重新計算每行的度量值

1,2 
2,1 
3,2 

一個叫做 'Fact_AllInstances' 包含(索引,例如,值)的行。例如:

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」表是有效行,這應該被用來從「Fact_AllInstances」表得到實例2

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, 'Amber' - >因爲對於索引2,該度量給出索引1爲最差 3,2'藍色'

任何幫助將不勝感激。 謝謝 豐富

回答

1

這是一個可能的解決方案,您可能想要實現。

首先,計算列不受切片器/頁面過濾器的影響,您需要爲此創建一個度量,因此您評估問題的方式將無法工作。

創建保存唯一實例值的附加計算表。在Power BI中,「建模」選項卡中有一個用於創建New Table的圖標,您可以在其中使用表達式來生成表格。

使用該表達式:

IsntancesCalcTable = VALUES(Fact_WorstInstance[Instance]) 

現在你有一個表,你的模型稱爲InstancesCalcTable

拖動Instance列中的InstancesCalcTable拖放在Fact_WorstInstanceInstance列中,這將通過Instance創建InstancesCalcTableFact_WorstInstance之間的關係。兩個表之間的一條線將在Relationships視圖中繪製,雙擊該線,您將看到Edit Relationship窗口。

確保它看起來是這樣的:

enter image description here

然後做同樣的創建InstancesCalcTableFact_AllInstances之間的關係。

你會用這樣的模式結束:

enter image description here

然後你就可以在Fact_WorstInstance表使用Index列,在切片機,它會過濾Fact_AllInstances表只得到選擇的實例。

enter image description here

但是,如果你沒有任何過濾器Fact_AllInstances所有行會顯示。

讓我知道這是否有幫助。