PowerBI Dax - 具有 IF 函数的过滤器。创建避免计算列的度量
PowerBI Dax - Filter with IF function. Create measure that avoids calculated columns
我创建了一个 Dax 代码,可以根据一些过滤器计算我们公司的 SKU 数量。现在我的数据集中有以下代码 + 帮助程序列,可以正确完成工作。
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 由我的数据集中的三个计算列组成,大约有 100 万行。
HelpColumn1= IF('Item'[SKULevel] IN {"1","2","3","4","5","6"} && 'Item'[SKUCode] IN{"A","B","C","D","G"},1,0)
HelpColumn2= IF('Item'[SKUCode] ="K", 1, 0 )
HelColumn3 = 'Item'[HelpColumn1] + 'Item'[HelpColumn2]
额外帮助栏背后的原因是我无法弄清楚如何将这部分纳入我的措施。我很确定这是可能的,并且我想避免创建三个额外的帮助列,每个列有 100 万行,因为数据模型已经非常大了。
任何关于我如何在不创建额外列的情况下执行此操作的帮助将不胜感激!
你能试试下面的方法吗
_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" }
)
我在这个测量中传递了三个过滤的 tables 来进行计数。
第一组是以下块 -> 它计算数据中 '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]
第二组 table 是以下块 - 进一步过滤第一个 table 的计数,仅 'SKUInfo'[Stockkeeping] = 1
FILTER ( VALUES ( 'SKUInfo'[Stockkeeping] ), 'SKUInfo'[Stockkeeping] = 1 )
第 3 组 table 是以下块 - 进一步过滤第 2 组仅 NOT 'Item'[SKUStatus] IN { "P", "U", "X", "Z" }
NOT 'Item'[SKUStatus] IN { "P", "U", "X", "Z" }
简而言之,这 returns ROWCOUNT
对于具有
'Item'[SKULevel]={ "1", "2", "3", "4", "5", "6" }
和 'Item'[SKUCode]={ "A", "B", "C", "D", "G" }
但只有 'SKUInfo'[Stockkeeping] = 1
和 none 与 [SKUStatus]="P", "U", "X", "Z"
我创建了一个 Dax 代码,可以根据一些过滤器计算我们公司的 SKU 数量。现在我的数据集中有以下代码 + 帮助程序列,可以正确完成工作。
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 由我的数据集中的三个计算列组成,大约有 100 万行。
HelpColumn1= IF('Item'[SKULevel] IN {"1","2","3","4","5","6"} && 'Item'[SKUCode] IN{"A","B","C","D","G"},1,0)
HelpColumn2= IF('Item'[SKUCode] ="K", 1, 0 )
HelColumn3 = 'Item'[HelpColumn1] + 'Item'[HelpColumn2]
额外帮助栏背后的原因是我无法弄清楚如何将这部分纳入我的措施。我很确定这是可能的,并且我想避免创建三个额外的帮助列,每个列有 100 万行,因为数据模型已经非常大了。
任何关于我如何在不创建额外列的情况下执行此操作的帮助将不胜感激!
你能试试下面的方法吗
_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" }
)
我在这个测量中传递了三个过滤的 tables 来进行计数。
第一组是以下块 -> 它计算数据中 '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]
第二组 table 是以下块 - 进一步过滤第一个 table 的计数,仅 'SKUInfo'[Stockkeeping] = 1
FILTER ( VALUES ( 'SKUInfo'[Stockkeeping] ), 'SKUInfo'[Stockkeeping] = 1 )
第 3 组 table 是以下块 - 进一步过滤第 2 组仅 NOT 'Item'[SKUStatus] IN { "P", "U", "X", "Z" }
NOT 'Item'[SKUStatus] IN { "P", "U", "X", "Z" }
简而言之,这 returns ROWCOUNT
对于具有
'Item'[SKULevel]={ "1", "2", "3", "4", "5", "6" }
和 'Item'[SKUCode]={ "A", "B", "C", "D", "G" }
但只有 'SKUInfo'[Stockkeeping] = 1
和 none 与 [SKUStatus]="P", "U", "X", "Z"