我需要帮助创建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中使用FILTER函数,可以在没有显式关系的情况下关联表。
由于Initial Date
与Fact 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 Date
和Fact Sales
之间的关系。
ISFILTERED
函数告诉我们过滤器是否选择了值,如果选择了值,则返回该值,否则返回BLANK
。
这是Power BI中的一个示例,因为我现在无法访问Excel。