2017-02-20 138 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所有行会显示。

让我知道这是否有帮助。