Dax 不同值的非共振和

Dax 不同值的非共振和,dax,ssas-tabular,Dax,Ssas Tabular,我在SSAS中有一个表格,包含带有库存日期、SKU和其他属性的库存 +----------+-----+ | Date | SKU | +----------+-----+ | 20180701 | 1 | +----------+-----+ | 20180701 | 2 | +----------+-----+ | 20180701 | 3 | +----------+-----+ | 20180702 | 1 | +----------+-----+ | 20180

我在SSAS中有一个表格,包含带有库存日期、SKU和其他属性的库存

+----------+-----+
| Date     | SKU |
+----------+-----+
| 20180701 | 1   |
+----------+-----+
| 20180701 | 2   |
+----------+-----+
| 20180701 | 3   |
+----------+-----+
| 20180702 | 1   |
+----------+-----+
| 20180702 | 3   |
+----------+-----+
| 20180703 | 3   |
+----------+-----+
每天,我想通过计算不同的sku值来聚合数据:

CntSKU:= DISTINCTCOUNT([SKU])
但是,每个月,我希望将每日值相加,然后除以天数(如天数的平均值)。DAX似乎没有那么难:

 AvgSKU:= DIVIDE(
            sumx(SUMMARIZE(Table;Table[Date];"CntSKU";DISTINCTCOUNT(Table[SKU]));[CntSKU])
            ;DISTINCTCOUNT(Table[Date])
            ;BLANK()
            )
不过,演出相当糟糕。 一个月内,CntSKU每天的查询时间约为7.2秒。AvgSKU测量值的计算大约需要9.5秒。对于Excel Pivot中的几个或几个计算中的较大数据集,此计算时间是一个更致命的杠杆


接下来的问题是:有没有更好的方法来计算AvgSKU度量?

也许我误解了你的目标,但你的Dax公式似乎过于复杂了。我会尝试以下措施:

SKU Count = DISTINCTCOUNT(Table[SKU])

Date Count = DISTINCTCOUNT(Table[Date])

SKU Count per Date = DIVIDE( [SKU Count], [Date Count])

是的,在进一步研究之后,我同意我的DAX很愚蠢或者只是“过于复杂”:-) 我没有考虑到语境转换的力量

我修改过的DAX工作起来很有魅力

Averagex(Datum, CALCULATE(Distinctcount(SKUid))

就是这样。

我需要将每天的不同值相加,然后除以天数,得到每月的平均值。在我的例子中:(3+2+1)/3=2(而不是3/3=1)。我不明白的是,为什么在总体水平上,将30个不同的值相加并除以30需要2,5秒。要明确的是,你说的只是基本的
DISTINCTCOUNT(表[SKU])
计算需要7秒以上?您的数据表有多少行?比如1亿行?基本的不同计数大约需要1.5秒,但按日期分组大约需要7秒。我的示例数据由1.3亿行组成。才一个月。整个TM表包含2年的时间,大小约为25GB。我猜您只是看到了在大型数据集上进行计算的效果。你可以上游的任何聚合或它是否必须与DAX动态完成?可能。我只是不明白(现在)为什么不同的计数器本身比不同的天数除以天数快两秒。。。我认为可能有一种方法可以调整DAX语句以获得更高的性能。