1
是否可以从计算列中的DAX
中的不同长度的字符串中移除所有非数字字符?删除字符串中的所有数字字符DAX
该模型是ssas-tabular模型,所以我无法在查询时使用M语言来清理数据。
此外,我想删除0开始的数字,但没有结束0
考虑下面输入一列:
C1
C2
C3
6F
2F
5Z
05F
A10
而这正是我要找的
输出1
2
3
6
2
5
5
10
是否可以从计算列中的DAX
中的不同长度的字符串中移除所有非数字字符?删除字符串中的所有数字字符DAX
该模型是ssas-tabular模型,所以我无法在查询时使用M语言来清理数据。
此外,我想删除0开始的数字,但没有结束0
考虑下面输入一列:
C1
C2
C3
6F
2F
5Z
05F
A10
而这正是我要找的
输出1
2
3
6
2
5
5
10
如果列宽是已知的,但不是太宽,可以使用这种方法。让我们假设你的字母和数字混合列称为[Letters And Numbers]
:
Just The Numbers = IFERROR(VALUE(MID([Letters And Numbers], 1, 1)), IFERROR(VALUE(MID([Letters And Numbers], 2, 1)), BLANK()))
当然,如果你希望在列有多个号码这一问题变得更为复杂。
在这种情况下,很难用很来使用DAX语言来做到这一点;你需要写类似:
Just The Numbers = SUBSTITUTE(SUBSTITUTE([Letters And Numbers], "A", ""), "B", "")
除非你需要26层的替代品,除非你希望有更多或更少的非数字字符。
更好的是在编辑查询部分使用M.添加自定义列,定义如下:
= Table.AddColumn(#"Previous Step", "Just The Numbers", each Text.Combine(List.RemoveItems(Text.ToList([Letters And Numbers]),{"A".."z"})))
如果您无法因为您正在使用直接查询到SSAS表格模型中使用M,则唯一的选择可能是修改SQL查询的负载将该表放入表格模型中以添加附加列。
有可能,可以做一些T-SQL的例子很多,这里是一个:
USE AdventureWorksDW2012;
WITH split AS (
SELECT AddressLine1, v.number, character.c
FROM DimReseller AS r
JOIN master..spt_values AS v ON v.number BETWEEN 1 AND LEN(r.AddressLine1)
CROSS APPLY (VALUES(SUBSTRING(r.AddressLine1, v.number, 1))) AS character(c)
WHERE v.type = 'P'
AND character.c LIKE '[0-9]')
SELECT AddressLine1,
output = (SELECT c
FROM split
WHERE r.AddressLine1 = split.AddressLine1
ORDER BY number ASC
FOR XML PATH, TYPE).value(N'.[1]', N'bigint')
FROM dbo.DimReseller AS r
GROUP BY AddressLine1;
我更新了我的问题,你一言我注意到没有明确不够好回答的问题。 – uzr
使用M编辑查询不是一个选项。在这种情况下,我正在使用带有直接查询的表格SSAS模型作为PowerBI的数据源。 – uzr