تستخدم أداة Looker Studio واجهة postMessage لتوفير بيانات ومعلومات حول التنسيق إلى إطار iframe الذي يحتوي على التمثيل المرئي الخاص بالمنتدى. يقدّم هذا الدليل تفاصيل أكثر حول استخدام مكتبة الأدوات المساعدة.
بالنسبة إلى الرسومات البيانية من إنشاء المنتدى، تؤدي السمة ds-component وظيفتَين.
- الحصول على أبعاد الإطار iframe
- إدارة التواصل مع Looker Studio
الاشتراك في الأحداث
عندما يتفاعل مستخدم مع التمثيل المرئي، مثل تغيير الحقول المحدّدة أو النمط أو تغيير حجم المكوّن، يرسل Looker Studio أحداثًا إلى التمثيل المرئي.
تسجّل الدالة dscc.subscribeToData عملية ردّ اتصال سيتم استدعاؤها لكل حدث postMessage من Looker Studio. يتم تمرير عنصر data إلى دالة معاودة الاتصال.
function drawViz(data){
// obtain the height and width to scale your visualization appropriately
var height = dscc.getHeight();
var width = dscc.getWidth();
// write your visualization code here
console.log("I'm the callback and I was passed this data: " + JSON.stringify(data, null, ' '));
}
// call drawViz every time Looker Studio sends a new postMessage
dscc.subscribeToData(drawViz, {transform: dscc.objectTransform});
البيانات التي تم عرضها
تعرض كلتا عمليتَي تحويل البيانات عنصرًا يحتوي على خمسة مفاتيح.
| المفتاح | الغرض |
|---|---|
style |
معلومات عن النمط التلقائي والنمط الذي يختاره المستخدم |
fields |
معلومات عن الحقول التي يختارها المستخدم |
interactions |
التفاعلات التي يختارها المستخدم |
theme |
معلومات عن موضوع البحث |
tables |
صفوف البيانات |
dateRanges |
النطاقات الزمنية التلقائية ونطاقات المقارنة |
تنسيق البيانات:
{
fields: object(fieldsByConfigId),
style: object(styleById),
interactions: object(interactionsById),
theme: object(themeStyle),
tables: object(tablesById),
dateRanges: object(dateRangesById),
}
تتطلّب طرق العرض المختلفة تنسيقات بيانات مختلفة. هناك تنسيقان شائعان هما مصفوفة من المصفوفات أو مصفوفة من العناصر. توفّر مكتبة ds-component تحويلَين مصمَّمَين لتوجيهك مباشرةً إلى تنسيقات البيانات هذه.
تم توثيق عملية التحويلَين في
library-reference. يمكن ربط عمليات التحويل هذه بسهولة بتنسيقات البيانات التي تتوقّعها عادةً مكتبات العرض المرئي المستندة إلى JavaScript. عمليتَا التحويل المتاحتان هما: objectTransform، التي تعرض مصفوفة من العناصر، وtableTransform، التي تعرض مصفوفة من المصفوفات.
dscc.objectTransform
تتوقّع بعض التمثيلات البصرية أن تكون البيانات عبارة عن مصفوفة من العناصر.
على سبيل المثال:
var data = [
{'colA': 'hello', 'colB', 'world'},
{'colA': 'hello', 'colB', 'world'}
];
يوضّح الرمز التالي كيفية الوصول إلى مصفوفة من العناصر من تنسيق dscc.objectTransform.
function drawViz(data){
// what the object transform could look like
// [
// {'configId1': ['hello'], 'configId2': [1] },
// {'configId1': ['world'], 'configId2': [2] }
// ]
var dsccObjectTransformData = data.tables.DEFAULT;
// creating an array of objects
var arrayOfObjects = dscc.ObjectTransformData.rows.map(function(d){
return {
'configId1': d.configId1[0],
'configId2': d.configId2[0]
};
};
}
إذا تم تحديد أقسام البيانات بطريقة تتيح للمستخدم إدخال حقول متعددة (على سبيل المثال، إذا تم تحديد سمتَين لمخطط سهمي)، سيعتمد التحويل على حالة الاستخدام، لأنّ تنسيق البيانات الذي يعرضه Looker Studio سيكون على النحو التالي:
var dsccObjectTransformData = [
{'configId1': ['hello', 'there'], 'configId2': [1] },
{'configId1': ['world', 'globe'], 'configId2': [2] }
]
dscc.tableTransform
تتوقّع بعض مكتبات العرض المرئي مجموعة من المصفوفات.
على سبيل المثال:
var data = [
['hello', 1],
['world', 2]
];
يوضّح الرمز التالي كيفية الوصول إلى صف من الصفوف من تنسيق dscc.tableTransform.
function drawViz(data);
// what the below object looks like
// {
// headers: [{
// "id": "qt_ky8sltutsb",
// "name": "dimension",
// "type": "TEXT",
// "concept": "DIMENSION",
// "configId": "configId1"
// }, {
// "id": "qt_m9dtntutsb",
// "name": "metric",
// "type": "NUMBER",
// "concept": "METRIC",
// "configId": "configId2"
// }],
// rows: [
// ['hello', 1],
// ['world', 2]
// ];
// }
var dsccTableTransformObject = data.tables.DEFAULT;
// accessing the row of rows
var rowOfRows = dsccTableTransformObject.rows;
// accessing the header row
var headers = dsccTableTransformObject.headers;
}
dscc.subscribeToData(drawViz, {transform: tableTransform});