使用SUMMARIZECOLUMNS创建计算表在SSAS Tabular Cube中无列显示的问题求助
SUMMARIZECOLUMNS创建计算表在SSAS Tabular Cube中无列显示的问题求助
嘿,我来帮你捋捋这个问题!你碰到的情况确实有点让人困惑——DAX Studio里能正常跑的代码,到Tabular Editor里创建计算表就没列了,核心问题出在你的DAX代码的筛选逻辑和语法细节上。
先看你原来的代码:
SUMMARIZECOLUMNS ( 'Client Date'[Month], 'Client Date'[Year], FILTER ('Client Date','Client Date'[Date]=MONTH(NOW())), "Buy", [Count Sales] ) ORDER BY 'Client Date'[Year]
这里有两个关键错误导致了空表(所以看不到列):
类型不匹配的筛选条件
'Client Date'[Date]是日期类型的列,而MONTH(NOW())返回的是1-12的数字(比如当前是10月就返回10)。你用=把日期和数字直接比较,永远不会有匹配的行,自然整个计算表就是空的——空表在Tabular Editor里就会显示没有列。筛选器的写法可以更规范(可选,但影响性能)
虽然FILTER作为SUMMARIZECOLUMNS的筛选参数语法上允许,但对于这种简单的列值匹配,用TREATAS会更高效,尤其是当Client Date表很大的时候。
下面是修正后的代码,你可以直接复制到Tabular Editor里测试:
SUMMARIZECOLUMNS ( 'Client Date'[Month], 'Client Date'[Year], -- 筛选出当前年份+当前月份的行,避免跨年份的同月份数据混入 FILTER ( 'Client Date', MONTH('Client Date'[Date]) = MONTH(NOW()) && YEAR('Client Date'[Date]) = YEAR(NOW()) ), "Buy", [Count Sales] ) ORDER BY 'Client Date'[Year]
如果想要更高效的版本,可以换成TREATAS:
SUMMARIZECOLUMNS ( 'Client Date'[Month], 'Client Date'[Year], -- 直接匹配当前年份和月份的列值,性能更优 TREATAS({YEAR(NOW())}, 'Client Date'[Year]), TREATAS({MONTH(NOW())}, 'Client Date'[Month]), "Buy", [Count Sales] ) ORDER BY 'Client Date'[Year]
至于为什么DAX Studio里能运行出结果,大概率是你在DAX Studio运行时,上下文里有额外的筛选(比如手动选了某个日期范围),或者你在DAX Studio里的代码其实是正确的,复制到Tabular Editor时不小心写错了筛选条件。
把修正后的代码粘贴到Tabular Editor的表达式编辑器里验证,应该就能看到预期的3列和对应数据啦!
备注:内容来源于stack exchange,提问作者Linus
相关产品推荐
相关产品推荐

