FIRSTNOTBLANK (DAX) Power BI - 不带自动排序

问题描述 投票:0回答:2

看起来

PowerBI
正在自动订购我的
table
,我不知道为什么。所以,我有这个表(我从
Excel
文件导出)

Colonne 1
7
25
1
8
3

每当我做

New Mesure
时,用这个公式:

Mesure = FIRSTNONBLANK(Feuil1[Colonne 1];0)

它给了我号码

1
。如果我这样做
LASTNONBLANK
,它会返回数字
25
。因此,它显然会自动排序我的数据集,但每当我查看软件的“数据”选项卡时,我都会看到我的数据按照我想要的方式排序。

关于如何保持默认排序有什么想法吗?

powerbi dax
2个回答
3
投票

不幸的是,这正是

FIRSTNONBLANK()
LASTNONBLANK()
的行为。它们根据其本机排序顺序(即数据类型)迭代列的值。因此,
FIRSTNONBLANK
将返回最小的数字
1
LASTNONBLANK
最大的数字
25
。一般来说,在使用 DAX 时,您不能对表或列中值的排序顺序做出假设。

因此,我的建议是你可以显式地编写逻辑来找到目标值。假设表格是根据日期排序的,您可以找到最早/最新日期的键(根据您的用例),然后使用该键查找值。

Target = 
VAR TargetKey = 
CALCULATE(
    VALUES(Table1[Key]),
    FILTER(
        Table1,
        Table1[Date] = MIN(Table1[Date]) // or MAX(Table1[Date])
    )
)
RETURN
LOOKUPVALUE(Table1[Colonne 1], Table1[Key], TargetKey)

dax

result


0
投票

我遇到了完全相同的问题:我需要选择一个与不同表中的特定条件匹配的特定值,并且排序顺序是日期,而不是值的顺序。 DAX 提出的另一个挑战:您不能在表变量中使用列,因此

RANKX
无济于事。

解决方案是创建一个

VAR _minxDate
为我提供了表格的确切日期,然后使用
FIRSTNONBLANK
获取所需的表格。

所以完整的代码如下所示:

 Previous value = 
_var minDate = MINX (FILTER (TargetTable, <lots of conditions>), TargetTable[Date])
// Now that I have the date, I can use the FIRSTNONBLANK to read the value
VAR _PrevValue = CALCULATE(FIRSTNONBLANK (TargetTable[TargetValue], 0), 
    FILTER (TargetTable, <long list of conditions as before> && TargetTable[Date] = _minxDate
    
    Return _PrevValue
© www.soinside.com 2019 - 2024. All rights reserved.