Power BI'dan daha fazla veri getirme
fetchMoreData API'si, Power BI görsellerinin 30.000 satır veri görünümünün sabit sınırını aşmasını sağlamanın bir yolu olarak farklı boyutlardaki veri öbeklerini yüklemenizi sağlar. API, istenen tüm öbekleri toplamaya yönelik özgün yaklaşımın yanı sıra artık veri öbeklerinin artımlı olarak yüklenmesini de destekliyor.
Bir kere önceden getirebileceğiniz satır sayısını yapılandırabilir veya rapor yazarının öbek boyutunu dinamik olarak ayarlamasına izin vermek için kullanabilirsiniz dataReductionCustomization
.
Not
fetchMoreData
API 3.4 ve üzeri sürümlerde kullanılabilir.
Dinamik dataReductionCustomization
API 5.2 ve üzeri sürümlerde kullanılabilir.
Hangi sürümü kullandığınızı öğrenmek için pbiviz.json dosyasına bakın.apiVersion
Büyük semantik modellerin kesimli olarak getirilebilmesini sağlama
Gerekli dataViewMapping
için görselin capabilities.json dosyasında için bir pencere boyutu dataReductionAlgorithm
tanımlayın. , count
her güncelleştirmede sonuna ekleyebileceğiniz dataview
yeni veri satırlarının sayısını sınırlayan pencere boyutunu belirler.
Örneğin, bir kerede 100 veri satırı eklemek için capabilities.json dosyasına aşağıdaki kodu ekleyin:
"dataViewMappings": [
{
"table": {
"rows": {
"for": {
"in": "values"
},
"dataReductionAlgorithm": {
"window": {
"count": 100
}
}
}
}
]
Yeni segmentler var olan dataview
bölüme eklenir ve görsele çağrı update
olarak sağlanır.
Power BI görselinde fetchMoreData kullanma
Power BI'da iki yoldan birini kullanabilirsiniz fetchMoreData
:
- segment toplama modu
- artımlı güncelleştirmeler modu
Segment toplama modu (varsayılan)
Segment toplama moduyla, görsele sağlanan veri görünümü önceki fetchMoreData requests
tüm birikmiş verileri içerir. Bu nedenle, veri görünümü boyutu her güncelleştirmede pencere boyutuna göre büyür. Örneğin, toplam 100.000 satır bekleniyorsa ve pencere boyutu 10.000 olarak ayarlandıysa, ilk güncelleştirme veri görünümü 10.000 satır, ikinci güncelleştirme veri görünümünde 20.000 satır vb. olmalıdır.
ile aggregateSegments = true
çağırarak fetchMoreData
segment toplama modunu seçin.
varlığını denetleyerek dataView.metadata.segment
verilerin mevcut olup olmadığını belirleyebilirsiniz:
public update(options: VisualUpdateOptions) {
const dataView = options.dataViews[0];
console.log(dataView.metadata.segment);
// output: __proto__: Object
}
Ayrıca, öğesini denetleyerek options.operationKind
güncelleştirmenin ilk güncelleştirme mi yoksa sonraki bir güncelleştirme mi olduğunu kontrol edebilirsiniz. Aşağıdaki kodda, VisualDataChangeOperationKind.Create
ilk segmente ve VisualDataChangeOperationKind.Append
sonraki segmentlere başvurur.
// CV update implementation
public update(options: VisualUpdateOptions) {
// indicates this is the first segment of new data.
if (options.operationKind == VisualDataChangeOperationKind.Create) {
}
// on second or subsequent segments:
if (options.operationKind == VisualDataChangeOperationKind.Append) {
}
// complete update implementation
}
Yöntemini ui olay işleyicisinden de çağırabilirsiniz fetchMoreData
:
btn_click(){
{
// check if more data is expected for the current data view
if (dataView.metadata.segment) {
// request for more data if available; as a response, Power BI will call update method
let request_accepted: bool = this.host.fetchMoreData(true);
// handle rejection
if (!request_accepted) {
// for example, when the 100 MB limit has been reached
}
}
}
Power BI, yöntemini çağırmaya this.host.fetchMoreData
yanıt olarak görselin update
yöntemini yeni bir veri kesimiyle çağırır.
Not
İstemci bellek kısıtlamalarını önlemek için Power BI, getirilen veri toplamını 100 MB ile sınırlar. Bu sınıra ulaşıldığında döndürür fetchMoreData()
false
.
Artımlı güncelleştirmeler modu
Artımlı güncelleştirmeler moduyla, görsele sağlanan veri görünümü yalnızca sonraki artımlı veri kümesini içerir. Veri görünümü boyutu tanımlı pencere boyutuna eşittir (veya son veri biti pencere boyutundan küçükse daha küçüktür). Örneğin, toplam 101.000 satır beklenirse ve pencere boyutu 10.000 olarak ayarlanırsa, görsel 10.000 veri görünümü boyutuna sahip 10 güncelleştirme ve 1.000 veri görünümüne sahip bir güncelleştirme alır.
artımlı güncelleştirmeler modu ile aggregateSegments = false
çağrılarak fetchMoreData
seçilir.
varlığını denetleyerek dataView.metadata.segment
verilerin mevcut olup olmadığını belirleyebilirsiniz:
public update(options: VisualUpdateOptions) {
const dataView = options.dataViews[0];
console.log(dataView.metadata.segment);
// output: __proto__: Object
}
Ayrıca, öğesini denetleyerek güncelleştirmenin ilk güncelleştirme mi yoksa sonraki bir güncelleştirme mi olduğunu de kontrol options.operationKind
edebilirsiniz. Aşağıdaki kodda, VisualDataChangeOperationKind.Create
ilk segmente ve VisualDataChangeOperationKind.Segment
sonraki segmentlere başvurur.
// CV update implementation
public update(options: VisualUpdateOptions) {
// indicates this is the first segment of new data.
if (options.operationKind == VisualDataChangeOperationKind.Create) {
}
// on second or subsequent segments:
if (options.operationKind == VisualDataChangeOperationKind.Segment) {
}
// skip overlapping rows
const rowOffset = (dataView.table['lastMergeIndex'] === undefined) ? 0 : dataView.table['lastMergeIndex'] + 1;
// Process incoming data
for (var i = rowOffset; i < dataView.table.rows.length; i++) {
var val = <number>(dataView.table.rows[i][0]); // Pick first column
}
// complete update implementation
}
Yöntemini ui olay işleyicisinden de çağırabilirsiniz fetchMoreData
:
btn_click(){
{
// check if more data is expected for the current data view
if (dataView.metadata.segment) {
// request for more data if available; as a response, Power BI will call update method
let request_accepted: bool = this.host.fetchMoreData(false);
// handle rejection
if (!request_accepted) {
// for example, when the 100 MB limit has been reached
}
}
}
Power BI, yöntemini çağırmaya this.host.fetchMoreData
yanıt olarak görselin update
yöntemini yeni bir veri kesimiyle çağırır.
Not
Veri görünümlerinin farklı güncelleştirmelerindeki veriler çoğunlukla özel olsa da, ardışık veri görünümleri arasında bazı çakışmalar vardır.
Tablo ve kategorik veri eşlemesi için, ilk N
veri görünümü satırlarının önceki veri görünümünden kopyalanan verileri içermesi beklenebilir.
N
şu şekilde belirlenebilir: (dataView.table['lastMergeIndex'] === undefined) ? 0 : dataView.table['lastMergeIndex'] + 1
Görsel, Power BI ile ek iletişimler olmadan verilere erişebilmesi için veri görünümünün bu görünüme geçirilmesini sağlar.
Özelleştirilmiş veri azaltma
Geliştirici her zaman görselin ne tür veriler görüntüleneceğini önceden bilmediğinden, rapor yazarının veri öbek boyutunu dinamik olarak ayarlamasına izin vermek isteyebilir. API sürüm 5.2'den, rapor yazarının her seferinde getirilen veri öbeklerinin boyutunu ayarlamasına izin vekleyebilirsiniz.
Rapor yazarının sayıyı ayarlamasına izin vermek için önce capabilities.json dosyanızda adlı dataReductionCustomization
bir özellik bölmesi nesnesi tanımlayın:
"objects": {
"dataReductionCustomization": {
"displayName": "Data Reduction",
"properties": {
"rowCount": {
"type": {
"numeric": true
},
"displayName": "Row Reduction",
"description": "Show Reduction for all row groups",
"suppressFormatPainterCopy": true
},
"columnCount": {
"type": {
"numeric": true
},
"displayName": "Column Reduction",
"description": "Show Reduction for all column groups",
"suppressFormatPainterCopy": true
}
}
}
},
Ardından, değerinden dataViewMappings
sonra için dataReductionCustomization
varsayılan değerleri tanımlayın.
"dataReductionCustomization": {
"matrix": {
"rowCount": {
"propertyIdentifier": {
"objectName": "dataReductionCustomization",
"propertyName": "rowCount"
},
"defaultValue": "100"
},
"columnCount": {
"propertyIdentifier": {
"objectName": "dataReductionCustomization",
"propertyName": "columnCount"
},
"defaultValue": "10"
}
}
}
Veri azaltma bilgileri biçim bölmesindeki görselin altında görünür.
Dikkat edilecekler ve sınırlamalar
Pencere boyutu 2-30.000 aralığındadır.
Veri görünümü toplam satır sayısı 1.048.576 satırla sınırlıdır.
Veri görünümü bellek boyutu, segment toplama modunda 100 MB ile sınırlıdır.