如何在Power BI Desktop度量中获取空白的默认字符串值

时间:2019-01-29 23:08:26

标签: powerbi dax


我有两个表(Sales [OrderNumer,Price,ItemId,...]和Item [Id,名称,类型]),并且我有一个返回这样的字符串的度量:

 ItemsType1 = CALCULATE(
     CONCATENATEX('Sales', RELATED('Item'[Name]), ","), 'Item'[Type] = "type1" 

在Power BI Desktop中,我在订单级别有一个表格,度量为ItemsType1 [OrderNumer,ItemsType1]。我想通过“ n / a”之类的默认值更改ItemType1列的BLANK值,并将度量重写为:

 ItemsType1 = VAR x = CALCULATE(
     CONCATENATEX('Sales', RELATED('Item'[Name]), ","), 'Item'[Type] = "type1") 
 RETURN IF( ISBLANK(x), "n/a", x )

该度量返回期望值,但是通过这种方式,对于Sales表中我的600000行,内存突然增长并且视觉崩溃。我有16GB的内存。我认为问题出在IF语句上,但我不知道为什么。我想了解为什么这种性能差异以及实现此目的的最佳方法是什么。

Example

1 个答案:

答案 0 :(得分:0)

我很确定它之所以会崩溃,是因为由于您编写的方式,它将为表中的 ALL 可能的所有内容返回type1,而不仅仅是IF个您要过滤的内容。

解决方案是在串联中移动ItemsType1 = CALCULATE ( CONCATENATEX ( 'Sales', IF(ISBLANK( RELATED ( 'Item'[Name] ) ) "n/a", RELATED ( 'Item'[Name] ) ), "," ), 'Item'[Type] = "type1" ) 。尝试这样的事情:

RETURN

以上内容与我的预期不符。尝试改为将您的RETURN IF( COUNTROWS( RELATEDTABLE( 'Item' ) ) = 0, BLANK(), IF( ISBLANK( x ), "n/a", x ) ) 行更改为此:

Dim arr() As String
lrn = 13237 'ActiveSheet.Range("A1").Range("A1").SpecialCells(xlCellTypeLastCell).Row
ac = 0
ReDim arr(0 To ac) As String
For Each c In Range("L2:L" & lrn)
    If Not IsEmpty(c.Value) Then
        If Not (UBound(Filter(arr, c.Value)) > -1) Then
            If ac > 0 Then ReDim Preserve arr(0 To ac)
            arr(ac) = c.Value
            ac = ac + 1
        End If
    End If
    DoEvents
Next c

这会在进行任何较大的计算之前检查任何空的相关表。