Как получить значение по умолчанию для пустых значений в мере Power BI Desktop - PullRequest
0 голосов
/ 30 января 2019

У меня есть две таблицы (Sales [OrderNumer, Price, ItemId, ...] и Item [Id, Name, Type]), и у меня есть мера, которая возвращает строку, подобную этой:

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

У меня есть визуальный вид таблицы в Power BI Desktop на уровне заказа с мерой ItemsType1 [OrderNumer, ItemsType1].Я хочу изменить значения BLANK столбца ItemType1 на значение по умолчанию, например "n / a", и переписал меру следующим образом:

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

Мера возвращает ожидаемое значение, но таким образом, для моих 600000строк в таблице Sales, объем памяти резко увеличивается, а визуальный элемент падает.У меня 16 ГБ памяти.Я думаю, что проблема с заявлением IF, но я не знаю почему.Я хотел бы понять, почему такая разница в производительности и как лучше всего это сделать.

Example

1 Ответ

0 голосов
/ 30 января 2019

Я почти уверен, что причина его взрыва в том, что из-за того, как вы его написали, он вернет "n/a" для ВСЕХ возможных вещей в таблице, а не только 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 )
    )

Это проверяет любую пустую связанную таблицу перед выполнением более тяжелых вычислений.

...