# ExtractRegExGroup Komut dosyası ve grafik fonksiyonu

ExtractRegExGroup(), belirtilen birleşik normal ifade desenini kullanarak bir giriş dizesi ifadesinden metin çıkarır. Fonksiyonu kullanırken, bileşik regex içinde kullanılacak grubu belirtin. Hiçbir eşleşme bulunamazsa fonksiyon null değer döndürür.

ExtractRegExGroup() işlevini bir LOAD deyiminde kullanırsanız ve field\_no atlanırsa, işlev birden fazla kayıt döndürür. ExtractRegExGroup() kullanılarak birkaç alan yüklenirse tüm kombinasyonların Kartezyen çarpımları oluşturulur.

Bu fonksiyon, büyük/küçük harfe duyarlı regex işlemleri gerçekleştirir. Büyük/küçük harfe duyarlı olmayan regex işlemleri gerçekleştirmek için alternatif olarak ExtractRegExGroupI() varyantını kullanabilirsiniz.

Söz Dizimi:

ExtractRegExGroup (text, regex, group [, field\_no])

Dönüş verileri türü: dize

Bağımsız Değişkenler

| Bağımsız Değişken | Açıklama |
| --- | --- |
| text | Dönüş değerinde çıkarılacak metni içeren dize ifadesi. |
| regex | Metni ayıklamak için kullanılacak normal ifade. |
| group | Bileşik normal ifade olması durumunda, grubun numarası.<br><br>Normal ifade yalnızca bir grup içeriyorsa bunun yerine ExtractRegEx() fonksiyonunu kullanın. Alternatif olarak, ExtractRegExGroup() öğesini group değeri `0` olacak şekilde kullanın.<br><br>Eşleşmeleri sağdan sola doğru aramak için negatif bir group değeri belirtebilirsiniz. |
| field\_no | Çıkarılacak eşleşmenin sayısı. Bu, metinde normal ifade için birden fazla eşleşme bulunabileceği durumlarda kullanışlıdır. Örneğin, dördüncü eşleşmeyi çıkarmak için `4` değerini belirtin.<br><br>Bu, isteğe bağlı bir bağımsız değişkendir. Belirtilmediği takdirde varsayılan değer 1 olur. |

Fonksiyon örnekleri

| Örnek | Sonuç |
| --- | --- |
| `ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',1)` | `abc` (ilk eşleşmenin ilk grubu) döndürür. |
| `ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',1,2)` | `def` (ikinci eşleşmenin ilk grubu) döndürür. |
| `ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',2)` | `123` (ilk eşleşmenin ikinci grubu) döndürür. |
| `ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',2,2)` | `456` (ikinci eşleşmenin ikinci grubu) döndürür. |

## Ne zaman kullanılır?

Başka bilgiler de içerebilecek verilerden (örneğin, serbest metin veya JSON dizeleri) ayırmak istediğiniz bilgileri ayıklamak için Extract RegEx() kullanabilirsiniz. Örnek:

* Metinden e-posta adreslerini, telefon numaralarını, hesap numaralarını ve diğer bilgileri ayıklayın.

* Metinden sayısal değerleri (örneğin, para birimi) ayıklayın.

* Metin veya sayısal verilerin biçimlendirmesini standartlaştırın.

## Örnek 1 - işlem kodlarını ayrıştırmak için komut dosyası

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/ExtractRegExGroup.htm)

#### Yükleme kodu ve sonuçlar

Genel bakış

Veri yükleme düzenleyicisini açın ve aşağıdaki komut dosyasını yeni bir bölüme ekleyin.

Komut dosyası şunları içerir:

* İşlemler hakkında bilgi içeren `Transactions` adlı bir tablo. Belirli ayrıntılar aşağıdaki söz dizimi kullanılarak işlem kodlarıyla yakalanır:

  İşlem yılı-İşlem kaynağı (yani çevrimiçi veya mağazadan satın alma)-İlişkili dağıtım merkezi

* Her ayrıntıyı ayıklamak için her biri aynı bileşik normal ifadeyi yeniden kullanan birkaç yeni alan oluşturulması.

Gereksinimlerimiz:

* Yıl, dört sayının herhangi bir kombinasyonu olabilir.

* ONLINE ve INSTORE değerleri, işlem kaynağı için kabul edilebilir tek değerlerdir.

* Dağıtım merkezinde tam olarak beş sayı bulunmalıdır.

Komut dosyası

```
Transactions:

Load 
	recno() as RecordID,
	ExtractRegExGroup(TransactionCode,'([0-9]{4})-(ONLINE|INSTORE)-([0-9]{5})',0) as TransactionCode_Unparsed,
	ExtractRegExGroup(TransactionCode,'([0-9]{4})-(ONLINE|INSTORE)-([0-9]{5})',1) as TransactionYear,
	ExtractRegExGroup(TransactionCode,'([0-9]{4})-(ONLINE|INSTORE)-([0-9]{5})',2) as TransactionSource,
	ExtractRegExGroup(TransactionCode,'([0-9]{4})-(ONLINE|INSTORE)-([0-9]{5})',3) as TransactionDC,
* Inline `
TransactionCode, Category
2025-ONLINE-60019, Product A
2024-INSTORE-60020, Product B
2025-ONLINE-60018, Product C
2024-ONLINE-60020, Product A
2025-INSTORE-60019, Product B
2025-ONLINE-60017, Product D
`;
```

Sonuçlar

Verileri yükleyin ve bir sayfa açın. Yeni bir tablo oluşturun ve şu alanları boyut olarak ekleyin:

* `RecordID`

* `TransactionCode`

* `TransactionCode_Unparsed`

* `TransactionYear`

* `TransactionSource`

* `TransactionDC`

Sonuçlar tablosu

| RecordID | TransactionCode | TransactionCode\_Unparsed | TransactionYear | TransactionSource | TransactionDC |
| --- | --- | --- | --- | --- | --- |
| 1 | 2025-ONLINE-60019 | 2025-ONLINE-60019 | 2025 | ONLINE | 60019 |
| 2 | 2024-INSTORE-60020 | 2024-INSTORE-60020 | 2024 | INSTORE | 60020 |
| 3 | 2025-ONLINE-60018 | 2025-ONLINE-60018 | 2025 | ONLINE | 60018 |
| 4 | 2024-ONLINE-60020 | 2024-ONLINE-60020 | 2024 | ONLINE | 60020 |
| 5 | 2025-INSTORE-60019 | 2025-INSTORE-60019 | 2025 | INSTORE | 60019 |
| 6 | 2025-ONLINE-60017 | 2025-ONLINE-60017 | 2025 | ONLINE | 60017 |

Bu sonuçlar, group bağımsız değişkeninin tek bir regex'i birden fazla işlem için yeniden kullanmanıza nasıl izin verdiğini vurgulamaktadır. group değerini 0 olarak kullanan `TransactionCode_Unparsed` alanı bu durumda herhangi bir ek değer sağlamaz, ancak fonksiyonu göstermek amacıyla burada gösterilmiştir.

## Örnek 2 - işletme iletişim bilgilerini ayıklamak için komut dosyası

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/ExtractRegExGroup.htm)

#### Yükleme kodu ve sonuçlar

Genel bakış

Veri yükleme düzenleyicisini açın ve aşağıdaki komut dosyasını yeni bir bölüme ekleyin.

Komut dosyası şunları içerir:

* Şirketler hakkında her bir şirketin web sitesinde bulunan bilgileri içeren `BusinessContactInfo` adlı bir tablo.

* `ContactInfo`, şirket e-posta adresleri ve telefon numaraları dahil olmak üzere serbest metin içeren bir alandır.

* Her ayrıntıyı ayıklamak için her biri aynı bileşik normal ifadeyi yeniden kullanan birkaç yeni alan oluşturulması.

Gereksinimlerimiz:

* E-posta adresleri belirli bir dizi gereksinimi ve söz dizimini karşılamalıdır.

* Telefon numaraları 10 haneli NANP telefon numaraları olmalıdır. Alan kodunun parantez içine alınmasına ve belirli noktalarda boşluk ve tire işaretlerine izin vermek istiyoruz.

Komut dosyası

```
BusinessContactInfo:

Load
	ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&*\-_+=~{|}\/.'']{1,50})|(\({0,1}[0-9]{3}\){0,1}[ -]*[0-9]{3}[ -]*[0-9]{4})',1,1) as CompanyEmail,
	ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&*\-_+=~{|}\/.'']{1,50})|(\({0,1}[0-9]{3}\){0,1}[ -]*[0-9]{3}[ -]*[0-9]{4})',2,2) as CompanyPhoneNum,
* Inline `
ID	CompanyName	ContactInfo
1	Company A	Email is: Company1@example.com, Phone number is: (123) 456-7890
2	Company B	Email is: company2@test.com, Phone # is: 0123456790
3	Company C	Email is: company3@placeholder.com, Phone no. is: 234-567-8901

` (delimiter is '\t');
```

Sonuçlar

Verileri yükleyin ve bir sayfa açın. Yeni bir tablo oluşturun ve şu alanları boyut olarak ekleyin:

* `CompanyName`

* `CompanyEmail`

* `CompanyPhoneNum`

Sonuçlar tablosu

| CompanyName | CompanyEmail | CompanyPhoneNum |
| --- | --- | --- |
| Company A | Company1@example.com | (123) 456-7890 |
| Company B | company2@test.com | 0123456790 |
| Company C | company3@placeholder.com | 234-567-8901 |

Aynı bileşik normal ifade, farklı bilgileri almak için yeniden kullanılır. group bağımsız değişkeni, normal ifadenin iki grubundan hangisinin aranacağını belirtir ve field\_no bağımsız değişkeni, bulmak istediğimiz genel eşleşmeyi (tüm dize boyunca) belirtir.

Fonksiyonun ExtractRegEGroupxI() varyantı büyük/küçük harfe duyarsız arama yapılmasını sağlar.

## Örnek 3 - ISBN kodlarından bileşenleri çıkarmak için komut dosyası

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/ExtractRegExGroup.htm)

#### Yükleme kodu ve sonuçlar

Genel bakış

Veri yükleme düzenleyicisini açın ve aşağıdaki komut dosyasını yeni bir bölüme ekleyin.

Komut dosyası şunları içerir:

* Tüm ayıklamalar için kullanmak istediğimiz düzenli ifadeyi saklamak üzere `ISBN_RegEx` değişkeninin oluşturulması.
* Bir kitap mağazasının çeşitli tedarikçilerden sipariş etmek istediği kitaplar için ISBN kodları kümesi.

Her bir ISBN kodundan aşağıdakileri çıkarmamız gerekiyor:

* EAN

* Gruplama

* Tescil Eden

* Yayın

* Checksum

Komut dosyası

```
SET ISBN_RegEx = 'ISBN[ ]*([0-9]{3})-([0-9]{1})-([0-9]{4})-([0-9]{4})-([0-9]{1})';

ISBN:
LOAD Supplier,
ExtractRegExGroup(Books,'$(ISBN_RegEx)',1) AS EAN,
ExtractRegExGroup(Books,'$(ISBN_RegEx)',2) AS Group,
ExtractRegExGroup(Books,'$(ISBN_RegEx)',3) AS Registrant,
ExtractRegExGroup(Books,'$(ISBN_RegEx)',4) AS Publication,
ExtractRegExGroup(Books,'$(ISBN_RegEx)',5) AS Checksum;
// Split the ISBN with the Group function in a preceding load to avoid generating a cartesian product
LOAD *,
ExtractRegEx(SupplierBooks, '$(ISBN_RegEx)') AS Books
INLINE [
Supplier, SupplierBooks
Supplier 1, ISBN 123-3-1234-1234-0 ISBN 012-2-0123-0123-4 ISBN 000-1-0123-0123-2 ISBN 234-5-2345-2345-1 ISBN 555-2-5555-5555-3 ISBN 222-4-2222-2222-2
Supplier 2, ISBN 000-0-3333-3333-3 ISBN 333-3-3333-3333-3 ISBN 555-1-5151-5151-3 ISBN 232-1-2323-2323-1 ISBN 008-0-7777-7777-3 ISBN 888-0-9999-0000-0
];
```

Sonuçlar

Verileri yükleyin ve bir sayfa açın. Yeni bir tablo oluşturun ve şu alanları boyut olarak ekleyin:

* `Supplier`

* `EAN`

* `Group`

* `Registrant`

* `Publication`

* `Checksum`

Sonuçlar tablosu

| Supplier | EAN | Group | Registrant | Publication | Checksum |
| --- | --- | --- | --- | --- | --- |
| Supplier 1 | 000 | 1 | 0123 | 0123 | 2 |
| Supplier 1 | 012 | 2 | 0123 | 0123 | 4 |
| Supplier 1 | 123 | 3 | 1234 | 1234 | 0 |
| Supplier 1 | 222 | 4 | 2222 | 2222 | 2 |
| Supplier 1 | 234 | 5 | 2345 | 2345 | 1 |
| Supplier 1 | 555 | 2 | 5555 | 5555 | 3 |
| Supplier 2 | 000 | 0 | 3333 | 3333 | 3 |
| Supplier 2 | 008 | 0 | 7777 | 7777 | 3 |
| Supplier 2 | 232 | 1 | 2323 | 2323 | 1 |
| Supplier 2 | 333 | 3 | 3333 | 3333 | 3 |
| Supplier 2 | 555 | 1 | 5151 | 5151 | 3 |
| Supplier 2 | 888 | 0 | 9999 | 0000 | 0 |

## Örnek 4 - iş irtibat bilgilerini ayıklamak için grafik ifadeleri (ExtractRegEx() karşılaştırması ile)

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/ExtractRegExGroup.htm)

#### Grafik ifadeleri ve sonuçları

Genel bakış

Veri yükleme düzenleyicisini açın ve aşağıdaki komut dosyasını yeni bir bölüme ekleyin.

Komut dosyası şunları içerir:

* Şirketler hakkında her bir şirketin web sitesinde bulunan bilgileri içeren BusinessContactInfo adlı bir tablo.

* ContactInfo, şirket e-posta adresleri ve telefon numaraları dahil olmak üzere serbest metin içeren bir alandır. Her bir e-posta adresini ve telefon numarasını grafik ifadeleri ile ayıklamak istiyoruz.

Gereksinimlerimiz:

* E-posta adresleri belirli bir dizi gereksinimi ve söz dizimini karşılamalıdır.

* Telefon numaraları 10 haneli NANP telefon numaraları olmalıdır. Alan kodunun parantez içine alınmasına ve belirli noktalarda boşluk ve tire işaretlerine izin vermek istiyoruz.

Komut dosyası

```
BusinessContactInfo:

Load * Inline `
ID	CompanyName	ContactInfo
1	Company A	Email is: Company1@example.com, Phone number is: (123) 456-7890
2	Company B	Email is: company2@test.com, Phone # is: 0123456790
3	Company C	Email is: company3@placeholder.com, Phone no. is: 234-567-8901

` (delimiter is '\t');
```

Sonuçlar

Verileri yükleyin ve bir sayfa açın. Yeni bir tablo oluşturun ve şu alanı boyut olarak ekleyin:

* CompanyName

Aşağıdaki hesaplanan boyutu tabloya ekleyin:

* 

  ```
  =ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&*\-_+=~{|}\/.'']{1,50})|(\({0,1}[0-9]{3}\){0,1}[ -]*[0-9]{3}[ -]*[0-9]{4})',1,1)
  ```

* 

  ```
  =ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&*\-_+=~{|}\/.'']{1,50})|(\({0,1}[0-9]{3}\){0,1}[ -]*[0-9]{3}[ -]*[0-9]{4})',2,2)
  ```

Sonuçlar tablosu

| CompanyName | =ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']+@[a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&\*\-\_+=~{\|}\/.'']{1,50})\|(\({0,1}[0-9]{3}\){0,1}[ -]\*[0-9]{3}[ -]\*[0-9]{4})',1,1) | =ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']+@[a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&\*\-\_+=~{\|}\/.'']{1,50})\|(\({0,1}[0-9]{3}\){0,1}[ -]\*[0-9]{3}[ -]\*[0-9]{4})',2,2) |
| --- | --- | --- |
| Company A | Company1@example.com | (123) 456-7890 |
| Company B | company2@test.com | 0123456790 |
| Company C | company3@placeholder.com | 234-567-8901 |

Aynı bileşik normal ifade, farklı bilgileri almak için yeniden kullanılır. group bağımsız değişkeni, normal ifadenin iki grubundan hangisinin aranacağını belirtir ve field\_no bağımsız değişkeni, bulmak istediğimiz genel eşleşmeyi (tüm dize boyunca) belirtir.

Fonksiyonun ExtractRegEGroupI() varyantı büyük/küçük harfe duyarsız arama yapılmasını sağlar.

## Örnek 5 - URL ayrıştırma (ExtractRegEx() karşılaştırması ile)

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/ExtractRegExGroup.htm)

#### Grafik ifadeleri ve sonuçları

Genel bakış

Veri yükleme düzenleyicisini açın ve aşağıdaki komut dosyasını yeni bir bölüme ekleyin.

Komut dosyası şunları içerir:

* EmailBody adlı bir alanda e-posta mesajı metni içeren Correspondence adlı bir tablo.

* Web URL'leri içeren e-posta mesajı içeriği.

Varsa ikinci URL'yi aşağıdaki bileşenlere ayıklamak istiyoruz:

* Tam URL

* Protokol

* Etki Alanı

* Yol

Tüm ayıklama işlemlerini kontrol etmek için tek bir düzenli ifade kullanmak istiyoruz.

Komut dosyası

```
Correspondence:

Load * Inline `
ID	EmailBody
1	Thanks again for this morning's meeting! You can find the meeting minutes posted here: https://example.com/resourceexample. If you still have any questions, always feel free to ask me or one of the other team members. Here are a few learning resources that might help you: http://www.example.ca/training1.pptx http://www.example.ca/training2.pptx http://www.example.ca/training3.pptx Thanks again!
2	Hi, you'll want to visit our company website for that, it's available at https://www.example.se.
3	Hello all, I just wanted to let you know that our online stores are now up and running! I couldn't be more excited. We are already seeing quite a bit of traffic and volume sold, which is very promising! For Product A, go to https://www.examplestore1.com/products. For Product B, you'll want go to https://www.examplestore2.com/products. Product C, go check out https://www.examplestore3.com/products. Cheers!

` (delimiter is '\t');
```

Sonuçlar

Verileri yükleyin ve bir sayfa açın. Yeni bir tablo oluşturun ve şu alanı boyut olarak ekleyin:

* ID

Şu hesaplanan boyutları ekleyin:

* URL 2:

  ```
  =ExtractRegEx(EmailBody,'([a-zA-Z0-9]+):\/\/(([a-zA-Z0-9]+\.)*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+))((\/[a-zA-Z0-9]+)*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))?',2)
  ```

* URL 2 Protokolü:

  ```
  =ExtractRegExGroup(EmailBody,'([a-zA-Z0-9]+):\/\/(([a-zA-Z0-9]+\.)*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+))((\/[a-zA-Z0-9]+)*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))?',1,2)
  ```

* URL 2 Etki Alanı:

  ```
  =ExtractRegExGroup(EmailBody,'([a-zA-Z0-9]+):\/\/(([a-zA-Z0-9]+\.)*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+))((\/[a-zA-Z0-9]+)*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))?',2,2)
  ```

* URL 2 Yolu:

  ```
  =ExtractRegExGroup(EmailBody,'([a-zA-Z0-9]+):\/\/(([a-zA-Z0-9]+\.)*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+))((\/[a-zA-Z0-9]+)*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))?',6,2)
  ```

Sonuçlar tablosu

| Kimlik | URL 2 | URL 2 Protokolü | URL 2 Etki Alanı | URL 2 Yolu |
| --- | --- | --- | --- | --- |
| 1 | http://www.example.ca/training1.pptx | http | www.example.ca | /training1.pptx |
| 2 | - | - | - | - |
| 3 | https://www.examplestore2.com/products | https | www.examplestore2.com | /products |

ExtractRegEx(), URL'nin tamamını döndürürken ExtractRegExGroup(), kullandığımız group değerine karşılık gelen URL'nin ayrı bölümlerini döndürür. ID değeri 2 olan kayıt yalnızca bir URL içerir, bu nedenle bu kayıt için hiçbir veri döndürülmez.

Aynı normal ifade, farklı bilgi parçalarını döndürmek için tüm grafik ifadelerinde kullanılır. Normal ifadede tanımlanan grupların dökümü aşağıdaki gibidir.

Normal ifadedeki gruplar

| Grup numarası | Regex | URL kısmı |
| --- | --- | --- |
| 1 | ([a-zA-Z0-9]+) | Protokol |
| 2 | (([a-zA-Z0-9]+\.)\*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+)) | Etki alanı (grup 3, 4 ve 5) |
| 3 | ([a-zA-Z0-9]+\.)\* | Kök etki alanı |
| 4 | ([a-zA-Z0-9]+) | Üst düzey etki adı |
| 5 | ([a-zA-Z0-9]+) | Yol (grup 7, 8, 9 ve 10) (isteğe bağlı) |
| 6 | ((\/[a-zA-Z0-9]+)\*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))? | Alt dizin |
| 7 | (\/[a-zA-Z0-9]+)\* | Dosya (grup 9 ve 10) |
| 8 | (\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?) | Dosya |
| 9 | ([a-zA-Z0-9]+) | Dosya adı |
| 10 | (\.[a-zA-Z0-9]+)? | Dosya uzantısı (isteğe bağlı) |

## Daha fazla bilgi

* [Komut dosyalarında ve grafik ifadelerinde normal ifadelerle çalışma](https://help.qlik.com/tr-TR/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/regular-expressions-qlik-analytics.htm)