2017-10-09 52 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", "") 

以外の数の非数値文字が必要な場合を除き、次のように書く必要があります。

編集クエリセクションで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の多くの例があり、ここでは1です:

私は私の質問を更新し
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を使用してクエリを編集することはできません。この場合、私はPowerBIのデータソースとしてDirect Queryを持つテーブルSSASモデルを使用しています。 – uzr

関連する問題