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

问题描述 投票:0回答:1

我需要帮助创建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
.....

预期输出过滤器:

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]))

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

提前致谢

dax tabular
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

© www.soinside.com 2019 - 2024. All rights reserved.