使用另一列重复的值对列进行排序

时间:2017-08-05 18:36:30

标签: powerbi dax

在Power BI Desktop中,我正在尝试按ID列(包含主键)重复排序以下列。

enter image description here

这会返回错误:“Nível2”中的值不能超过一个......“

在这个other post中,似乎建议连接列的值,以便它们不会重复。

但我希望它们能够被重复,以便它们可以在视觉效果中聚合值。

那么,这种情况的解决方法是什么?

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

问题是您的排序列(即您的ID列)包含您尝试排序的列中每个值的多个值(即您的Nivel2列)。

您需要确保您的排序列仅包含您尝试排序的列中每个值的一个不同值。

实现此目的的一种方法是根据您的ID列创建一个新的(计算的)排序列。它可以这样定义:

SortColumn:=CALCULATE(MAX('YourTable'[ID]),ALLEXCEPT('YourTable','YourTable'[Nivel2]))

以下是SortColumn行为的示例:

Id  Nivel2              SortColumn
1   Caixa               4
2   Caixa               4
3   Caixa               4
4   Caixa               4
5   Depósitos à ordem   7
6   Depósitos à ordem   7
7   Depósitos à ordem   7

您现在可以通过SortColumn对Nivel2进行排序。

编辑 - SortColumn的实施应在数据源中完成

PowerBI似乎存在限制,它会检查排序列的实现而不是排序列中的数据。因此,即使排序列中的数据完全有效,上述解决方案也不起作用。当您尝试按SortColumn排序[Nivel2]时,上述解决方案将抛出此错误:

  

此列不能按此列直接或间接排序的列进行排序。

应该将SortColumn的实现移动到数据源。即如果您的数据源是Excel工作表,则应在Excel工作表内创建SortColumn。

上述答案确实正确地解释了问题和解决方案。唯一的变化是SortColumn必须在表格模型(PowerBI)之外实现,以确保PowerBI不知道SortColumn和[Nivel2]列之间的依赖关系。

答案 1 :(得分:0)

就我而言,我是根据父子层次结构计算级别的 路径=路径([id],[父亲])

对于每个级别: 级别1 = LOOKUPVALUE([[名称],[id],PathItem([Path],1)) 级别2 = LOOKUPVALUE([[名称],[id],PathItem([路径],2)) .....

然后,我为每个级别创建一个新列以对“级别”列进行排序: SortL1 = LOOKUPVALUE([nID],[id],PathItem([Path],1)) SortL2 = LOOKUPVALUE([nID],[id],PathItem([Path],2)) .....

id和nID是相同的数字变量,但字符串格式为“ id”,因为Path不支持数字值。