我有一个表MyTable
包含列:QuoteID, ControlNo, Premium, ExpirationDate
我需要创建一个措施,以抓取SUM(Premium)
,EffectiveDate
应该是<= Today()
,最后一个ExpirationDate
(按QuoteID DESC
排序)应该是{ {1}}。
如何将以下语句转换为DAX?
在SQL中,我将这样做:
>= Today()
如何在DAX中编写它?
我已经尝试过了,但是不能正常工作:
select sum(Premium) as Premium
from MyTable t
where EffectiveDate <= GETDATE() and
(select top 1 t2.ExpirationDate
from MyTable t2
where t2.ControlNo = t.controlno
order by t.quoteid desc) >= GETDATE()
更新:
尝试从fact_Premium数据集创建计算表,但仍不确定如何过滤它
Premium =
CALCULATE (
SUM ( fact_Premium[Premium] ),
FILTER (
fact_Premium,
fact_Premium[EffectiveDate] <= TODAY () &&
TOPN ( 1, ALL ( fact_Premium[ExpirationDate] ),
fact_Premium[QuoteID], ASC ) >= TODAY ()
)
)
答案 0 :(得分:1)
这里的DAX有几个问题。
首先,当您使用TOPN
时,排序表达式(第3个参数)只能引用您要操作的表中的行(第2个参数),因此仅使用[ExpirationDate]
列将不会工作。我认为您可能希望使用fact_Premium
而不是ALL ( fact_Premium[ExpirationDate] )
。
第二,TOPN
函数返回一个表而不是单个值,因此您需要以某种方式访问想要的列。一种选择是使用像SUMX
或MAXX
这样的迭代器:
MAXX( TOPN(...), fact_Premium[ExpirationDate] )
您还可以使用SELECTCOLUMNS
来将单行单列表强制为一个值:
SELECTCOLUMNS( TOPN(...), "ExpirationDate", fact_Premium[ExpirationDate] )
我不能保证它会完美地工作,但是它应该使您更接近目标:
Premium =
CALCULATE (
SUM ( fact_Premium[Premium] ),
FILTER (
fact_Premium,
fact_Premium[EffectiveDate] <= TODAY () &&
SUMX( TOPN ( 1, fact_Premium, fact_Premium[QuoteID], DESC ),
fact_Premium[ExpirationDate] )
>= TODAY ()
)
)