首页 文章

DAX |使用非活动(使用关系)覆盖活动过滤器

提问于
浏览
0

我需要帮助创建DAX措施 . 这是Tabular立方体中的关系 . 我有一个事实销售,初始日期,最终日期和产品表 .

Relationship : Product -> Fact Sales (1 to Many, active)
Initial Date -> Fact Sales (1 to many, inactive relation)
Final Date - > Fact Sales(1 to many, active)

Cube用作Power Bi工具的源 . 用户可以选择任何初始和最终日期来进行销售比较 .

实际数据

Product|Date|Sales
Product1|20160101|100
Product1|20160102|110
Product1|20160131|200
Product2|20160101|78
.....

预期产量 Filters :

product : Product1
Initial date : 20160101
Final Date : 20160131

Product | Initial Sales | Final Sales
Product1|100 |200

我创建了DAX测量AS

Initial Sales := CALCULATE(SUM(SALES),USERELATIONSHIP('Fact Sales'[Date],'Initial Date'[Date]))

但这项措施并未给我初始销售,因为它也按最终日期过滤 .

提前致谢

1 回答

  • 0

    通过在DAX中使用FILTER函数,可以在没有显式关系的情况下关联表 .

    由于 Initial DateFact Sales 的关系被禁用,您需要 FILTER Fact Sales 行与过滤器中选择的 Initial Date 匹配 . 您可以使用 EARLIER 将正在评估的上下文与 Fact Sales 中的每一行进行比较,并过滤正确的计算值 .

    使用这些措施:

    Initial Sales :=
    IF (
        ISFILTERED ( InitialDate[InitialDate] ),
        CALCULATE (
            SUM ( FactSales[Sales] ),
            FILTER (
                ALL ( FactSales ),
                COUNTROWS (
                    FILTER (
                        FactSales,
                        EARLIER ( FactSales[Date] ) = MAX ( InitialDate[InitialDate] )
                            && EARLIER ( FactSales[Product] ) = [Product]
                    )
                )
            )
        ),
        BLANK ()
    )
    
    Final Sales :=
    IF (
        ISFILTERED ( FinalDate[FinalDate] ),
        CALCULATE (
            SUM ( FactSales[Sales] ),
            FILTER ( FactSales, [Date] = MAX ( FinalDate[FinalDate] ) )
        ),
        BLANK ()
    )
    

    此表达式的工作原理如下,它将 Sales 列中的所有值相加,其中 Date 等于在过滤器中选择的 Final Date . 但是,您可以轻松地计算出您在 Final DateFact Sales 之间设置的关系 .

    ISFILTERED 函数告诉我们过滤器是否选择了值,如果选择了值,则返回该值,否则返回 BLANK .

    这是Power BI中的一个示例,因为我现在无法访问Excel .

    enter image description here

相关问题