#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" } )
Однако я получаю немного другие показатели по сравнению с моим первоначальным. Похоже, что эта новая мера подсчитывает больше строк, чем мой первоначальный метод, причем разница довольно невелика. У вас есть какие-нибудь идеи относительно того, почему это может быть?