【问题标题】:PowerBI Dax - Filter with IF function. Create measure that avoids calculated columnsPowerBI Dax - 具有 IF 功能的过滤器。创建避免计算列的度量
【发布时间】:2021-09-24 20:52:22
【问题描述】:

我创建了一个 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 万行,因为数据模型已经相当大了。

任何关于我如何在不创建额外列的情况下执行此操作的帮助将不胜感激!

【问题讨论】:

    标签: powerbi dax powerbi-desktop


    【解决方案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]
    

    第二组表是以下块 - 它将第一个表的计数进一步过滤为仅'SKUInfo'[Stockkeeping] = 1

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

    第三组表是下面的块 - 它进一步将第二组过滤为仅NOT 'Item'[SKUStatus] IN { "P", "U", "X", "Z" }

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

    简而言之,对于任何具有 'Item'[SKULevel]={ "1", "2", "3", "4", "5", "6" }'Item'[SKUCode]={ "A", "B", "C", "D", "G" } 但只有 'SKUInfo'[Stockkeeping] = 1 而没有 [SKUStatus]="P", "U", "X", "Z"

    【讨论】:

    • 我似乎快要工作了。我在此部分添加了 VALUES('Item') 以使其正常工作。 FILTER( VALUES( 'Item' ), 'Item'[SKUCode] IN { "A","B","C","D","G" } ) 但是,与我最初的计数相比,我得到的计数略有不同。似乎这个新措施比我最初的方法计算的行数更多,差异很小。您对为什么会这样有任何想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多