2017-10-09 105 views
1

是否可以從計算列中的DAX中的不同長度的字符串中移除所有非數字字符?刪除字符串中的所有數字字符DAX

該模型是模型,所以我無法在查詢時使用M語言來清理數據。

此外,我想刪除0開始的數字,但沒有結束0

考慮下面輸入一列:

C1 
C2 
C3 
6F 
2F 
5Z 
05F 
A10 

而這正是我要找的

輸出
1 
2 
3 
6 
2 
5 
5 
10 

回答

2

如果列寬是已知的,但不是太寬,可以使用這種方法。讓我們假設你的字母和數字混合列稱爲[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; 
+0

我更新了我的問題,你一言我注意到沒有明確不夠好回答的問題。 – uzr

+0

使用M編輯查詢不是一個選項。在這種情況下,我正在使用帶有直接查詢的表格SSAS模型作爲PowerBI的數據源。 – uzr

相關問題