PowerBI Dax — Фильтр с функцией IF. Создайте меру, которая позволяет избежать вычисляемых столбцов

#powerbi #dax #powerbi-desktop

Вопрос:

Я создал код Dax, который подсчитывает количество артикулов в нашей компании на основе некоторых фильтров. Прямо сейчас у меня есть следующий код вспомогательные столбцы в моем наборе данных, который выполняет правильную работу.

 Number of Active SKU = 
    CALCULATE( COUNTROWS('Item'),
     FILTER('Item','Item'[Helpcolumn3] = 1 ),
    
     FILTER('SKUInfo',SKUInfo[StockKeeping] = "1" ),
    
        NOT('Item'[SKUStatus] IN { "P", "U", "X", "Z" } ) )
 

Helpcolumn3 состоит из трех вычисляемых столбцов в моем наборе данных, содержащих около 1 миллиона строк.

 HelpColumn1= IF('Item'[SKULevel] IN {"1","2","3","4","5","6"} amp;amp; 'Item'[SKUCode] IN{"A","B","C","D","G"},1,0)

HelpColumn2= IF('Item'[SKUCode] ="K", 1, 0 ) 

HelColumn3 = 'Item'[HelpColumn1]   'Item'[HelpColumn2]

 

Причина дополнительных столбцов справки заключалась в том, что я не мог понять, как включить эту часть в мою меру. Я почти уверен, что это возможно, и я хотел бы избежать создания трех дополнительных столбцов справки с 1 миллионом строк в каждом, поскольку модель данных уже довольно большая.

Любая помощь в том, как я могу сделать это без создания дополнительных столбцов, будет очень признательна!

Ответ №1:

Можете ли вы попробовать следующее, пожалуйста

 _count=
CALCULATE (
    COUNTROWS ( 'Item' ),
    TREATAS (
        UNION (
            SUMMARIZE (
                CALCULATETABLE (
                    'Item',
                    CROSSJOIN (
                        { "1", "2", "3", "4", "5", "6" },
                        FILTER ( VALUES ( 'Item'[SKUCode] ), 'Item'[SKUCode] IN { "A", "B", "C", "D", "G" } )
                    )
                ),
                'Item'[SKULevel],
                'Item'[SKUCode]
            ),
            SUMMARIZE ( FILTER ( 'Item', 'Item'[SKUCode] = "C" ), 'Item'[SKULevel], 'Item'[SKUCode] )
        ),
        'Item'[SKULevel],
        'Item'[SKUCode]
    ),
    FILTER ( VALUES ( 'SKUInfo'[Stockkeeping] ), 'SKUInfo'[Stockkeeping] = 1 ),
    NOT 'Item'[SKUStatus] IN { "P", "U", "X", "Z" }
) 
 

Я передаю три отфильтрованные таблицы в этом измерении, чтобы выполнить подсчет.

Первый набор-это следующий блок — > он подсчитывает все >объединенные элементы, для которых имеются данные 'Item'[SKULevel]={ "1", "2", "3", "4", "5", "6" } , и 'Item'[SKUCode]={ "A", "B", "C", "D", "G" }

 TREATAS (
    UNION (
        SUMMARIZE (
            CALCULATETABLE (
                'Item',
                CROSSJOIN (
                    { "1", "2", "3", "4", "5", "6" },
                    FILTER ( VALUES ( 'Item'[SKUCode] ), 'Item'[SKUCode] IN { "A", "B", "C", "D", "G" } )
                )
            ),
            'Item'[SKULevel],
            'Item'[SKUCode]
        ),
        SUMMARIZE ( FILTER ( 'Item', 'Item'[SKUCode] = "C" ), 'Item'[SKULevel], 'Item'[SKUCode] )
    ),
    'Item'[SKULevel],
    'Item'[SKUCode]
 

2-й набор таблиц — это следующий блок, который дополнительно фильтрует количество первой таблицы только до 'SKUInfo'[Stockkeeping] = 1

 FILTER ( VALUES ( 'SKUInfo'[Stockkeeping] ), 'SKUInfo'[Stockkeeping] = 1 )
 

3-й набор таблицы — это следующий блок, который дополнительно фильтрует 2-й набор только на NOT 'Item'[SKUStatus] IN { "P", "U", "X", "Z" }

 NOT 'Item'[SKUStatus] IN { "P", "U", "X", "Z" }
 

В двух словах, это возвращает ROWCOUNT все товары, которые
'Item'[SKULevel]={ "1", "2", "3", "4", "5", "6" } и 'Item'[SKUCode]={ "A", "B", "C", "D", "G" } но только 'SKUInfo'[Stockkeeping] = 1 и ни с кем [SKUStatus]="P", "U", "X", "Z"

Комментарии:

1. Кажется, я почти работаю. Я добавил ЗНАЧЕНИЯ («Элемент») в этот раздел, чтобы он работал. FILTER( VALUES( 'Item' ), 'Item'[SKUCode] IN { "A","B","C","D","G" } ) Однако я получаю немного другие показатели по сравнению с моим первоначальным. Похоже, что эта новая мера подсчитывает больше строк, чем мой первоначальный метод, причем разница довольно невелика. У вас есть какие-нибудь идеи относительно того, почему это может быть?