DAX:使用度量结果填充计算列而不重新计算每行的度量

时间:2017-02-20 17:51:26

标签: dax

我希望有人可以提供帮助,因为我已经把头发拉了几个小时......我在PowerBI上有两张桌子。一个名为'Fact_WorstInstance'的行包含(Index,Instance)行。例如:

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'表的活动行,这应该用于从'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,'琥珀' - >因为对于索引2,该度量将索引1视为最差 3,2, '蓝色'

非常感谢任何帮助。 谢谢 富

1 个答案:

答案 0 :(得分:1)

这是您可能想要实施的可能解决方案。

首先,计算列不受切片器/页面过滤器的影响,您需要为此创建一个度量,因此您应用该问题的方式将无效。

创建一个包含唯一实例值的附加计算表。在Power BI,Modeling选项卡中,有一个用于创建New Table的图标,您可以使用表达式生成表格。

使用此表达式:

IsntancesCalcTable = VALUES(Fact_WorstInstance[Instance])

现在,您的模型中有一个名为InstancesCalcTable的表。

拖动Instance中的InstancesCalcTable列并将其放在Instance的{​​{1}}列中,这将在Fact_WorstInstanceInstancesCalcTable之间建立关系{1}}通过Fact_WorstInstance。两个表格之间的一行将在Instance视图中绘制,双击该行,您将看到Relationships窗口。

确保它看起来像这样:

enter image description here

然后执行相同操作以创建Edit RelationshipInstancesCalcTable之间的关系。

你将以这样的模型结束:

enter image description here

然后,您可以在Fact_AllInstances表格中使用Index列,在切片器中,它将过滤Fact_WorstInstance表以仅获取所选实例。

enter image description here

但是,如果您没有任何过滤器,则会显示Fact_AllInstances中的所有行。

如果有帮助,请告诉我。